涛思数据库的时序存储引擎的制作思路
2026/6/25 12:15:44 网站建设 项目流程

涛思数据库的时序存储引擎(如TDengine)的设计思路主要围绕高吞吐、低延迟、高压缩比的核心目标展开,以下是其存储引擎的关键实现思路:


一、时序数据特点

  1. 时间有序:数据按时间戳严格递增
  2. 数值稳定:连续数据点变化幅度小(如传感器温度)
  3. 多维度关联:每个数据点关联设备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 Compaction)
3.高效压缩
  • 元数据分离存储:标签与数值数据分离,避免重复存储
  • 列式压缩算法
    • 浮点数:$\Delta$编码 + 异或压缩(如Gorilla算法)
    • 整型:$\Delta-of-\Delta$二次差分
  • 典型压缩比可达10:1 ~ 30:1
4.索引优化
  • 时间区间跳过索引(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;
关键操作流程:
  1. 写入路径

    graph LR A[写入请求] --> B[MemTable] B --> C{达到阈值?} C -->|Yes| D[生成TSP文件] D --> E[后台合并队列]
  2. 查询路径

    • 通过标签索引过滤目标时间线
    • 利用时间跳过索引定位物理数据块
    • 按需解压特定时间区间数据

四、性能对比优势

指标传统行存数据库时序优化存储
写入吞吐1~5万点/秒100万+点/秒
磁盘占用1x0.1x~0.3x
时间范围查询秒级毫秒级

五、典型应用场景

  1. 工业物联网:每分钟百万级传感器数据写入
  2. 金融行情:纳秒级时间戳的高频交易记录
  3. 运维监控:TB级日志指标的实时检索

该设计通过深度契合时序数据特性,在保证数据完整性的前提下,显著降低了存储成本与查询延迟。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询