关于时间序列数据的数据库选型思考

由于公司技术架构升级,近期经常和同事一起讨论时序型数据库的选型,引发一些相关的思考和结论,由此产生了此文章;

0x00 什么是时间序列数据?

时间序列数据就是一个数据源会每隔一段时间产生一条数据,除了时间戳和值不一样,其他都相同。比如一个cpu的使用率,随着时间的变化不断变化,那么它产生的数据就是时间序列数据。

时序数据库会根据这样的特性来进行压缩,每次数据基本相同,只是少量数值变化,而压缩则只需要将类似的数据存一份,单独存储数值变化;

0x01 业务场景

随公司物联网业务发展,现有大量的终端设备数据需要存储其海量的时间序列数据数据,需要选择一款合适的数据库作为选型;
而物联网数据大部分都有共同的特性:

  • 数据随着时间增长,根据维度取值,而数据维度几乎不变。
  • 持续高并发写入,设备越多,写入数量越大,而且由于定期采样,写入量平稳。但是几乎不会有更新操作(一个设备在某个时间点产生的数据不会变动)以及单独数据点的删除(通常只会删除过期时间范围内所有的数据)
  • 查询一般都是查最近产生的数据,很少会去查询过期的数据。
  • 设备之间的数据关联性小,同种类设备A和设备B产生的数据互相并不依赖。你并不需要join。

这些正是时序数据库的特点;

0x02 数据库选型及优劣

Hbase

优点:支持海量数据,集群扩容等方案支持较好
缺点:成本巨大。分为运维成本和存储成本。复杂的聚合查询无法实现(如:降采样 按一分钟一条数据进行查询。hbase无法实现,只能范围内所有数据全部查询出来到内存中运算

OpenTSDB

优点:基于hbase做的时序数据库,最大的特点是支持时序型的同时还有hbase带来的横向扩展能力
缺点:Hadoop生态太重, 运维、储存成本很高,不够简洁与轻量。为了支持时序型数据会增加相对于hbase更多数据冗余

InfluxDB

优点:开源排名最高的时序数据库,性能高,降采样等查询天然支持,监控等体系完善
缺点:集群版需要购买商业服务(AWS InfluxDB Cloud 4000设备,5秒一次读数,预计一天$50左右的费用)

TimeStream

资料较少,AWS官方推出的时序型数据库,AWS云体系,不开源;

ClickHouse

优点:性能高写入速度快、压缩比非常高、稀疏索引、支持预聚合(物理试图)
缺点:集群扩容较麻烦(新加入节点数据重新分散,否则容易造成热点数据),依赖zookeeper,兼容等体系需要自己实现;

ClickHouse在时序数据方便的处理能力
1、时间:时间是必不可少的,按照时间分区能够大幅降低数据扫描范围;
2、过滤:对条件的过滤一般基于某些列,对于列式存储来说优势明显;
3、降采样:对于时序来说非常重要的功能,可以通过聚合实现,CK 自带时间各个粒度的时间转换函数以及强大的聚合能力,可以满足要求;
4、分析挖掘:可以开发扩展的函数来支持。

0x03 写在最后

InfluxDB 在集群方面闭源了,这的确是件非常可惜的事情。不过可以理解,任何技术创业公司都要谋求生存和发展,商业输血是必须的,希望有一天 InfluxDB 的母公司能被巨头收购,然后再次完全开源。目前推荐是先使用 ClickHouse,虽然他不是时序性数据库,但是其强大的性能及压缩比,再通过其稀疏索引和物理试图达到降采样等功能可以支持时序数据相关的处理需求;