数据模型概述

1. 现实世界数据形式

数据库最终存储的是数据,所以首先要知道现实世界中时序数据都包括哪些,形式是怎样的。

时序数据最基本的信息就是指标。如下所示:

27.5
27.6
27.3
......

但是只有指标还不行,因为指标只是一堆数值,这些数值又是什么含义呢?这就引出了另外一个维度,指标名。指标名即指标的含义,如:温度、转速、湿度等等。

所以,重建模后的时序数据如下所示:

温度:27.5℃
温度:27.6℃
温度:27.3℃
......

有了指标名和指标值后,又带来了新问题,即该指标是什么时间的值。因为时序数据就是基于时间序列的数据,没有时间的话是没有意义的。每个指标值都是某个时间点的采集结果,所以还要带有时间戳信息。

所以,更新后时序数据如下所示:

时间:2021-11-16 13:57:13,温度:27.5℃
时间:2021-11-16 13:57:14,温度:27.6℃
时间:2021-11-16 13:57:15,温度:27.3℃
......

有了时间,还剩最后一个问题,即该指标是谁发来的。指标数据由采集设备产生,而采集设备本身又会带有许多标识与标签,所以时序数据完整的形式如下:

气象传感器,型号1,编号0001,北京市,怀柔区,时间:2021-11-16 13:57:13,温度:27.5℃
气象传感器,型号1,编号0001,北京市,怀柔区,时间:2021-11-16 13:57:14,温度:27.6℃
气象传感器,型号1,编号0001,北京市,怀柔区,时间:2021-11-16 13:57:15,温度:27.3℃
......

2. 数据存储模型

知道了时序数据的形式后,下面需要考虑时序数据如何存储。目前,时序数据存储方案概况起来又两种:

  1. 关系模型
  2. 非关系模型

2.1 关系模型

关系模型基于传统的关系型数据库。在关系模型中,需要先定义模式,即数据表。表的模式确定下来后,修改成本较高。以刚才的时序数据为例,在关系模型中,可以建如下模式的数据表:

设备标识 温度 风力 湿度 时间戳
气象传感器,型号1,编号0001,北京市,怀柔区 29.2 3.2 55 2021-11-16 13:57:13
气象传感器,型号2,编号0010,上海市,崇明区 21.5 8.5 35 2021-11-16 13:57:13

MatrixDB采用的是关系模型。

2.2 非关系模型

非关系模型通常使用Key-Value模式,将指标值作为Value,其他的作为Key。以刚才的时序数据为例,在非关系模型中,可以按如下方式存储:

Key Value
气象传感器,型号1,编号0001,北京市,怀柔区,时间2021-11-16 13:57:13,温度 29.2
气象传感器,型号1,编号0001,北京市,怀柔区,时间2021-11-16 13:57:13,风力 3.2
气象传感器,型号1,编号0001,北京市,怀柔区,时间2021-11-16 13:57:13,湿度 55
气象传感器,型号2,编号0010,上海市,崇明区,时间2021-11-16 13:57:13,温度 21.5
气象传感器,型号2,编号0010,上海市,崇明区,时间2021-11-16 13:57:13,风力 8.5
气象传感器,型号2,编号0010,上海市,崇明区,时间2021-11-16 13:57:13,湿度 35
......

非关系模型的时序数据库代表产品有:OpenTSDB、InfluxDB等。

2.3 存储模型对比

关系模型与非关系模型对比起来有如下差别:

  1. 关系模型中不同采集指标存储在一起,便于一起分析;非关系模型则分散存储
  2. 非关系模型Key中存在大量冗余信息,相同时间相同设备的回传数据中,除了指标名不同外,其他都是相同的,浪费存储空间
  3. 关系模型模式固定,设备增加新采集指标时需要改表,成本较高;非关系模型则无此问题