知识卡片
时序数据库为度量数据的写多读少特征做出的激进存储取舍
内容
用传统关系数据库存度量指标效果不理想——书中给出一个200节点、200指标、 秒级采集频率的中等规模系统估算:200×200×86400=34.56亿条记录/天,远超 这类系统本身业务数据的量级。观察一条真实的Prometheus度量数据(时间戳+ 指标名+标签组+指标值)能看出关键特征:除时间外指标不与其他因素关联, 没有嵌套、没有关联、没有主外键,不需要范式和事务——这些特征恰好都是 可以针对性优化的地方,时序数据库就是为此而生。度量数据还有一个经验 规律(Facebook的研究):85%的查询只与最近26小时的写入相关,95%以上的 操作是写操作,且数据通常只追加、很少删改甚至不允许删改。基于”数据热点 集中在近期、多写少读、几乎不删改、只顺序追加”这几个特点,时序数据库 被允许做出比传统数据库激进得多的取舍:用日志结构合并树(LSM-Tree) 取代B+树作为存储结构(LSM本就适合写多读少且几乎不删改的场景);设置 激进的数据保留策略,按过期时间(TTL)自动删除旧数据以节省空间、提高 查询性能(这在传统数据库里是不可想象的操作);对旧数据做重采样 (Resampling)降低精度换空间——最近几天精确到秒,一个月前只需精确到 天,一年前精确到周即可。更极端的形式是轮替型数据库(RRD),用环形缓冲 思路只保留固定数量的最新数据,超期数据被直接轮替覆盖,因此虽然数据库 容量固定,却能接收无限量的输入。
参考来源
- 位置:《凤凰架构:构建可靠的大型分布式系统》第10章"可观测性"10.3.2节
"存储查询"(源文件:_epub-src对应OEBPS/Text/chapter124.xhtml)
- 结论依据:原文用200节点系统估算出日均34.56亿条记录,观察Prometheus
真实数据特征(无嵌套关联、不需事务),引用Facebook研究说明度量数据
多写少读、只追加不删改的特点,并列举LSM-Tree、TTL保留策略、重采样
三种激进优化手段及RRD轮替型数据库,直接支撑本卡片结论。
- 原始内容:针对数据热点只集中在近期数据、多写少读、几乎不删改、数据
只顺序追加这些特点,时序数据库被允许做出很激进的存储、访问和保留
策略……以日志结构的合并树代替传统关系型数据库中的B+树作为存储结构。