人工智能 频道

常年霸榜DBengine时序数据库榜单的三剑客,怎么选?

  导读:近年来,时序数据库越来越受到关注,多种时序数据库产品也纷纷推出。

  时序数据库理解起来也很简单,构成具有三个要素:主体,时间戳和指标数据。比如:xxx公司(主体)2023年5月17日上午10时,11时,下午14时(时间戳)的股价分别是:11.15¥,11.58¥,12.02¥(指标值)。概括来说,区别于关系数据库关心的是“最终结果”。时序数据库表示的是资产或者过程是如何随着时间变化的,体现的是“变化”的过程价值。

  其中InfluxDB、Kdb和Prometheus是比较知名的三款产品,在国际知名的DBengine网站,也长期霸榜前三甲,它们之间有异曲同工之妙,但在各自的优缺点上也存在差异。本文将对比分析InfluxDB、Kdb、Prometheus这三个时序数据库,并指出它们各自的优缺点。

  ◆InfluxDB

  InfluxDB是一个由InfluxData在2013年创立的开源时序型数据库。它的出现是为了满足物联网领域中需要处理大量实时数据、快速存储和高效查询等需求。InfluxDB最初提供了一种灵活的数据模型,可以轻松管理不断变化的数据,并具有流畅的查询和一组用于可视化的工具。

  InfluxDB作为一个开源项目,经过多年发展已经成为一种成熟的解决方案,支持多种编程语言的API和客户端库的使用。它提供了高性能的数据存储和查询服务,并且非常适合处理时序数据场景,比如监控、日志分析、实时数据分析等。

  InfluxDB的优势很明显,很多客户选择它也是从这几个方面进行考虑,其一,开发者社区活跃,使用者众多,开源时间较长。性能经过检验;其二,类SQL的插入、查询语言,不会增加太大的学习成本;其三,InfluxDB的水平扩展能力非常强大,可以通过多种方式实现高可用、负载均衡和数据分片等需求,同时还支持多种协议,如HTTP、TCP等,方便用户进行扩展和集成;最后它作为存储方案,可插拔。

  对于它的缺点,主要有以下几个方面。

  InfluxDB社区版默认并未提供集群解决方案。官方开源的influxdb-relay仅仅支持双写功能,并未支持负载均衡能力。

  存储格式较单一。InfluxDB以时间序列为核心设计,因此存储格式非常单一。虽然针对时间序列数据而言,这样做会更加高效,但是如果处理其他类型的数据时,可能会不太合适。

  功能不够完善。InfluxDB在部分功能上可能还不如其他数据库解决方案,如支持事务管理、JOINS等复杂查询操作。

  InfluxDB的发展方向,InfluxData首席执行官Evan Kaplan在今年早些时候接受媒体采访时表示:云化以及对分析更好地支持是确定的方向,据悉,云已经成为InfluxData业务中增长最快的部分,占其收入的50%。除此之外,有专家也提到了几个方面的加强也应该持续关注,包括更好的可扩展性、支持更多数据类型以及工具生态完善。

  ◆Kdb

  1998年,Kx Systems发布了Kdb。Kx Systems在2003年发布了64位版本的Kdb+。它是用q语言写的。Kdb+是为处理金融、物联网等领域的大量时间序列数据而构建的。Kdb+是Kx Systems开发的基于列的关系时间序列数据库。Kdb+数据库设计用于金融领域存储时间序列数据,并在数据增加时进行扩展/输出。

  Kdb被官方称为世界上最快的时间序列数据库,它有非常高的性能和丰富高效的时间序列函数。其列式存储的特性,使得对于某个列的统计分析操作异常方便。全球的投行、高盛、摩根、国内许多证券公司和私募基金都在使用它,所以金融行业认识在选择时序数据库的时候,都优先考虑它。

  相比于InfluxDB以及Prometheus,Kdb在性能、时序数据处理能力、安全性和支持SQL语法方面让用户非常认可。

  高性能:Kdb是目前吞吐量最高的数据库之一,能够快速存储和处理数千亿条数据。并且Kdb支持多线程,其性能也比一般SQL数据库快很多。

  时序数据处理能力:Kdb专门针对时序进行设计,其中包含一些专业化的函数库和工具箱。使用Kdb,用户可以快速实现数据过滤、聚合、分组和处理等复杂的时序数据操作。

  强大的SQL语法:Kdb支持类似于SQL语法的查询和操作语言Q,具有自己的独立编程语言特性。Q语言通过优化和简化数据传输和计算流程,可以大大提高数据查询和处理的效率。

  安全性:Kdb提供了完善的数据安全机制,支持高级别的加密、认证和授权操作,为用户提供了安全可靠的数据保护策略。

  但是Kdb也不可避免存在一系列问题,首先就是学习成本,其搭配的Q语言,学习难度较高。其次是其开发生态不够成熟,相较于InfluxDB和Prometheus,Kdb的开发生态相对薄弱。虽然Kdb社区在不断发展,但是开源库和工具还比较少。最后在硬件层面,Kdb对服务器的配置要求较高,因为它是一款内存数据库,因此需要较大的内存来存储所有的数据。

  ◆Prometheus

  Prometheus是SoundCloud开发的开源时序数据库。受Facebook的Gorilla系统的启发,Prometheus是专门为监测和指标收集而设计的。Prometheus包含一个用户定义的多维数据模型和一种针对多维数据的查询语言,称为PromQL。除了本地磁盘存储,Prometheus还通过协议缓冲区实现远程存储集成。

  Prometheus是用Go语言编写的,支持Go/Java/Ruby/Python客户端。Prometheus还为其他编程语言提供了非官方的客户端绑定。

  Prometheus时间序列数据库经历了三个主要版本。Prometheus v1是一个基本的实现,其中所有时间序列数据和标签元数据都存储在LevelDB中。V2通过在每个时间序列的基础上存储时间序列数据,并采用增量的增量压缩,解决了v1的几个缺点。V3通过实现提前写日志和更好的数据块压缩做了进一步的改进。

  总结来说,Prometheus的优点主要聚焦于几个方向,包括查询语言、可视化数据展示、维护简单以及他超棒的集成监控和报警功能。

  在查询语言方面,PromQL是Prometheus的查询语言,具有类似SQL的表达式语言,支直观的聚合函数、过滤条件等操作。同时,PromQL还能实现一些复杂的数据计算和预测,如绘制变化率图,计算增长率等,支持可视化分析等功能。

  此外,Prometheus能够自适应横向扩展,因此可以在需要时根据数据量和负载情况调整集群规模。这种自适应扩展的方式,适合于大规模云端监控数据的处理,同时,应对峰值时段依然可以优先级满足瞬时的数据处理需求。

  采集数据方面,Prometheus的数据采集器可以使用多种方式来采集数据,包括直接拉取目标数据,或者作为一个HTTP服务器处理推送的数据。此外,它还支持以插件的形式扩展新的数据采集和读取方式,例如执行脚本、主动收集等方式,这些方式可以覆盖大部分数据采集场景,并能够很好地解决一些特别的采集问题。

  值得关注的另外一个方面是,2016 年,由 Google 发起的 Linux 基金会旗下的云原生计算基金会(CNCF)将 Prometheus 纳入作为其第二大开源项目。Prometheus 在开源社区十分活跃,在 GitHub 上拥有4万多 Star,差不多8K的Fork,是公认最流行的监控系统之一,并且系统每隔一两周就会有一个小版本的更新。

  最后我们来谈谈Prometheus的缺点。用户对于其的吐槽主要集中在其较高的硬件需求以及扩展性和查询复杂性等方面。

  Prometheus没有集群解决方案,它作为一个单机应用程序,虽然可以通过分片、副本等方式解决数据存储和查询并发量,但是在扩展性方面难以与分布式系统相媲美。它也不支持直接数据迁移等操作,可能会在操作集群时引起数据丢失等问题。其次,由于Prometheus的数据存储和查询都依赖于内存,所以在处理大数据量时会产生比较大的内存消耗。如果监控数据越积累越多,内存资源就会很快达到极限,这也导致了Prometheus不适用于长期存储海量数据。再次,尽管Prometheus的查询功能被广泛认为是非常优秀的,但其查询引擎的复杂性也带来了一些问题。对于复杂查询,Prometheus需要进行多次扫描和计算,可能会带来较高的延迟,并且可能会让每个请求的CPU使用率很高。最后,Prometheus目前只支持短期的队列存储,无法完成高容量,高稳定性的队列任务。这导致有高并发流入队列的任务时,会出现大量消息丢失的情况,造成系统数据的缺失,这是一种风险。

  总结来说,三款时序数据库产品各有优缺点,在实际应用时,需要根据自己的需求权衡其优缺点,并选择最适合自己的时序数据库。

0
相关文章