What is a Time Series Database?

原创 2018-07-16 21:21 阅读(275)次

时序数据库是什么

时序数据库(Time Series Database,TSDB)是针对时间戳或者时间序列优化的数据库。
时间序列是随着时间进行跟踪,监控,下采样和聚合的事件或者度量记录。比如:服务器metrics,应用性能监控,网络数据,传感器数据,时间,点击,市场交易等等。和常规数据最大的不同,就是用户会根据时间来对数据进行提问。
TSDB专门用来处理时间序列类型的数据,针对随着时间变化的特性进行了优化。因为时序数据的生命周期管理,汇总,大范围扫描与其他数据在负载上有很大的不同。

为什么TSDB现在越来越重要了?

以前我也遇到过类似的时序数据的需求,最早时序数据库主要侧重于查看财务数据,股票交易等,然而过去十年,计算的条件发生了变化,大型服务器逐渐消失,取而代之的是微服务,容器化和serverless。现在每一样东西都是一个组件,如人体,伟星,电话,工厂,汽车等都可以作为一个“仪器”,都含有传感器。这意味着底层平台需要发展,支持新的工作负载-----更多的数据,更多的数据源头,更多的监控,更多的控制。这就是需要TSDB。还有一方面就是正在蓬勃发展的IOT,物联网时代的来临会带来更多时序数据,任何一个芯片时时刻刻上报着时序数据。

What Distinguishes the Time Series Workload?

时序数据库具有的关键设计属性使他与其他数据库非常不同。其中包括时间戳数据存储和压缩,数据的生命周期管理,数据汇总,大量时序数据的扫描功能和时序感知查询。
例如:
对于时间序列数据库,通常会要求对一段时间内的数据进行汇总,这需要通过一系列数据点来执行计算,就像过去6个月里,每个月的增量百分比这样的问题。对于key value的分布式数据库,这是很难优化的。而TSDB则针对这样的问题进行了优化,可以在几毫秒内就计算出来。
再如:
对于TSDB,通常会要求在很短的时间周期内,保持很高的精度。当数据被汇总并进行下采样作为长期趋势数据。这意味着对于进入DB的每一个数据点都要在一段时间将它删除。这种类型的数据生命周期管理是很难在常规DB上实现的。或许可以通过不断的进行大规模定期检查任务来做到,但TSDB却自带了这样的功能。

TSDB目前的排名

根据DB-Engines目前的排名,如下
InfluxDB
Kdb+
RRDTool
Graphite
OpenTSDB
Prometheus
Druid  
KairosDB
eXtremeDB
Riak TS
Axibase
TimescaleDB
FaunaDB
Hawkular Metrics
Warp 10

同时也对过去2年内不同类型数据库的增长进行的统计



TSDB对其他数据库的比较

通过TSDB与各种分布式数据库( Cassandra, MongoDB or HBase.)比较发现,同样的需求在其他数据库上需要投入很多时间和代码,如编写代码进行数据整理,聚合,下采样,汇总,数据eviction,生命周期管理,然后在创建一个API来调用这些功能,另外可能还需要编写代码来进行数据collection,并引入一个实时处理系统,还要监控和报警,最后还要编写可视化引擎来展示时间序列数据。而TSDB本身包含了这些特性,可以开箱即用。

跟Elasticsearch的比较:

我刚好也比较熟悉elasticsearch,他是专门为了搜索而设计的,但他也有一些缺点,就是API还是比较复杂的,虽然也可以通过HTTP来访问,但要把参数包装成符合要求的请求也不是容易的事。另外TSDB号称写入的吞吐量是ES的5-10倍,而查询时间范围,TSDB也比ES快上5-100倍(注意是号称的,我用过ES,觉得还可以,但谈不上很快)。而且ES对原始数据的存储对磁盘空间的要求也比TSDB高出10倍以上。如果数据在插入数据库前先汇总,则ES对磁盘的需求比TSDB大上3-4倍。不过可观的说,如果你要做模糊匹配或者同义词之类的搜索,还是用ES把。

跟mongoDB的比较:

还不少人用mongoDB存储时序数据,我7年前参与的一个项目就是用mongoDB来存储网络设备的日志。
mongoDB是用时间戳和bucket作为建模primitive,因此可以为用户提供存储和查询时序数据,它最大的特点应该是数据的无模式化,数据格式BSON是类似JSON的一种文档格式,因此他没有利用到时间序列数据的高度结构化特性。特别注意一点是mongoDB的时序数据由Key Value的字符串对加上时间戳对应的序列数值组成,所以需要专门配置来使用时序数据。

跟Cassandra的比较:

Cassandra是用java编写的非关系型数据库,最初是fackbook在使用,2008年开源。他提供了分区,行存储,key-value,和列导向存储。但在时间序列方面的主要功能却是缺乏的。所以一般用法是在Cassandra上面再构建应用来支持这些缺乏的功能。而且要用这种列式数据库,还要对一些特殊的定义,如列簇等概念很熟悉。

其他一些 time series DB

TSDB是因为它们的数据模型不同。
比如OpenTSDB是建立在HBASE上的。缺点是他依赖于HBASE的数据存储,因此他不是一个独立的时序DB,他的TSDs(时序daemons)提供了查询功能,但没有共享状态,这增加了其他额外的开销。
还有像Graphite,Riak,KDB+ 我不太了解。

本文主要是翻译自 https://www.influxdata.com/time-series-database/ 
本文完。

本站作品的版权皆为作品作者所有。

本站文字和内容为本站编辑或翻译,部分内容属本站原创,所以转载前务必通知本站并以超链接形式注明内容来自本站,否则以免带来不必要的麻烦。

本站内容欢迎分享,但拒绝有商业目的的转载!