创意电子

标题: 比力时间序列数据库InfluxDB、TimescaleDB和QuestDB [打印本页]

作者: 闻数起舞    时间: 2021-9-26 01:16
标题: 比力时间序列数据库InfluxDB、TimescaleDB和QuestDB
时间序列数据库的高级概述,以比力特性、功能、成熟度和性能

黄一泰-11分钟阅读


                               
登录/注册后可看大图
照片:Tech Daily on Unsplash
我们正生活在数据库的黄金时代,因为资金正以汗青性的速度流入该行业(例如,Snowflake、MongoDB、Cockroach Labs、Neo4j)。如果说关系型与非关系型或在线分析处置惩罚(OLAP)与在线交易处置惩罚(OLTP)之间的争论统治了过去十年,那么一种新类型的数据库不停在稳步增长。根据DB-Engines(一个收集和展示数据库管理体系信息的倡议),自2020年以来,时间序列数据库是增长最快的范畴。

时间序列数据库(TSDB)是为摄取、处置惩罚和存储有时间戳的数据而优化的数据库。这些数据可能包罗来自服务器和应用程序的指标,来自物联网传感器的读数,用户在网站或应用程序上的互动,或金融市场的交易活动。时间序列工作负载通常具有以下特点。

虽然其他数据库也能在肯定程度上处置惩罚时间序列数据,但TSDB的设计思量到了上述特性,以更有效地处置惩罚数据的摄入、压缩和按时间聚合。那么,随着云计算、物联网和机器学习的发展,对时间序列数据的需求不断爆发,架构师应该怎样选择TSDB?在这篇文章中,我们将比力一些流行的TSDB以及市场上的新玩家,以帮助你做出决定。

InfluxDB

InfluxDB于2013年首次发布,如今是TSDB范畴当之无愧的市场领导者,凌驾了之前的Graphite和OpenTSDB。与许多开放源码数据库公司一样,InfluxDB以MIT许可的方式授权给单节点,InfluxDB云和InfluxDB企业的付费计划则提供了集群和其他生产就绪的功能。


                               
登录/注册后可看大图
图片来源:influxdata, (MIT)
在2019年InfluxDB 2.x发布之前,InfluxDB平台由TICK栈组成。Telegraf(收集和报告指标的代理)、InfluxDB、Chronograf(从InfluxDB查询数据的接口)和Kapacitor(实时流数据处置惩罚引擎)。如下图所示,InfluxDB 1.x主要专注于来自服务器和网络应用的时间序列数据。在Prometheus出现并抢占这一范畴的市场份额之前,InfluxDB拥有最大的社区和集成,可以收集、存储和查看应用程序的指标。


                               
登录/注册后可看大图
图片来源:influxdata, (MIT)
InfluxDB 2.x在很大程度上简化了架构,将TICK堆栈捆绑到一个单一的二进制文件中,并引入了新的功能,使收集(如本地Prometheus插件)、组织(如组织和桶)和可视化(如数据浏览器)数据与它的Flux语言。

为了明白InfluxDB的工作原理,我们必要掌握以下关键概念。


                               
登录/注册后可看大图
图片来源:influxdata, (MIT)
最值得注意的是,InfluxDB在输入数据之前不逼迫执行模式。相反,模式是由输入数据自动创建的,从标签和字段中推断出来。这种类似NoSQL的体验既是InfluxDB的上风,也是它的劣势。对于天然适合这种标签集模型的相对较低的数据集(例如,大多数基础设施和应用指标,一些物联网数据,一些金融数据),InfluxDB非常容易上手,而不必担心设计模式或索引的问题。在目的是创建物理资产的数字模型的用例中,它也大放异彩。例如,在物联网中,人们可能必要创建一个数字孪生体来表示传感器的聚集,并以一种有组织的方式摄取数据。


                               
登录/注册后可看大图
图片来源:TimescaleDB, (Apache)
另一方面,当数据集必要对连续字段进行索引(即InfluxDB不支持数字,因为标签必须是字符串)或数据验证时,"无模式 "可能是一个倒霉因素。另外,由于标签是有索引的,如果标签常常变化(例如,元数据在最初摄入后可能发生变化的用例),依赖InfluxDB来推断模式可能是昂贵的。

末了,InfluxDB决定创建自己的自定义功能数据脚本语言(Flux),为掌握这个生态体系带来了另一层复杂性。InfluxDB的团队指出,从类似SQL的InfluxQL转向Flux有两个动机。

Flux的语法肯定必要一些努力来顺应,特别是如果你正在寻找简朴的SQL查询或不渴望学习另一种新的语言。但思量到InfluxDB的大型社区和集成,Flux的一些上风开始显现,特别是当与内置的仪表盘相结合时。


                               
登录/注册后可看大图
图片来源:influxdata, (MIT)
总的来说,如果时间序列数据与标签集模型非常吻合,InfluxDB是一个不错的选择。主要的用例似乎是面向基础设施/应用监控,但作为这一范畴显着的市场领导者,InfluxDB也与流行的数据源无缝集成。

TimeScale数据库

InfluxDB选择了从头开始建立一个新的数据库和自定义语言,而另一端是TimescaleDB。TimescaleDB建立在PostgreSQL之上,并增加了一个称为hypertable的中心层,将数据分块到多个底层表格,同时将其抽象为一个单一的大表格,以便与数据进行交互。


                               
登录/注册后可看大图
图片来源:TimescaleDB, (Apache)
PostgreSQL的兼容性是TimescaleDB的最大卖点。TimescaleDB完全支持所有的SQL功能(如毗连,二级和部分索引),以及流行的扩展,如PostGIS。更重要的是,TimescaleDB继承了几十年来运行SQL查询的开发人员以及大规模运行PostgreSQL的数据库和体系管理员的知识。由于TimescaleDB可以被视为PostgreSQL的扩展,除了TimescaleDB自己的管理产物外,云管理选项(如Azure Database for PostgreSQL,Aiven)也是现成的,更不用说虚拟机或容器上的无数自我管理选项。


                               
登录/注册后可看大图
图片来源:2020年Stack Overflow开发者观察,(ODbL)。
因为TimescaleDB一开始是作为一个物联网平台,他们一开始实际上是用InfluxDB来存储他们的传感器数据,它的功能对物联网时间序列数据来说是个好兆头,这些数据往往是突发的,由于网络不可靠而常常失序,并且具有高基数的特点。

至于性能,TimescaleDB有一个全面的帖子,详细介绍了利用时间序列基准套件(TSBS)比力TimescaleDB 1.7.1版本和InfluxDB 1.8.0(都是OSS版本)的插入和读取延迟指标。这两个数据库如今都有2.x版本,所以这个分析可能有点过期了,但结果显示,随着数据cardinality的增长,TimescaleDB的性能更优越(约3.5倍的性能)。


                               
登录/注册后可看大图
图片来源:TimescaleDB, (Apache)
TimescaleDB团队指出,InfluxDB的基于日记结构的合并树体系(TSI)与TimescaleDB的B树索引方法相比,是根本原因。然而,这里的启示不肯定是TimescaleDB在性能上优于InfluxDB。性能基准是故意见的,而且受数据模型、硬件和配置的影响很大。相反,这个结果表明,TimescaleDB可能更适合于物联网的利用案例,在那边数据基数很高(例如,给我1000万台设备中的X设备的平均用电量)。

总的来说,TimescaleDB非常适合那些正在寻找一个巨大的性能提升而不必要重构的团队,以迁移出他们现有的SQL数据库。尽管TimescaleDB仍然相对较新(2017年首次发布),但在PostgreSQL基础上构建的决定已经提升了其采用数量,达到了前5名的TSDB。从轶事来看,我之前的物联网创业公司也利用TimescaleDB作为中心数据存储,以快速提取跨越几个月的聚合指标,并将旧数据转移到恒久存储。由于我们已经在Kubernetes集群上运行PostgreSQL,安装TimescaleDB和迁移我们的工作负载,是一个简朴的使命。

QuestDB

对于那些渴望利用InfluxDB线路协议的灵活性和PostgreSQL的熟悉性的人来说,一个较新的时间序列数据库可能会满意这两个要求而不牺牲性能。QuestDB(YC S20)是一个用Java和C++编写的开源TSDB,虽然它推出不到一年,但如今已经排名前15位。在引擎下,QuestDB利用内存映射文件,在数据提交到磁盘之前支持快速读写。


                               
登录/注册后可看大图

图片来源。QuestDB, (Apache)

通过用Java和C++从头开始建立数据库,QuestDB团队专注于三件事。

在性能方面,QuestDB最近发布了一篇博文,显示了基准测试结果,实现了每秒140万行的写入速度。QuestDB团队利用TSBS基准,在AWS的m5.8xlarge实例上利用多达14个工程的cpu-only用例(注意:140万的数字来自利用AMD Ryzen5处置惩罚器)。


                               
登录/注册后可看大图
图片来源。QuestDB, (Apache)
对于具有高基数(>1000万)的数据集,QuestDB的表现也优于其他TSDB,其峰值摄取吞吐量为904k行/秒,在利用英特尔至强CPU的m5.8xlarge实例上利用4个线程,在1000万设备上维持约640k行/秒。当在AMD Ryzen 3970X上运行相同的基准时,QuestDB显示出凌驾一百万行/秒的摄取吞吐量。


                               
登录/注册后可看大图
图片来源。QuestDB, (Apache)
基于数据模型和数据库的调整,性能基准可以是主观的,但它还是为QuestDB刻画了一个引人注目的比力点。由于InfluxDB和TimescaleDB都支持TSBS开箱即用的这些用例,看看结果怎样,将会很有趣。

QuestDB的另一个有趣的组成部分是支持InfluxDB内联协议和PostgreSQL线程的摄取。对于现有的InfluxDB用户,你可以简朴地配置Telegraf以指向QuestDB’的地址和端口。同样,对于PostgreSQL用户,利用现有的客户端库或JDBC将数据写入QuestDB中。无论采用哪种摄取方法,都可以利用标准SQL进行数据查询,但API参考页上列出了一些显着的例外。

作为这个范畴的新进入者,QuestDB最显着的缺点是缺乏对基础设施功能的支持(如复制、自动备份/恢复)。它确实已经与一些最流行的工具(如PostgreSQL、Grafana、Kafka、Telegraf、Tableau)集成,但它必要一些时间才能达到上述其他TSDB的程度。

尽管如此,QuestDB仍是一个很有前程的项目,可以均衡InfluxDB和TimescaleDB的积极因素。

总结

随着对时间序列数据的需求不断增长,专门处置惩罚这些数据的TSDB将被大量采用,同时也将面临激烈的竞争。除了本文涉及的三个开源TSDB,另有来自AWS(AWS Timestream)和Azure(Azure Series Insights)的公共云产物。

与所有数据库一样,选择 "完美 "的TSDB主要取决于你的业务需求、数据模型和利用环境。如果你的数据符合taget模型,InfluxDB就能很好地工作,并且有一个丰富的集成生态体系可以利用。TimescaleDB是现有PostgreSQL用户的天然选择。末了,如果性能是主要关注点,QuestDB是一个有前程的项目,正在快速增长。

作者: IT运维专家KM    时间: 2021-9-26 02:43
转发了
作者: 仰望星星的猿人    时间: 2021-9-26 07:09
对于有多个时间的记录它们是如何处理的呢?比如一天记录里分别有创建时间,修改时间,生效时间,过期时间。
作者: cui3093    时间: 2021-9-26 08:45
没有TDengine有点意外
作者: gym603    时间: 2021-9-26 08:58
转发了
作者: vostok85    时间: 2021-9-26 12:36
转发了
作者: 我爱北科校友宣传号    时间: 2021-9-26 22:06
转发了
作者: 指点瀛寰    时间: 2021-9-26 22:51
转发了
作者: sense1229    时间: 2021-9-27 01:02
转发了
作者: sense1229    时间: 2021-9-27 01:03
转发了
作者: hellowing    时间: 2021-9-27 18:51
转发了




欢迎光临 创意电子 (https://www.wxcydz.cc/) Powered by Discuz! X3.4