系统设计
系统设计
在时序领域,分为 2 大流派:一派是以 Timescale 为代表的标准 SQL,另外一派是以 influxdb 为代表的 NoSQL(SQL-Like)这 2 大类型的时序数据库都具备一些通用能力:包括多值模型,数据类型既包含 string,也包含数值。非常丰富的算子和后聚合的能力,生态方面兼容 Promtheus。
-
数据模型方面,influxdb 和 tsdb 是动态 schema,timescale 是固定 schema。
-
存储模型方面,influxdb 采用了倒排索引,自研的 TSMT 结构以及 Gorilla 压缩;timescale 底层则是基于 PG,按时间管理 chunk table。
-
计算模型方面,timescale 依赖于外部的流处理框架,而 influxdata 则集成了 Kapacitor。
-
分布式方面:influxdb 单机,集群商业化。timescale 利用 master-slave 方式保障 HA,可以 scale-up 还不具备 scale-out 的能力。
数据模型
在时序领域数据的组织方式分为 2 类:单值模型和多值模型:influxdb,timescale 都是多值模型,单值模型的代表是 OpenTSDB 和 PTSDB。单值模型是指单一指标的数据值,比如某个机器的 cpu 指标。多值模型是指同样的维度在同一时刻不同的字段值,比如(cpu, mem, disk)。针对数据源的采集场景适合多值,可以把单值是多值的一种特例。
存储模型
聚合计算模型
时序数据的读取分为 3 个部分:用索引检索出时间线;从存储引擎加载数据;执行分布式流式聚合;