首页  

tdengine 在时序场景下 一些设计要点     所属分类 TDengine 浏览量 509
通用数据库
事务 MVCC ACID
Facebook 的 Gorilla  甚至提出不需要保证 Duration

乱序数据

写入延迟 吞吐量 查询性能 实时性  集群方案的运维成本

时序数据量大 价值偏低 压缩
列存   根据不同的类型使用高效的压缩算法
写入性能与压缩比 

设备 传感器  采样 
数据分区分片  实时构建索引

存储引擎 B-Tree  LSM-Tree

LSM Tree 上 建 B-Tree Index 
HBase 在 region 上 有 B-Tree Index
B-Tree  先写 WAL 和 内存 Cache 

InfluxDB  各种存储引擎尝试 LevelDB RocksDB BoltDB 等 
BoltDB 中 mmap+BTree 模型中随机 IO 导致的吞吐量低
RocksDB 纯 LSM Tree 存储引擎无法 优雅快速地按时间分区删除
多个 LevelDB + 划分时间分区的方法又会产生大量句柄

InfluxDB  自研存储引擎 TSM

TDengine  存储引擎
LSM Tree   WAL  内存skip list 等
去掉 LSM Tree 的层级结构 
按时间段分区、按表分块的 log 块


按表分块的设计和 OpenTSDB 的行聚合有些相似
OpenTSDB 行聚合把相同 tag 以一小时为时间范围,将这些数据都放到一行中存储,减少了聚合查询要扫描的数据量

TDengine 多列模型,而 OpenTSDB 单列模型
单列模型下是多行的聚合,多列模型下聚合会自然形成数据块

BRIN 索引  Block Range Index
块的起止时间 
.head 文件就是 key,而 .data 和 .last 文件就是 value
时序场景下,有了 BRIN 索引,可以不需要 bloom filter

tag数据 和 时序数据 分离
减少 tag数据 空间占用
TDengine 中表的数目和设备数目相同,上亿设备就是上亿张表
大量的元数据  元数据 分片存储

数据与元数据进行分片、多副本操作时,涉及一致性与可用性的问题
时序数据 通常采用最终一致  
最终一致算法 延迟低 吞吐量高 可用性比强一致算法好

InfluxDB 集群版 采用 Dynamo 这种无主风格的数据同步

元数据需要强一致,通常用 Raft Paxos 这类算法

上一篇     下一篇
杭州登高望远的好地方

西湖玫瑰线

java PAAS

吃在杭州

知识点汇总

Spring中的设计模式