涛思数据库的时序存储引擎的制作思路
涛思数据库的时序存储引擎如TDengine的设计思路主要围绕高吞吐、低延迟、高压缩比的核心目标展开以下是其存储引擎的关键实现思路一、时序数据特点时间有序数据按时间戳严格递增数值稳定连续数据点变化幅度小如传感器温度多维度关联每个数据点关联设备ID、指标名等多维标签二、存储引擎核心设计1.数据组织时间线模型以设备ID 指标定义一条独立的时间线同一时间线的数据按时间戳连续存储示例存储结构$$\begin{bmatrix}t_1 v_1 \t_2 v_2 \\vdots \vdots \t_n v_n\end{bmatrix}$$2.写入优化LSM树架构实时写入层内存缓冲区MemTable接受新数据持久化层数据达到阈值后转为不可变的TSP文件Time Series Partition后台合并压缩旧文件类似Leveled Compaction3.高效压缩元数据分离存储标签与数值数据分离避免重复存储列式压缩算法浮点数$\Delta$编码 异或压缩如Gorilla算法整型$\Delta-of-\Delta$二次差分典型压缩比可达10:1 ~ 30:14.索引优化时间区间跳过索引Time Range Skip Index记录每个数据块的最大最小时间戳$$\text{Block}i : [t{min}, t_{max}]$$标签倒排索引快速定位特定设备/指标的时间线三、核心技术实现// 简化的TSP文件结构 typedef struct { int64_t start_time; // 时间区间起点 int64_t end_time; // 时间区间终点 uint8_t* compressed_data; // Snappy压缩的列数据 uint32_t crc; // 校验码 } TSPBlock;关键操作流程写入路径graph LR A[写入请求] -- B[MemTable] B -- C{达到阈值?} C --|Yes| D[生成TSP文件] D -- E[后台合并队列]查询路径通过标签索引过滤目标时间线利用时间跳过索引定位物理数据块按需解压特定时间区间数据四、性能对比优势指标传统行存数据库时序优化存储写入吞吐1~5万点/秒100万点/秒磁盘占用1x0.1x~0.3x时间范围查询秒级毫秒级五、典型应用场景工业物联网每分钟百万级传感器数据写入金融行情纳秒级时间戳的高频交易记录运维监控TB级日志指标的实时检索该设计通过深度契合时序数据特性在保证数据完整性的前提下显著降低了存储成本与查询延迟。