1.tdengine 数据模型
taos> set max_binary_display_width 200;
taos> show create stable meters;
Table | Create Table |
=======================================================================================================================================================
meters | CREATE STABLE `meters` (`ts` TIMESTAMP, `current` FLOAT, `voltage` INT, `phase` FLOAT) TAGS (`groupid` INT, `location` VARCHAR(24)) |
Query OK, 1 row(s) in set (0.004745s)
采集量:
采集量是指通过各种传感器,设备或其他类型的才几点锁获取的物理量,如电流,电压,温度,压力,GPS等。
由于这些物理量随着时间不断变化,因此采集的数据类型多样,包括整型,浮点型,布尔型,字符串等。
以智能电表为例,其中 current:电流,电压,相位,就是典型的采集量。
标签:
标签是附着在传感器,设备或其他类型采集点上静态属性,这些属性不会随时间发生变化。
例如设备 型号,颜色,设备所在地等。标签的数据类型可以时任意类型。标签有可能发生变化,修改,删除,添加等。
存储的标签数据量相对稳定。例如智能电表中的 location,Group ID 等。
数据采集点:
数据采集点是指在一定的预设时间周期内或受到特定事件触发时,负责采集物理量的硬件或软件设备。
一个数据采集点可以同时采集多个采集量,但这些采集量都是在同一时刻获取的,并拥有相关的时间戳。
对于复杂的设备通常会有多个数据采集点。每个数据采集点的采集周期各不相同,他们之间互相独立,互不干扰。
表:
鉴于采集的数据通常是结构化数据,为了降低用户的学习难度,TDengine采用传统的关系型数据模型来管理数据
TDengine 采取了一个数据采集点一张表的设计策略。即要求为每个数据采集点单独创建一张表。
例如:设备ID=d1001 的智能电表对应着 TDENGINE 中的一张表,该电表采集的所有时序数据均存储在此表中。
一个数据采集点一张表的优点:
由于不同数据采集点产生数据的过程完全独立,每个数据采集点的数据源唯一,因此每张表只有一个写入者,
可以实现无锁写入,显著提高数据写入的速度。
对于一个数据采集点,由于其产生的数据是按时间说许递增的,因此写入操作可以采用追加方式实现,
进一步大幅提高数据写入速度。
一个数据采集点的数据以块为单位连续存储,从而在每次读取一个时间段的数据时,能显著减少随机读取
操作,成倍提高数据读取和写入速度。
在数据块内部采用列式存储,针对不同数据类型可采用不同压缩算法以提高压缩率。
由于采集量的变量通常缓慢,因此压缩效果更佳。
如果采用传统的方式,将多个数据采集点的数据写入同一张表,由于网络延迟不可控,不同数据采集点
的数据达到服务器的顺序无法保证,写入操作须加锁保护,且难以保证一个数据采集点的数据连续存储。
TDENGINE 中使用采集点的名称作为表名,每个数据采集点可包含多个采集量,每个采集量对应一列。
采集的数据类型可以是整型,浮点型,字符串等。
表的第一列必须是时间戳,数据类型为 timestamp; 对于每个采集量, TDENGINE 将使用第一列的时间戳建立索引,
并采用列式存储。
超级表:
采用一个数据采集点一张表,的设计虽然有助于针对性的管理每个采集点,但随着设备数量不断增加,表的数量也会
急剧增加,这给数据库管理和分析带来了挑战。为了解决这个问题,TDENGINE引入了超级表的概念。
超级表是一种数据结构,它能够将某一特定类型的数据采集点聚集在一起,形成一张逻辑上的统一表。
这些数据采集点具有相同的表结构,但各自的静态属性可能不同,一个超级表至少包含一个时间戳列,一个或多个
采集量列或多个标签列。超级表的标签可以灵活的添加,修改,删除。
TDENGINE 中表代表具体的数据采集点,超级表则代表具有相同属性的数据采集点的集合。
子表:
子表是数据采集点在逻辑上的一种抽象表示,它是隶属于某个超级表的具体表。可以将超级表作为表定义的模版,
通过指定子表的标签值来创建子表。通过超级表生成的表便被称为子表。
一张超级表包含多个子表,这些子表具有相同的表结构,但标签值各异。
子表的表结构不能直接修改,但可以修改超级表的列和标签,且修改对所有的子表立即生效。
超级表定义了一个模版,自身并不存储任何数据或标签信息。
库:
库是 TDENGINE 中用于管理一组表的集合。 TDENGINE 允许一个运行实例包含多个库,每个库都
可以配置不同的存储策略。由于不同类型的数据采集点通常具有不同的数据特征。如数据采集频率,
数据保留期限,副本数量,数据块大小等。为了各种场景下确保 TDENGINE 能够发挥最大效果,建议
将不同数据特征的超级表创建在不同的库中。
在一个库中,可以包含一到多张超级表,但每个超级表只能属于一个库,一个超级表拥有的所有子表也
在该库中。
时间戳:
时间戳在时序数据处理中扮演着至关重要的角色。
本地日期时间:指特定地区的当地时间,通常表示为 yyyy-MM-dd hh:mm:ss.SSS 格式的字符串。
这种时间表示不包含任何时区信息,如 2021-07-21 12:00:00.000
时区: 地球上不同地理位置的标准时间。协调世界时或格林尼治时间是国际时间标准。其他时区通常表示为
相对于UTC的偏移量,如"UTC+8" 代表动八区时间。
UTC 时间戳:表示自 UNIX 纪元 (即UTC 时间 1970年1月1日0点)起经过的毫秒数。
在 TDENGINE 中保存时序数据时,实际上保存的是 UTC 时间戳。时间戳分为两种情况:
RFC-3339 格式:当使用这种格式时, TDENGINE 能够正确解析带有时区信息的时间字符串为 UTC 时间戳 。
例如: "2018-10-03T14:23:23.000+08:00" 会被转换为UTC 时间戳。
非 RFC-3339 格式:不包含任何时区信息。 TDENGINE 将使用应用程序所在的时区设置自动将时间转为 UTC 时间戳。
客户端查询时, TDENGINE 客户端会根据应用程序当前的时区设置,自动将保存的 UTC 时间戳转为本地时间进行显示。
377

被折叠的 条评论
为什么被折叠?



