TDEngine 数据库实现解析
TDEngine 是一款开源的时序数据库引擎,针对物联网业务场景优化,适合存储物联网设备持续产生的大量时序指标;本文基于 TDEngine Server 1.6.5 版本源码实现,分析 TDEngine 单机存储的实现原理。
TDEngine 组件
taosd
:TDEngine Server 服务程序,主要有 MGMT 元数据管理、DNODE 数据管理2个模块组成。- MGMT 模块维护 TDEngine Database、Table、User、Vnode 等元数据信息
- DNODE 模块实现数据存储、访问逻辑,DNODE 有多个 vnode 组成,每个 vnode 是一个独立的 LSM Tree,彼此间数据通过目录隔离。
taos
:TDEngine 客户端工具,通过 taos 可以连接到 TDEngine Server,并进行 DDL、DML 等数据库查询操作。taosdemo
:快速往 TDEngine Server 导入 Demo 数据的工具,用于测试非常方便 。taosdump
:从 TDEngine Server 导出数据库数据。
备注:图片转自参考资料 TDengine架构设计与存储结构
元数据管理
TDEngine Server 启动后,其数据组织结构类似如下结构,其中 $root/mgmt 目录存储数据库的元数据。
db.db
: 存储所有 database 的元数据信息,包括数据保留策略,压缩算法等; 一个 database 包含多个 table。meters.db
: 存储所有 table 的元数据信息,包括 table 对应的 ID 标识等;建模时,一个设备对应一个 table,table 的多个列存储设备的指标信息。user.db
: 存储所有 user 的元数据信息,包括用户名、鉴权信息等。vgroups.db
:存储所有 vnode 的元数据信息,包括 vnode 的缓存大小、所属的 database 等信息。一个 database 的数据会分散存储到多个 vnode 里,默认每个 vnode 存储 1000 个 table 的数据,当 database 里table 数量增加时,会跟着动态创建新的 vnode。
├── data
│ ├── vnode0
│ │ ├── v0f1865.data
│ │ ├── v0f1865.head0
│ │ └── v0f1865.last0
│ └── vnode1
│ ├── v1f1736.data
│ ├── v1f1736.head0
│ └── v1f1736.last0
├── mgmt
│ ├── db.db
│ ├── meters.db
│ ├── user.db
│ └── vgroups.db
├── output.txt
└── tsdb
├── vnode0
│ ├── db
│ │ ├── submit0.log
│ │ ├── v0f1865.data -> /var/lib/taos/data/vnode0/v0f1865.data
│ │ ├── v0f1865.head -> /var/lib/taos/data/vnode0/v0f1865.head0
│ │ └── v0f1865.last -> /var/lib/taos/data/vnode0/v0f1865.last0
│ └── meterObj.v0
└── vnode1
├── db
│ ├── submit1.log
│ ├── v1f1736.data -> /var/lib/taos/data/vnode1/v1f1736.data
│ ├── v1f1736.head -> /var/lib/taos/data/vnode1/v1f1736.head0
│ └── v1f1736.last -> /var/lib/taos/data/vnode1/v1f1736.last0
└── meterObj.v1
相关文章