TDengine不同数据模型下的存储对比验证

    1、概念与数据模型      

制造业数字原生的OT数仓建设的补充章节,提到一个多值的模型,即把IoT数据归集为int,float,bool,string,由4个超级表分开存改为1个超级表统一存。

多超表模式:

CREATE DATABASE testdb;
USE testdb;
CREATE TABLE IF NOT EXISTS ot_int(ts timestamp, wts timestamp,v int, counter int,vquality int) TAGS (item binary(128));
CREATE TABLE IF NOT EXISTS ot_float(ts timestamp, wts timestamp,v float, counter int,vquality int) TAGS (item binary(128));
CREATE TABLE IF NOT EXISTS ot_string(ts timestamp, wts timestamp,v binary(128), counter int,vquality int) TAGS (item binary(128));
CREATE TABLE IF NOT EXISTS ot_bool(ts timestamp, wts timestamp,v bool, counter int,vquality int) TAGS  (item binary(128));

单超级表模式:

CREATE DATABASE testdb;
USE testdb;
CREATE TABLE IF NOT EXISTS ot(ts timestamp, wts timestamp, vint int, vfloat float,vbool bool,vstring binary(128),counter int,vquality int) TAGS (item binary(128),vtype  binary(16));

 2、测试环境

这里给出基于C#的测试的过程:

测试环境:

CentOS Linux release 8.4.2105

TDengine-server-2.4.0.14-Linux-x64

Visual Studio 2022

dotnet-sdk-5.0(CentOS Linux 8 不支持 .NET 6,安装指令:sudo dnf install dotnet-sdk-5.0)

默认参数安装

3、多超级表模式测试

写入160千万数据(16亿),完成后验证写入情况。

 存储占用情况

 

 4、单超级表模式验证

 首先清空Taos

systemctl stop taosd
rm -rf /var/log/taos/*
rm -rf /var/lib/taos/*
systemctl start taosd

创建超级表,写入数据并验证。

 

  5、结论 

   通过结果可以看到,在新版的TDengine下,数据字段允许NULL(较早的版本不支持),多几个空的值字段对存储影响可以忽略不计。

代码托管地址:GitHub - PascalMing/PascalMingTaosStorageTest: TDengine存储验证

### TDengine 中的设计物模型方法 在TDengine中,设计物模型主要依赖于超级表(Super Table)、子表(Subtable)以及标签(Tags)。这种结构允许高效管理和查询大量具有相似属性的对象。 #### 超级表与子表的概念 超级表定义了一类设备或对象的通用模式,而每个具体的实例则通过创建该超级表下的子表来表示。这种方式使得可以针对同一类型的多个实体共享相同的元数据描述,从而简化了管理并提高了性能[^4]。 #### 数据建模策略 为了更好地适配实际应用中的需求,建议采用如下原则: - **基于时间序列特性**:由于时序数据通常按时间顺序记录变化情况,因此应充分利用TDengine围绕时间戳构建的特点。 - **考虑灵活性和扩展性**:尽管初始阶段可能只需要少量字段,但在未来可能会增加新的测量指标;故而在最初规划时就要预留足够的空间以便后续调整而不影响现有架构稳定性[^1]。 #### 实际案例分析 假设有一个智能家居系统需要监控房间内的温度传感器。这里将以Python为例展示如何实现这一过程。 ```python import taos conn = taos.connect() # 创建数据库 conn.execute('CREATE DATABASE IF NOT EXISTS smart_home') # 使用新创建的数据库 conn.select_db('smart_home') # 建立超级表用于保存所有温湿度感应器共有的信息 create_super_table_sql = """ CREATE STABLE IF NOT EXISTS t_temperature ( ts TIMESTAMP, temperature FLOAT ) TAGS (location BINARY(20)) """ conn.execute(create_super_table_sql) # 插入具体位置对应的子表 insert_sub_table_sql_template = "INSERT INTO {} USING t_temperature TAGS ('{}') VALUES(NOW, {})" locations = ['bedroom', 'kitchen'] temperatures = [22.5, 24] for loc, temp in zip(locations, temperatures): sub_table_name = f"d_{loc}" insert_data_sql = insert_sub_table_sql_template.format(sub_table_name, loc, temp) conn.execute(insert_data_sql) ``` 上述代码片段展示了怎样在一个名为`smart_home`的新数据库里建立一个叫做`t_temperature`的超级表,并为其两个不同地点——卧室(`bedroom`)和厨房(`kitchen`)分别建立了各自的子表。这有助于保持良好的组织性和高效的查询效率[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值