表存储时序数据存储架构

近年来,随着物联网(IoT)的快速发展,时间序列数据出现爆炸式增长。从过去两年DB-Engines中数据库类型的增长趋势来看,时序数据库的增长是巨大的。这些大型开源时间序列数据库的实现各不相同,而且没有一个是完美的。但是,可以将这些数据库的优点结合起来,实现一个完美的时间序列数据库。

阿里云表格存储是阿里云开发的分布式NoSQL数据库。表格存储采用多模型设计,包括与BigTable相同的Wide Column模型和消息数据的Time series模型。在存储模型、数据规模、写入查询能力等方面都能够满足时序数据场景的需求。但时序数据存储作为通用模型数据库,应充分利用底层数据库的能力。在schema设计和计算对接中,一定有专门的设计,比如OpenTSDB针对HBase的RowKey设计以及UID编码。

本文重点介绍时序数据的数据模型定义和核心处理流程,以及基于表格存储构建时序数据存储的架构。我们将首先讨论时间序列数据,然后讨论如何使用表格存储为我们的业务应用程序处理这些数据。

最新的 DZone 参考卡

NoSQL 迁移要点


什么是时间序列数据?
图片标题

时间序列数据主要分为两类,监控类和状态类。目前开源的时序数据库都是针对用于监控的时序数据,针对该场景下的数据特性做了一些具体的优化。从时间序列数据的特点来看,另一类是状态类时间序列数据。两类时间序列数据对应不同的场景。监控类型对应监控场景,状态类型针对其他场景,例如跟踪、异常状态记录等。最常见的包跟踪是状态的时间序列数据。

之所以将这两类数据划分为时间序列,是因为这两类数据在数据模型定义、数据采集、数据存储、计算等方面完全一致,可以抽象出相同的数据库和相同的技术架构。

时间序列数据模型
在定义时间序列数据模型之前,我们首先对时间序列数据进行抽象表示。

图片标题

个人或团体(WHO):描述产生数据的主体,可以是人、监控指标或物体。一般描述的是个体具有多维属性,可以通过某种唯一的ID来定位个体,例如通过人员ID来定位人员,通过设备ID来定位设备。还可以通过多维属性来定位个体,例如通过集群、机器ID、进程名来定位进程。
时间(WHEN):时间是时间序列数据最重要的特征,是区别于其他数据的关键属性。
位置(WHERE):在气象等科学计算领域,通常通过经纬度二维坐标和纬度、经度、海拔的三维坐标来定位位置。
状态(WHAT):用于描述特定个体在某一时刻的状态。用于监控的时间序列数据通常是数值描述的状态,而轨迹数据是事件表达的状态,针对不同的场景有不同的表达。
以上是时间序列数据的抽象表示。每个开源时序数据库都有自己的时序数据模型定义,定义了要监控的时序数据。以OpenTSDB的数据模型为例:

图片标题

监控时序数据模型定义包括:

Metric:用于描述监控指标。
标签:用于定位监控对象,由一个或多个标签来描述。
时间戳:采集监控值的时间点。
值:采集的监控值,通常是数字。
监测时序数据是时序数据中最典型的类型,具有特定的特征。监测时序数据的特点决定了此类时序数据库具有特定的存储和计算方法。与状态时间序列数据相比,它在计算和存储方面都有特定的优化。比如聚合计算有几个特定的​​数值聚合函数,存储上会有专门优化的压缩算法。在数据模型中,监控的时间序列数据通常不需要表达位置,而整体模型符合我们对时间序列的统一抽象表示。

基于监控时序数据模型,我们可以根据上面描述的时序数据抽象模型来定义时序数据的完整模型:

图片标题

定义包括:

名称:定义数据的类型。
标签:描述个人的元数据。
位置:数据的位置。
时间戳:数据生成时的时间戳。
值:数据对应的值或状态。可以提供多个值或状态,它们不一定是数字。
这是一个比较完整的时序数据模型,与OpenTSDB的监控时序数据的模型定义主要有两点不同:一是元数据中多了一个维度,位置;二是元数据中多了一个维度:位置。第二,它可以表达更多的价值观。

时序数据查询、计算与分析
时间序列数据有自己的查询和计算方法,大致包括:

时间序列检索
根据数据模型定义,可以用名字+标签+位置来定位一个个体,这个个体有一个时间序列,时间序列上的点就是时间戳和数值。对于时间序列数据的查询,首先需要对时间序列进行定位,这是基于元数据的一个或多个值的组合进行检索的过程。您还可以根据元数据的关联进行下钻。

时间范围查询
通过检索定位到时间序列后,进行时间序列的查询。对时间序列上单个时间点的查询很少,通常是对连续时间范围内的所有点进行查询。通常对这个连续时间范围内的缺失点进行插值。

聚合
查询可以针对单个时间序列或多个时间序列。对于多个时间序列的范围查询,结果通常是聚合的。这种聚合针对不同时间序列上同一时间点的值,通常称为“后聚合”。

与“后聚合”相反的是“预聚合”,即在时间序列数据存储之前,将多个时间序列聚合为一个时间序列的过程。预聚合计算数据然后存储它,而后聚合查询存储的数据然后计算它。

下采样
下采样的计算逻辑与聚合类似。不同之处在于,下采样是针对单个时间序列而不是多个时间序列,它将某个时间范围内的数据点聚合在单个时间序列中。下采样的目的之一是使数据点在大时间范围内呈现,另一个目的是降低存储成本。

分析
分析是为了从时间序列数据中提取更多的价值。有一个特殊的研究领域叫做“时间序列分析”

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

千源万码

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值