- 数据建模
用实际案例告诉你,在 TDengine 如何进行数据建模 - TDengine | 涛思数据 (taosdata.com)
采用单表多列还是单表单列需要重点考虑数据结构变化的情况;
一、框架的概念理解
之所以先介绍这块,是由于建库建表配置参数时需要用到,对参数的理解才能更好发挥数据库的性能与数据的高可用,可能理解的不够透彻,欢迎指正,先上官网的介绍:
整体架构 | TDengine 文档 | 涛思数据 (taosdata.com)
二、建库建表
- 创建数据库
时序数据库创建过程中附带了很多属性值,这些属性值直接影响到数据库使用性能及数据维护等,因此在上生产环境前需要根据需要配置属性值以确保数据库使用的高效性;
--一个数据库对应一个数据节点实例dnode,dnode下有多个虚拟节点vnode与逻辑管理节点的mnode,vgroup用于管理vnode,
注意配置对应的参数:
-- vgroups:服务器CPU是16*2核,对应设置24,不超过cpu核数*2设置,
-- replica 副本数默认为1,集群中副本数必须小于或等于 DNODE 的数目
-- buffer 表示每个vnode的写入缓存数,单位MB,默认是256
-- keep 表示数据文件保存的天数,缺省值为 3650
--数据文件范围:默认DURATION 10d 表示10天一个文件
-- 数据库创建语句:
create database IF NOT EXISTS sczkdb replica 3 vgroups 24 buffer 256 keep 90d duration 10d;
修改数据参数:一个数据库创建成功后,仅部分参数可以修改并实时生效,其余参数不能修改:
eg:ALTER DATABASE sczkdb KEEP 60d;
- 创建超级表
超级表的创建必须包含一个时间戳列、一个tag列、一个数据列
单晶中控原始采集表对应TDengine超级表创建语句:
create STABLE test_rawdata (
nowtime TIMESTAMP,
eq_code NCHAR(15),
status int,
workcode NCHAR(30),
param_1 int,
param_2 double,
param_3 double,
)
TAGS (
location binary(64),
department binary(64),
workshop binary(64),
largearea binary(64),
smallarea binary(64)
)
- 创建子表
-- 子表创建依赖与超级表,指定对应的tags列信息,相当于子表的注释说明,在超级表查询中可用于数据过滤条件;
子表创建语句:
create table
if not exists testdb.table_A01 using testdb.test_rawdata TAGS('deptA','生产一部','一车间','A1','A01')
if not exists testdb.table_A02 using testdb.test_rawdata TAGS('deptB','生产一部','一车间','A1','A02')
- 数据删除
删除语法:DELETE FROM [ db_name. ] tb_name [WHERE condition];
参数:
db_name : 可选参数,指定要删除表所在的数据库名,不填写则在当前数据库中
tb_name : 必填参数,指定要删除数据的表名,可以是普通表、子表,也可以是超级表。
condition: 可选参数,指定删除数据的过滤条件,不指定过滤条件则为表中所有数据,请慎重使用。特别说明,这里的 where 条件中只支持对第一列时间列的过滤。
注意:删除数据并不会立即释放该表所占用的磁盘空间,而是把该表的数据标记为已删除,在查询时这些数据将不会再出现,但释放磁盘空间会延迟到系统自动或用户手动进行数据重整时。
- 表结构修改
超级表 | TDengine 文档 | 涛思数据 (taosdata.com)
- 增加超级表列,给超级表增加列后子表会自动也增加对应的列;
Eg:ALTER STABLE sczkdb.sczk_rawdata ADD COLUMN test_name float;
- 删除超级表列
Eg:ALTER STABLE sczkdb.sczk_rawdata DROP COLUMN test_name;
- 修改列宽
如果数据列的类型是可变长格式(BINARY 或 NCHAR),那么可以使用此指令修改其宽度(只能改大,不能改小)。
Eg:ALTER STABLE stb_name MODIFY COLUMN col_name data_type(length);