1.什么是时序数据

     什么是时间序列数据(Time Series Data,TSD,以下简称时序)从定义上来说,就是一串按时间维度索引的数据。用描述性的语言来解释什么是时序数据,简单的说,就是这类数据描述了某个被测量的主体在一个时间范围内的每个时间点上的测量值。它普遍存在于IT基础设施、运维监控系统和物联网中。

    谈到近年来时序数据库的普及,我们不得不先聊聊时序数据,为什么它需要一种专门优化的数据库来处理?通用的关系数据库不能满足吗?所谓时序数据,非常通俗的角度来讲,就是一些随着时间变化而变化的值 (Value),同时这些值上面附带有一些 Key=Value 组成的标签。

一般包括下列三个属性(来自 Wikipedia):

时间线(Time series)
一个名称(通常称为指标,metric)和一系列 Key=Value 标签( Label,或者一般称之为 Tag)组成的唯一标识。

键值对(Timestamp, Value)
时间戳和值组成的键值对,并且按照时间戳自然排序,这些键值对一般称为采样(Sample)。

数值(Value)
第 2 点中的 Value 一般是数值,比如气温、湿度、CPU、内存占用等,但是也可能是任意的数据结构(结构化,非结构化都有可能)。

基本概念

序号

名称

技术术语解释

1

时序数据

时序数据是基于相对稳定频率持续产生的一系列指标监测数据。例如,监测某城市的空气质量时,每秒采集一个二氧化硫浓度的值而产生的一系列数据。

2

度量(metric)

监测数据的指标,例如风力和温度。

3

标签(tag)

度量(Metric)虽然指明了要监测的指标项,但没有指明要针对什么对象的该指标项进行监测。标签(Tag)就是用于表明指标项监测针对的具体对象,属于指定度量下的数据子类别。

一个标签(Tag)由一个标签键(TagKey)和一个对应的标签值(TagValue)组成,例如“城市(TagKey)= 杭州(TagValue)”就是一个标签(Tag)。

4

测量值(filed)

描述数据源的量测指标,通常随着时间不断变化,例如传感器设备包含温度、湿度等Field。

5

数据点(data point)

数据源在某个时间产生的某个量测指标值(Field Value)称为一个数据点,数据库查询、写入时按数据点数来作为统计指标

6

时间序列(Time Series)

针对某个监测对象的某项指标(由度量和标签定义)的描述。“一个度量 + N 个标签KV组合(N >= 1)”定义为一个时间序列,某个时间序列上产生的数据值的增加,不会导致时间序列的增加。


2.时序数据案例

时序数据库 学习01 基础知识_结构化

除了天气预报信息外,时序数据还广泛存在于以下领域:

股票价格:让股票分析师和交易者了解某一股票价格的趋势和走向。

健康监测:用于医学领域,以监测可能正在服用某些药物的病人的心率或其他健康数值。

工业及物联网的物理传感器:包括各类智能手机、智能汽车和智能家居等包含的各类温度、湿度、速度、加速度、方向和心率、血氧等传感器,制造业、医疗等业已大量使用的各类传感器,都在无时无刻地、按照固定或者不固定间隔产生海量的感知数据,主要用于设备和人体的日常和异常监测、基于这些海量数据挖掘的智能化应用(比如智能制造的产线优化、自动驾驶)等。

软件传感器:比如传统 DevOps 里的监控侵入式探针,云原生环境下的无侵入式探针(比如现在热火朝天的基于 eBPF 的无侵入探针方案和 Service Mesh 数据面探针),各类软件的各种指标埋点数据等,主要用途还是软件应用的日常和异常监控,保障业务服务的持续稳定运行,加上目前 AIOps 领域的发展,对于时序数据的使用规模和粒度也提出了更高要求。

3.时序数据特点

  • 数据是相对高频、稳定地产生,并且频率一般较为稳定,不随人们的昼夜活动周期而变化。传感器的种类众多,叠加上行业、地理位置的大量标签,数据和时间线的规模膨胀都极其庞大。并且这样的数据规模随着智能设备(可穿戴设备、智能汽车、智能制造)的普及以及人们对这些数据应用提出的更精细的需求而迅速增长。
  • 数据的变更特征上是更类似 Append-Only 的方式,数据源源不断地添加上去, 更新的场景较少(但是仍然有,特别是弱网环境下的数据延迟),数据的删除通常是以过期时间为周期批量地删除。
  • 数据应用上,最常见的还是日常和异常监控,基于这些数据搭建可视化监控报表和告警系统,其次是未来趋势的预测,也就是时序预测,特别是在金融领域
  • 查询 , 按不同维度对指标进行统计分析,且存在明显的冷热数据,一般只会频繁查询近期数据

时序数据模型

  • measurement: 度量的数据集,类似于关系型数据库中的 table;
  • point: 一个数据点,类似于关系型数据库中的 row;
  • timestamp: 时间戳,表征采集到数据的时间点;
  • tag: 维度列,代表数据的归属、属性,表明是哪个设备/模块产生的,一般不随着时间变化,供查询使用;
  • field: 指标列,代表数据的测量值,随时间平滑波动,不需要查询。

时序数据库 学习01 基础知识_结构化_02

数据写入特点

  • 高速写入:时序数据通常是连续不断地生成,因此数据写入需要快速进行,以避免数据积压和丢失。时序数据库通常采用批量写入、异步写入和压缩技术等方式来提高写入效率,保证数据写入速度的同时不影响系统的性能。
  • 数据重复性:由于时序数据的连续生成特性,可能会出现重复的数据,这需要在数据写入时进行去重处理。为了避免影响写入效率,时序数据库通常采用基于哈希表的去重技术,能够快速有效地去重。
  • 数据质量保障:时序数据的数据质量对数据分析和决策具有重要影响。在数据写入过程中,时序数据库通常采用数据校验技术和数据采样等方式来保障数据的质量,防止出现数据错误和异常数据。
  • 时间戳保留:时序数据的一个重要特征是时间戳,即每个数据点对应一个时间戳,用来表示数据点的时间信息。在数据写入过程中,时序数据库需要保证时间戳的准确性和唯一性,以保证时序数据的完整性和时序性。
  • 数据压缩:由于时序数据通常具有高维度和大量冗余数据的特点,因此在数据写入过程中需要进行压缩处理。时序数据库通常采用基于算法的数据压缩技术,能够有效减少数据存储空间和加快数据读取速度。

数据查询和分析特点

  • 按时间范围读取:通常来说,你不会去关心某个特定点的数据,而是一段时间的数据。
  • 数据维度高:时序数据通常包含多个维度的数据,例如时间戳、测量值、传感器类型等,这使得数据查询和分析变得更加复杂
  • 数据量大:时序数据通常包含大量的数据点,因此数据查询和分析需要处理大量数据,包括实时数据和历史数据。
  • 实时性要求高:时序数据的数据生成速度非常快,因此实时性要求很高。查询和分析操作需要快速响应,及时展现最新数据。
  • 时间序列相关性强:时序数据的数据点之间存在强相关性,即当前数据点和前一时刻或前几个时刻的数据点相关。因此时序数据查询和分析需要考虑数据点之间的相关性。
  • 数据聚合和计算:时序数据的查询和分析通常需要进行数据聚合和计算,例如求和、平均值、标准差、方差等操作,以便更好地展示数据趋势和变化。

数据存储特点

  • 数据量大:拿监控数据来举例,如果我们采集的监控数据的时间间隔是1s,那一个监控项每天会产生86400个数据点,若有10000个监控项,则一天就会产生864000000个数据点。在物联网场景下,这个数字会更大。整个数据的规模,是TB甚至是PB级的。
  • 冷热分明:时序数据有非常典型的冷热特征,越是历史的数据,被查询和分析的概率越低。
  • 具有时效性:时序数据具有时效性,数据通常会有一个保存周期,超过这个保存周期的数据可以认为是失效的,可以被回收。一方面是因为越是历史的数据,可利用的价值越低;另一方面是为了节省存储成本,低价值的数据可以被清理。
  • 多精度数据存储:在查询的特点里提到时序数据出于存储成本和查询效率的考虑,会需要一个多精度的查询,同样也需要一个多精度数据的存储。



4.为什么时序数据如此重要

尽管时序数据并不是一种新的数据类型,但在过去的几年里,它的流行程度和使用量显著增加,正如 DB-Engines 所分析的那样。有几个因素不容忽视,包括: - 互联网的发展和许多行业的数字化。直接导致了海量时序数据的产生,如网站流量、社交媒体活动和传感器读数等。 - 机器学习算法的发展。如递归神经网络(RNN)和长短期记忆(LSTM)网络,这些算法适用于时序数据分析,便于人们从这类数据中提取有价值的信息,使得时序数据有机会进一步产生价值。 - 预测性分析的兴起。这使得时序数据成为预测趋势和未来结果的重要工具。 - 金融、医疗和交通等领域的需求。这些领域对实时决策的需求越来越大,时序数据分析能够应对这些快速变化的情况。

5.什么是时序数据库

时序数据库(Time Series Database)如果按照 Wikipedia 的定义就是专门面向时序数据处理优化的数据库,它是领域数据库的一种,都是为了特定业务领域的数据处理服务,比如图数据库处理图的存储和检索,文档数据库用于半结构化的文档的存储和检索,搜索引擎专门用于非结构化文本的检索等。

6.时序数据库特点

Mysql处理海量时序数据场景问题

  • 存储成本大:对于时序数据压缩不佳,需占用大量机器资源;
  • 维护成本高:单机系统,需要在上层人工的分库分表,维护成本高;
  • 写入吞吐低:单机写入吞吐低,很难满足时序数据千万级的写入压力;
  • 查询性能差:适用于交易处理,海量数据的聚合分析性能差。

需要解决的问题

  • 时序数据的写入:如何支持每秒钟上千万上亿数据点的写入。
  • 时序数据的读取:如何支持在秒级对上亿数据的分组聚合运算。
  • 成本敏感:由海量数据存储带来的是成本问题。如何更低成本的存储这些数据,将成为时序数据库需要解决的重中之重。

Log-Structured Merge-tree(LSM-tree)

时序数据库 学习01 基础知识_结构化_03

LSM-tree 是一种基于磁盘的数据结构,为写入量较大的工作负载进行了优化,通过在一系列层次中合并和压缩数据,实现了高效的数据摄取和存储。与传统的 B-tree 相比,这减少了写入放大率,提供了更好的写入性能。

LSM tree 包括内存里的数据结构和磁盘上的文件两部分。分别对应 Hbase 里的 MemStore 和 HLog;对应 Cassandra 里的 MemTable 和 sstable。

LSM tree 操作流程如下:

  1. 数据写入和更新时首先写入位于内存里的数据结构。为了避免数据丢失也会先写到 WAL 文件中。
  2. 内存里的数据结构会定时或者达到固定大小会刷到磁盘。这些磁盘上的文件不会被修改。
  3. 随着磁盘上积累的文件越来越多,会定时的进行合并操作,消除冗余数据,减少文件数量。

时序数据库 学习01 基础知识_时间戳_04


基于时间的分区
时序数据库通常基于时间间隔对数据进行分区,使查询更快速、更高效,也更容易保留和管理数据。这种方法有助于将最近的、经常访问的数据与较早的、不常访问的数据区隔开来,优化了存储和查询性能。

数据压缩
时序数据库采用各种压缩技术,如 delta 编码、Gorilla 压缩或字典编码,以减少存储空间需求。这些技术利用了时序数据中的时间和基于价值的模式,实现高效存储,同时又不丢失数据的保真度。

内置基于时间的函数和聚合
时序数据库对基于时间的函数的提供了本地支持,如移动平均数、百分比和基于时间的聚合。与传统数据库相比,这些内置功能使用户能够更有效地执行复杂的时间序列分析,并减少计算开销。


  • 存储成本:利用时间递增、维度重复、指标平滑变化的特性,合理选择编码压缩算法,提高数据压缩比;通过预降精度,对历史数据做聚合,节省存储空间。
  • 高并发写入:批量写入数据,降低网络开销;数据先写入内存,再周期性的dump为不可变的文件存储
  • 低查询延时,高查询并发:优化常见的查询模式,通过索引等技术降低查询延时;通过缓存、routing等技术提高查询并发。

分片设计

结合时序数据库的特点,根据 measurement+tags 分片是比较好的一种方式,因为往往会按照一个时间范围查询,这样相同 metric 和 tags 的数据会分配到一台机器上连续存放,顺序的磁盘读取是很快的。**再结合上面讲到的单机存储内容,可以做到快速查询。

进一步我们考虑时序数据时间范围很长的情况,需要根据时间范围再分成几段,分别存储到不同的机器上,这样对于大范围时序数据就可以支持并发查询,优化查询速度。

时序数据库 学习01 基础知识_结构化_05


7.为什么选择时序数据库

针对时序数据的特征、规模和应用,时序数据库可以做出针对性的专门优化:存储采用定制型的压缩算法、存储格式采用面向时序海量写入和查询场景优化的行列混存格式;查询算子上针对时序引入更多时间窗口相关的函数、查询协议上面向时序模型优化;数据删除采用更灵活的过期策略等

这些领域特定的专门优化,可以让时序数据库在领域能力、性能、成本、稳定性等维度上对比通用型数据库会有极大的优势。

8.使用场景

时序数据库已被广泛用于物联网(Internet of Things)、金融数据分析、监控和警报系统、能源管理、医疗保健应用以及其他对“时间”敏感的行业。通过使用时序数据库来对时序数据进行分析预测,企业可以从数据中获得有价值的信息,从而做出更明智的决策,获得独特的竞争优势。

9.开源数据库对比

时序数据库 学习01 基础知识_时间戳_06