时序数据库连载系列:时序数据库那些事

时序数据库连载系列:时序数据库那些事

正如《银翼杀手》中那句在影史流传经典的台词:“I've seen things you people wouldn't believe... All those ... moments will be lost in time, like tears...in rain.” 时间浩瀚的人类历史长河中老是一个耀眼的词汇,当科技的年轮划到数据时代,时间与数据库碰到一块儿,把数据库内建时间属性后,产生了时序数据库。时序数据库是一种带有时间戳业务属性的垂直型数据库。自从2014年开始,数据库热度排名网站DB-Engines就把时间序列数据库做为了独立的目录来分类统计,并且最近几年的增加率在所有数据库分类里排名第一(见下图)。算法

040

时序数据库

A time series database (TSDB) is a software system that is optimized for handling time series data, arrays of numbers indexed by time (a datetime or a datetime range)docker

以上是维基百科对于时序数据库的定义。能够把它拆解成3个方面来看:时序特性,数据特性,数据库特性。数据库

  • 时序特性:apache

    • 时间戳:通用的业务场景内以秒和毫秒精度为主,在一些遥感等高频采集领域,时间戳能够达到纳秒级别。api

      时间戳种类包括unix系统时间戳和Calendar, 而且支持时区的自动适配。
    • 采样频率:采集频率通常有2种,一种是周期性的时间采样频率,好比服务器性能相关的按期汇总指标。另一种是离散型的采样,好比网站的访问等等
  • 数据特性:服务器

    • 数据顺序追加
    • 数据可多维关联
    • 一般高频访问热数据
    • 冷数据须要降维归档
    • 数据主要覆盖数值,状态,事件
  • 数据库特性(CRUD)微信

    • 写入速率稳定而且远远大于读取
    • 按照时间窗口访问数据
    • 极少更新,存在必定窗口期的覆盖写
    • 批量删除
    • 具有通用数据库要求的高可用,高可靠,可伸缩特性
    • 一般不须要具有事务的能力

时序数据库发展简史

041

第一代时序数据存储系统

虽然通用关系数据库能够存储时序数据,可是因为缺少针对时间的特殊优化,好比按时间间隔存储和检索数据等等,所以在处理这些数据时效率相对不高。网络

第一代时序数据典型来源于监控领域,直接基于平板文件的简单存储工具成为这类数据的首先存储方式。数据结构

以RRDTool,Wishper为表明,一般这类系统处理的数据模型比较单一,单机容量受限,而且内嵌于监控告警方案。架构

基于通用存储的时序数据库

伴随着大数据和Hadoop的发展,时序数据量开始迅速增加,系统业务对于处理时序数据的扩展性等方面提出更多的要求。

基于通用存储而专门构建的时间序列数据库开始出现,它能够按时间间隔高效地存储和处理这些数据。像OpenTSDB,KairosDB等等。

这类时序数据库在继承通用存储优点的基础上,利用时序的特性规避部分通用存储的劣势,而且在数据模型,聚合分析方面作了贴合时序的大量创新。

好比OpenTSDB继承了HBase的宽表属性结合时序设计了偏移量的存储模型,利用salt缓解热点问题等等。

然而它也有诸多不足之处,好比低效的全局UID机制,聚合数据的加载不可控,没法处理高基数标签查询等等。

垂直型时序数据库的出现

随着docker,kubernetes, 微服务等技术的发展,以及对于IoT的发展预期愈来愈强烈。

在数据随着时间而增加的过程当中,时间序列数据成为增加最快的数据类型之一。

高性能,低成本的垂直型时序数据库开始诞生,以InfluxDB为表明的具备时序特征的数据存储引擎逐步引领市场。

它们一般具有更加高级的数据处理能力,高效的压缩算法和符合时序特征的存储引擎。

好比InfluxDB的基于时间的TSMT存储,Gorilla压缩,面向时序的窗口计算函数p99,rate,自动rollup等等。

同时因为索引分离的架构,在膨胀型时间线,乱序等场景下依然面临着很大的挑战。

时序数据库发展示状

目前,DB-Engines把时间序列数据库做为独立的目录来分类统计,下图就是2018年业内流行的时序数据库的关注度排名和最近5年的变化趋势。

042

  • 公有云

    • AWS Timestream

      • 2018.11 Amazon在AWS re Invent大会发布Timestream预览版。适用于 IoT 和运营应用程序等场景。
        提供自适应查询处理引擎快速地分析数据,自动对数据进行汇总、保留、分层和压缩处理。按照写入流量,存储空间,查询数据量的方式计费,以serverless的形式作到最低成本管理。
    • Azure Series Insights

      • 2017.4 Microsoft发布时序看法预览版,提供的彻底托管、端到端的存储和查询高度情景化loT时序数据解决方案。强大的可视化效果用于基于资产的数据看法和丰富的交互式临时数据分析。
        此外,针对数据类型分为暖数据分析和原始数据分析,按照存储空间和查询量分别计费。
  • 开源

    • OpenTSDB
      OpenTSDB是一个分布式的、可伸缩的时间序列数据库. 引入metric,tags等概念设计了一套针对时序场景的数据模型,底层采用HBase做为存储,利用时序场景的特性,采用特殊的rowkey方式,来提升时序的聚合和查询能力。
    • Prometheus
      Prometheus会将全部采集到的样本数据以时间序列(time-series)的方式保存在内存数据库中,而且定时保存到硬盘上。须要远端存储来保证可靠和扩展性。
    • InfluxDB
      InfluxDB是单机开源的时序数据库,由Go语言编写,无需特殊的环境依赖,简单方便。采用独有的TSMT结构实现高性能的读写。分布式须要商业化支持。
    • Timescale
      面向SQL生态的时序数据库,固定Schema,底层基于PG,按时间管理chunk table。
  • 学术

    • BTrDB
      BtrDB面向高精度时序数据的存储应用,设计并提出了 "time-partitioning version-annotated copy-on-write tree" 的数据结构,为每一条时间线构建了一棵树,而且引入版本的概念处理数据的乱序场景
    • Confluo
      Confluo设计了新型的数据结构”Atomic MultiLog“,采用现代CPU硬件支持的原子指令集,支持百万级数据点高并发写入,毫秒级在线查询,占用不多的的CPU资源实现即席查询
    • Chronixdb
      ChronixDB基于Solr提供了时序存储,而且实现了特有的无损压缩算法,能够与Spark集成,提供丰富的时序分析能力。
  • 商业&工业

    • PI
      PI是OSI软件公司开发的大型实时数据库,普遍应用于电力,化工等行业,采用了旋转门压缩专利技术和独到的二次过滤技术,使进入到PI数据库的数据通过了最有效的压缩,极大地节省了硬盘空间
    • KDB
      KDB是Kx System开发的时间序列数据库,一般用于处理交易行情相关数据。支持流、内存计算和实时分析Billion级别的记录以及快速访问TB级别的历史数据。
    • Gorilla
      Gorilla是Facebook的一个基于内存的时序数据库,采用了一种新的时间序列压缩算法.

    能够将数据从16字节压缩到平均1.37字节,缩小12倍.而且设计了针对压缩算法的内存数据结构.在保持对单个时间序列进行时间段查找的同时也能快速和高效的进行全数据扫描。
    经过将时间序列数据写到不一样地域的主机中,容忍单节点故障,网络切换,甚至是整个数据中心故障。

  • 投资市场

    • 2018年时序数据库创业公司在投资市场有2笔著名的投资。

      Timescale得到了来自Benchmark Capital的\$12.4M Series A轮融资。 InfluxDB得到了来自Sapphire Ventures的\$35M C轮融资。 

业界典型时序数据库解析

近2年来时序数据库正处于高速发展的阶段。国内外云市场各大主流厂商已经从整个时序生态的不一样角度切入,造成各自特点的解决方案完成布局,开始抢占流量。
而以Facebook Gorilla为表明的优秀的时序数据库则是脱胎于知足自身业务发展的须要。学术上,在时序领域里面更是涌现了一大批黑科技,把时序数据的技术深度推向更高的台阶。
阿里巴巴的TSDB团队自2016年初版时序数据库落地后,逐步服务于DBPaaS,Sunfire等等集团业务,在2017年中旬公测后,于2018年3月底正式商业化。
在此过程当中,TSDB在技术方面不断吸纳时序领域各家之长,开启了自研的时序数据库发展之路。
这个系列文章带领读者一块儿欣赏下当前时序领域的技术风景。

 

原文连接更多技术干货 请关注阿里云云栖社区微信号 :yunqiinsight