《时序数据及时序数据库概述》由会员分享,可在线阅读,更多相关《时序数据及时序数据库概述(18页珍藏版)》请在金锄头文库上搜索。
1、时序数据及时序数据库概述一、什么是时间序列?这类数据描述了某个被测量的主体在一个时间范围内的每 个时间点上的测量值。对时序数据进行建模的话,会包含三个重要部分,分别是: 主体,时间点和测量值。时间系列数据的特性二、时序数据写入的特点写入平稳、持续、高并发高吞吐:时序数据的写入是比较 平稳的,这点与应用数据不同,应用数据通常与应用的访 问量成正比,而应用的访问量通常存在波峰波谷。时序数 据的产生通常是以一个固定的时间频率产生,不会受其他 因素的制约,其数据生成的速度是相对比较平稳的。时序 数据是由每个个体独立生成,所以当个体数量众多时,通 常写入的并发和吞吐量都是比较高的,特别是在物联网场 景下
2、。写入并发和吞吐量,可以简单的通过个体数量和数 据生成频率来计算,例如若你有1000个个体以10秒的频 率产生数据,则你平均每秒产生的并发和写入量就是100。 写多读少:时序数据上95%-99%的操作都是写操作,是典型 的写多读少的数据。这与其数据特性相关,例如监控数 据,你的监控项可能很多,但是你真正去读的可能比较 少,通常只会关心几个特定的关键指标或者在特定的场景 下才会去读数据。实时写入最近生成的数据,无更新:时序数据的写入是实 时的,且每次写入都是最近生成的数据,这与其数据生成 的特点相关,因为其数据生成是随着时间推进的,而新生 成的数据会实时的进行写入。数据写入无更新,在时间这 个维
3、度上,随着时间的推进,每次数据都是新数据,不会 存在旧数据的更新,不过不排除人为的对数据做订正。三、数据查询和分析的特点 按时间范围读取:通常来说,你不会去关心某个特定点的 数据,而是一段时间的数据。所以时序数据的读取,基本 都是按时间范围的读取。最近的数据被读取的概率高:最近的数据越有可能被读取,以监控数据为例,你通常只会关心最近几个小时或最 近几天的监控数据,而极少关心一个月或一年前的数据。 多精度查询:按数据点的不同密集度来区分不同的精度, 例如若相邻数据点的间隔周期是10秒,则该时序数据的精 度就是10秒,若相邻数据点的时间间隔周期是30秒,则 该时序数据的精度就是30秒。时间间隔越短
4、,精度越高。 精度越高的数据,能够还原的历史状态更细致更准确,但 其保存的数据点会越多。这个就好比相机的像素,像素越 高,照片越清晰但是相片大小越大。时序数据的查询,不 需要都是高精度的,这是实际的需求,也是一种取舍,同 样也是成本的考虑。还是拿监控数据举例,通常监控数据 会以曲线图的方式展现,由人的肉眼去识别。在这种情况 下,单位长度下若展示的数据点过于密集,反而不利于观 察,这是实际的需求。而另外一种取舍是,若你查询一个 比较长的时间范围,比如是一个月,若查询10秒精度的数 据需要返回259200个点,而若查询60秒精度的数据则只 要返回43200个点,这是查询效率上的一种取舍。而成本 方
5、面的考虑,主要在存储的数据量上,存储高精度的数据 需要的成本越高,通常对于历史数据,可以不需要存储很 高精度的数据。总的来说,在查询和处理方面,会根据不 同长度的时间范围,来获取不同精度的数据,而在存储方 面,对于历史的数据,会选择降精度的数据存储。多维分析:时序数据产生自不同的个体,这些个体拥有不 同的属性,可能是同一维度的,也可能是不同维度的。还 是举个监控的例子,我有个对某个集群上每台机器的网络 流量的监控,此时可以查询这个集群下某台机器的网络流 量,这是一个维度的查询,而同时还需要查询这个集群总 的网络流量,这是另外一个维度的查询。数据挖掘:随着大数据和人工智能技术的发展,在存储、 计
6、算能力以及云计算发展的今天,数据的高附加值的挖掘 已经不再有一个很高门槛。而时序数据蕴含着很高的价 值,非常值得挖掘。四、数据存储的特点 数据量大:拿监控数据来举例,如果我们采集的监控数据 的时间间隔是1S,那一个监控项每天会产生86400个数据 点,若有10000个监控项,则一天就会产生864000000个 数据点。在物联网场景下,这个数字会更大。整个数据的 规模,是TB甚至是PB级的。冷热分明:时序数据有非常典型的冷热特征,越是历史的 数据,被查询和分析的概率越低。具有时效性:时序数据具有时效性,数据通常会有一个保 存周期,超过这个保存周期的数据可以认为是失效的,可 以被回收。一方面是因为
7、越是历史的数据,可利用的价值 越低;另一方面是为了节省存储成本,低价值的数据可以 被清理。多精度数据存储:在查询的特点里提到时序数据出于存储 成本和查询效率的考虑,会需要一个多精度的查询,同样 也需要一个多精度数据的存储。五、时序数据库基本要求综合以上对于时序数据写入、查询和存储的特点的分 析,我们可以归纳总结下对于时序数据库的基本要求:1.能够支撑高并发、高吞吐的写入:如上所说,时序数据具 有典型的写多读少特征,其中95%-99%的操作都是写。在读 和写上,首要权衡的是写的能力。由于其场景的特点,对 于数据库的高并发、高吞吐写入能力有很高的要求。2.交互级的聚合查询:交互级的查询延迟,并且是
8、在数据基 数(TB级)较大的情况下,也能够达到很低的查询延迟。3.能够支撑海量数据存储:场景的特点决定了数据的量级,至少是TB的量级,甚至是PB级数据。4.高可用:在线服务的场景下,对可用性要求也会很高。5.分布式架构:写入和存储量的要求,底层若不是分布式架 构基本达不到目标。背景结合时序数据的特点和时序数据库的基本要求的分析, 使用基于LSM树存储引擎的NoSQL数据库(例如HBase、 Cassandra或阿里云表格存储等)相比使用B+树的RDBMS, 具有显著的优势。LSM树的基本原理不在这里赘述,它是为 优化写性能而设计的,写性能相比B+树能提高一个数量 级。但是读性能会比B+树差很多
9、,所以极其适合写多读少 的场景。目前开源的几个比较著名的时序数据库中, OpenTSDB 底层使用 HBase、BlueFlood 和 KairosDB 底层使 用Cassandra,InfluxDB底层是自研的与LSM类似的TSM 存储引擎,Prometheus是直接基于LevelDB存储引擎。所 以可以看到,主流的时序数据库的实现,底层存储基本都 会采用LSM树加上分布式架构,只不过有的是直接使用已 有的成熟数据库,有的是自研或者基于LevelDB自己实LSM树加分布式架构能够很好的满足时序数据写入能力的要求,但是在查询上有很大的弱势。如果是少量数据的 聚合和多维度查询,勉强能够应付,但是
10、若需要在海量数 据上进行多维和聚合查询,在缺乏索引的情况下会显得比 较无力。所以在开源界,也有其他的一些产品,会侧重于 解决查询和分析的问题,例如Druid主要侧重解决时序数 据的0LAP需求,不需要预聚合也能够提供在海量数据中的 快速的查询分析,以及支持任意维度的drill down。同样 的侧重分析的场景下,社区也有基于Elastic Search的解 决方案。1.2.3.总之,百花齐放的时序数据库产品,各有优劣,没有 最好的,只有最合适的,全凭你自己对业务需求的判断来 做出选择。六、时间序列数据的模型时序数据的数据模型主要有这么几个主要的部分组成:主体:被测量的主体,一个主体会拥有多个维
11、度的属性。以服务器状态监控场景举例,测量的主体是服务器,其拥有的属性可能包括集群名、Hostname等。测量值:一个主体可能有一个或多个测量值,每个测量值对应一个具体的指标。还是拿服务器状态监控场景举例,测量的指标可能会有CPU使用率,IOPS等,CPU使用率对应的值可能是一个百分比,而IOPS对应的值是测量周期内发生的I0次数。时间戳:每次测量值的汇报,都会有一个时间戳属性来表示其时间。目前主流时序数据库建模的方式会分为两种,按数据源建模和按指标建模,以两个例子来说明这两种方式的不同。按数据源建模timestampclusterhostnamecpuiops2O15-O4-28T17:5O:
12、0OZCl jster-Ahost-a10102015-04-28T17:50: 10ZCluster-Anost-b2030201&W28T17:50;20ZCluster-Ahost-a58时商戳+:体録度测量指赫和测量值如图所示为按数据源建模的例子,同一个数据源在某 个时间点的所有指标的测量值会存储在同一行。Druid和 InfluxDB采用这种模式。按指标建模metrictimestampclusterhostnamemetric valuecpu2015-O4-28T17:50:0OZCluster-Ahost-a10cpu2015-04-28T17:50:10ZCluster-Ah
13、ost-b20cpu2015-04-28T17:50:20ZCluster-Ahost-a5iops2015-O4-28T17:50:0OZCluster-Ahost-a10iops2015-04-28T17:50:10ZCluster-Ahost-b30iops2015-04-28T17:50:20ZCluster-Ahost-a8测呈蓄标时I首戳主敲L度测皇值如图所示为按指标建模的例子,其中每行数据代表某 个数据源的某个指标在某个时间点的测量值。OpenTSDB和 KairosDB采用这种模式。这两种模型的选择没有明确的优劣,如果底层是采用 列式存储且每个列上都有索引,则按数据源建模可能是
14、一 个比较干净的方式。如果底层是类似HBase或Cassandra这种的,将多个指标值存储在同一行会影响对其中某个指 标的查询或过滤的效率,所以通常会选择按指标建模。七、时间序列数据的处理这一小节会主要讲解下对时序数据的处理操作,时序 数据库除了满足基本的写和存储的需求外,最重要的就是 查询和分析的功能。对时序数据的处理可以简单归纳为 Filter(过滤),Aggregation(聚合)、GroupBy 和 Downsampling(降精度)。为了更好的支持GroupBy查询, 某些时序数据库会对数据做pre-aggregation(预聚合)。 Downsampling对应的操作是Rollup
15、(汇总),而为了支持更 快更实时的Rollup,通常时序数据库都会提供auto- rollup(自动汇总)。1. Filter(过滤)metrictimestampclusterhostnamemetric valuecpu2015-04-2 盯17:50:00Cluster-Ahost-a10cpu2015-04-28T17:50:00ZCluster-Ahost-b20cpu2015-04-28T17:50: 1QZCluster-Ahost-a6cpu2015-04-28T17:50:10ZCluster-Ahost-b10cpu2015-04-28T17;50;20ZCluster-Anost*a30cpu2015-04-2 盯 1 了由 OEOZCluster-Ahost-b8select cpu f