一、前文
TDengine 入门教程——导读
二、库(Database)
- TDengine 容许一个运行实例有多个库。
- 每个库可以配置不同的存储策略,包括内存池,缓存子表,数据保留策略等
- 一个库可以有多个表。
三、超级表(STable)
- 超级表不是传统意义上的数据表,超级表只是一个表的模板,不能存储任何数据。
- 超级表的数据存储在它的子表。
- 超级表可以有多个子表。
PS:我个人是觉得,超级表这个取名是个败笔,容易误导人。取名“母表
”更好。
四、普通表(Table)
- 普通表就是常规意义上的表,既有表的定义,又能存储数据。
- 普通表跟超级表对比没有意义,不是一个层级的。
- 普通表适合跟子表对比。
五、子表(Subtable)
- 子表本质就是普通表。
- 子表的表定义从超级表继承,普通表的表定义是自己有的。
- 子表跟普通表的不同在于静态标签。子表有静态标签,普通表没有静态标签。
- 子表一定属于一张超级表,但普通表不属于任何超级表。
- 普通表无法转为子表,子表也无法转为普通表。
从如下的sql语句可以得出
-
create table
不带tags
建表,成普通表 -
create table
带tags
建表,成超级表
taos> use test;
Database changed.
taos> create table test1(ts timestamp, temperature float);
Query OK, 0 of 0 rows affected (0.000728s)
taos> create table test2(ts timestamp, temperature float) tags(groupId int);
Query OK, 0 of 0 rows affected (0.001273s)
taos> show tables;
table_name |
=================================
test1 |
Query OK, 1 rows in database (0.003077s)
taos> show stables;
stable_name |
=================================
test2 |
Query OK, 1 rows in database (0.001557s)
六、标签(TAG)
标签,英文:TAG
TDengine的标签和InfluxDB的标签,差异较大:
- TDengine的标签指的是静态属性。
- InfluxDB的标签指的是索引。
TDengine标签的增加和删除只能作用于超级表。
- 超级表添加一个标签以后,该超级表下的所有子表会自动增加该标签。
- 对于数值型的标签,新增加的标签的默认值是 0。
- 超级表删除一个标签以后,该超级表下的所有子表会自动删除该标签。
- 说明:第一列标签不能删除,至少需要为超级表保留一个标签。
TDengine标签数据的修改只能作用于子表。
七、数据点(Data Point)
标签是静态的。
数据点是动态的,随着时间变化而变化。
这就是时序数据库最大的特点。所有的数据点都带有时间戳。
如果脱离了时间,数据点就没有了意义。
八、数据库设计
因地制宜,我们基于TDengine和InfluxDB两类不同特性的时序数据库,以电表数据为例,进行数据库设计。
电表数据主要有
数据点 | 标识 | 类型 | 特性 |
---|---|---|---|
电表编号 | id | vchar | 静态 |
电表位置 | location | vchar | 静态 |
电表类型 | ttype | int | 静态 |
分组编号 | groupId | int | 静态 |
正向有功总电量 | electricity | float | 动态 |
8.1 TDengine数据库设计
设计一张超级表,一个电表一张子表。
电表编号作为子表的表名。
create table (ts timestamp, electricity float) tags(location nchar(64), groupId int, ttype int)
子表d1
存储编号为d1
电表的数据:
电表位置 | 电表类型 | 分组编号 | 时间 | 正向有功总电量 |
---|---|---|---|---|
福建省厦门市 | 1 | 1 | 2022/09/18 00:15:00 | 0 |
福建省厦门市 | 1 | 1 | 2022/09/18 02:15:00 | 0.11 |
子表d2
存储编号为d2
电表的数据:
电表位置 | 电表类型 | 分组编号 | 时间 | 正向有功总电量 |
---|---|---|---|---|
福建省福州市 | 1 | 1 | 2022/09/18 00:15:00 | 10 |
福建省福州市 | 1 | 1 | 2022/09/18 02:15:00 | 20.2 |
8.2 InfluxDB数据库设计
InfluxDB 为无模式写入。
所有电表数据都往一张表里面写入。
电表编号 | 时间 | 正向有功总电量 |
---|---|---|
d1 | 2022/09/18 00:15:00 | 0 |
d1 | 2022/09/18 02:15:00 | 0.11 |
d2 | 2022/09/18 00:15:00 | 10 |
d2 | 2022/09/18 02:15:00 | 20.2 |
至于电表的静态数据,无需存入到InfluxDB数据库中,可以存入MySQL关系型数据库。
因为这些静态数据如果存入InfluxDB数据库,则很浪费资源。
电表属性表
电表编号 | 电表位置 | 电表类型 | 分组编号 |
---|---|---|---|
d1 | 福建省厦门市 | 1 | 1 |
d2 | 福建省福州市 | 1 | 1 |
九、总结
实话实说,InfluxDB概念更加简单,上手更快。具体可以参考:InfluxDB入门系列教程① 概念简介
TDengine主要是引入了超级表和子表的概念,有点绕,不是那么好理解。
理解清楚了,倒也还好。据说这么设计得目的是:采用一个数据采集点一张表的方式,能最大程度的保证单个数据采集点的插入和查询的性能是最优的。
有实际的存在意义,倒也说得过去。