本文介绍Lindorm时序引擎的数据模型以及相关术语。
基本概念
物联网、应用监控、工业互联网等典型的时序场景下,数据源(Data Source)通常按一定的周期持续产生时序数据,一条时序数据由Tag、Timestamp、Field等元素共同来描述,具有相同特征的一类数据存放在同一张表中,表的时序数据元素分类如下图:
元素 | 描述 |
表名(Table) | 时序表代表一系列同类时序数据的集合,例如为空气质量传感器建立一个Table,存储所有传感器的监测数据。 |
标签(Tag) | Tag描述数据源的特征,通常不随时间变化,例如传感器设备,包含设备DeviceId、设备所在的Region等Tag信息,数据库内部会自动为Tag建立索引,支持根据Tag来进行多维检索查询。Tag由Tag Key、Tag Value组成,两者均为String类型。 在定义时序数据表时,还可以指定特定标签列作为分区键来显式指定数据在多个节点上分片(Data Sharding)时的分片规则,从而实现贴合业务场景的性能提升。 |
时间戳(Timestamp) | Timestamp代表数据产生的时间点,可以写入时指定,也可由系统自动生成。 |
量测值(Field) | Field描述数据源的量测指标,通常随着时间不断变化,例如传感器设备包含温度、湿度等Field,Field列无需提前创建固定的Schema,可以在运行过程中动态增减;Field由Field名和Field值组成,Field名为字符串类型,Field值支持多种数据类型。 |
数据点(Data Point) | 数据源在某个时间产生的某个量测指标值(Field值)称为一个数据点,数据库查询、写入时按数据点数来作为统计指标。 |
时间线(Time Series) | 数据源的某一个指标随时间变化,形成时间线,Tag的组合确定一条时间线。针对时序数据的计算包括降采样、聚合(sum、count、max、min等)、插值等都基于时间线维度进行;数据库在存储数据时,会将同一条时间线的数据尽量聚类存储,提升时间线数据访问效率,同时更好的支持时序数据压缩。 在时序表中,Tag列的值都相同的一系列数据行构成了一条时间线。 |
时序数据库提供一系列特有的数据访问操作,包括聚合(Aggregation)、降采样(Downsample)、插值(Interpolation)等,同时还提供数据生命周期(数据时效)的管理机制。
元素 | 描述 |
聚合(Aggregation) | 对同一时间线、或不同时间线上的数据点进行分组、求和、计数等计算操作。 |
降采样(Downsample) | 查询时间区间跨度较长,且原始数据采样频率较高时,可通过降采样降低数据的查询展现精度,例如按秒采集的数据,查询时按小时级别采样,减少结果集的数据点数。 |
插值(Interpolation) | 时间线中间缺失部分数据点时,可通过插值算法进行数据点自动填充。 |
数据时效(TTL) | 数据时效是指数据保存有效期,超过有效期的数据会被自动清理,默认数据有效期为永久保存。 |
场景示例
某风力电厂包含一系列的智能风力发电机设备,创建名为Wind-generators
的table来存储所有设备的信息,设备由ID
、型号
、厂商
等Tag信息描述,每个设备会持续上报功率
、风速
等Field指标,指标数据通过时序数据库的API实时写入到云端时序数据库。
上述场景中三个设备产生的数据如下图所示。
时序数据库除了支持高并发的写入吞吐以及高压缩率,还能高效的满足如下类型的查询请求:
查询某条时间线一段时间内的数据点。
例如:查询
ID=7AD45EC
的设备,在2020-10-24T00:00:00Z ~ 2020-10-24T00:30:00Z
30分钟时间范围内,运行风速
指标值。查询多条时间线一段时间内的数据点,并按5分钟粒度降采样。
例如:查询
ID=7AD45EC
的设备,在2020-10-24T00:00:00Z ~ 2020-10-25T00:00:00Z
一天时间范围内,功率
、风速
的指标值明细,按5分钟
粒度采样返回数据。对某条时间线按时间范围做聚合。
例如:查询
ID=7AD45EC
的设备,在2020-10-24T00:00:00Z ~ 2020-10-24T00:30:00Z
时间范围内,运行功率
的平均值。查询多条时间线的最新点。
例如:查询
ID=7AD45EC
的设备,最新的功率
、风速
。按Tag做时间线聚合查询。
例如:查询
厂商=KingWind
的设备,在2020-10-24T00:00:00Z
的平均风速
。