时序数据库基本概念

25b5379ec5512f942e4f745621b585c3.png

时序数据库(Time Series Database,TSDB)是专门用于存储、处理和查询时间序列数据的数据库系统。时间序列数据是指按照时间顺序记录的数据列,通常用于物联网、电力、化工、气象、金融等多个领域。

时间序列数据库:指主要用于处理带时间标签的数据,因此在一个表中每个数据都有唯一的时间戳。数据具有时间排序性,唯一性。本文以TDengine为模板来介绍时序数据库的基本概念。

3b45bffc3cca699f6a572468154576e6.png

行列数据库存储的区别:

接触的传统业务的数据模式都是行存储,我们会把不同类型的对象创建不同的表进行存储他们各自的属性。一般情况我们会把他们的所有属性一次性封装起来进行写入数据,而不是一个属性一个属性的去保存。所以关系型数据库的行存储数据完整性是可以确定的。

列存储需要把一行数据拆分成单例进行保存,所以写入次数明显会比行存储多,所以时序数据库主要针对物联网,工业互联网等应用场景开发的一个数据存储引擎。

而数据按列存储的话即每一列都单独存放,数据类型一致,数据特征相似。数据即索引,所以查询效率也会明显提高。

因此我们在使用的时候对于数据建模方式和业务场景设计的思维逻辑也会和之前传统数据库的使用有些出入

数据库基本概念

1.采集量

采集量是指传感器、设备或其他类型采集点采集的物理量,比如电流、电压、温度、压力、GPS 位置等,是随时间变化的参数

2.标签

标签是指传感器、设备或其他类型采集点的静态属性,不是随时间变化的。比如设备ID,设备型号,设备所在地

3.数据采集点

数据采集点是指按照预设时间周期或受事件触发采集物理量的硬件或软件。一个数据采集点可以采集一个或多个采集量,但这些采集量都是同一时刻采集的,具有相同的时间戳。对于复杂的设备,往往有多个数据采集点,每个数据采集点采集的周期都可能不一样,而且完全独立,不同步。

4.表

TDengine 采取一个数据采集点一张表的策略,要求对每个数据采集点单独建表(比如有一千万个智能电表,就需创建一千万张表),用来存储这个数据采集点所采集的时序数据。这种设计有几大优点:

① 不同数据采集点产生数据的过程完全独立,每个数据采集点的数据源是唯一的,一张表也就只有一个写入者,这样就可采用无锁方式来写,写入速度就能大幅提升。

② 对于一个数据采集点而言,其产生的数据是按照时间排序的,因此写的操作可用追加的方式实现,进一步大幅提高数据写入速度。

③ 一个数据采集点的数据是以块为单位连续存储的。如果读取一个时间段的数据,它能大幅减少随机读取操作,成数量级的提升读取和查询速度。

5.超级表

由于一个数据采集点一张表,导致表的数量巨增,而且应用经常需要做采集点之间的聚合操作,聚合的操作也变得复杂起来。为解决这个问题,TDengine 引入超级表(Super Table,简称为 STable)的概念。而且应用经常需要做采集点之间的聚合操作,聚合的操作也变得复杂起来。为解决这个问题,TDengine 引入超级表(Super Table,简称为 STable)的概念。

超级表是指某一特定类型的数据采集点的集合。同一类型的数据采集点,其表的结构是完全一样的,但每个表(数据采集点)的静态属性(标签)是不一样的。描述一个超级表(某一特定类型的数据采集点的集合),除需要定义采集量的表结构之外,还需要定义其标签的 Schema,标签的数据类型可以是整数、浮点数、字符串、JSON,标签可以有多个,可以事后增加、删除或修改。如果整个系统有 N 个不同类型的数据采集点,就需要建立 N 个超级表。

在 TDengine 的设计里,表用来代表一个具体的数据采集点,超级表用来代表一组相同类型的数据采集点集合。

6.子表

当为某个具体数据采集点创建表时,用户可以使用超级表的定义做模板,同时指定该具体采集点(表)的具体标签值来创建该表。通过超级表创建的表称之为子表。

一张超级表包含有多张子表,这些子表具有相同的采集量 Schema,但带有不同的标签值

不能通过子表调整数据或标签的模式,对于超级表的数据模式修改立即对所有的子表生效

超级表只定义一个模板,自身不存储任何数据或标签信息。因此,不能向一个超级表写入数据,只能将数据写入子表中

查询既可以在表上进行,也可以在超级表上进行。针对超级表的查询,TDengine 将把所有子表中的数据视为一个整体数据集进行处理,会先把满足标签过滤条件的表从超级表中找出来,然后再扫描这些表的时序数据,进行聚合操作,这样需要扫描的数据集会大幅减少,从而显著提高查询的性能。本质上,TDengine 通过对超级表查询的支持,实现了多个同类数据采集点的高效聚合

在智能电表的示例中,我们可以通过超级表 meters 创建子表 d1001、d1002、d1003、d1004 等。为了更好地理解采集量、标签、超级与子表的关系,可以参考下面关于智能电表数据模型的示意图。

7.库

TDengine 容许一个运行实例有多个库,而且每个库可以配置不同的存储策略。不同类型的数据采集点往往具有不同的数据特征,包括数据采集频率的高低,数据保留时间的长短,副本的数目,数据块的大小,是否允许更新数据等等。为了在各种场景下 TDengine 都能最大效率的工作,TDengine 建议将不同数据特征的超级表创建在不同的库里

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值