汇集所有优势:InfluxDB 3.0 的速度、性能和效率

导航至

在过去一年的大部分时间里,我们在 InfluxData 专注于发布最新版本的 InfluxDB。迄今为止,我们推出了三款商业产品(InfluxDB Cloud Serverless(无服务器云)InfluxDB Cloud Dedicated(专用云)InfluxDB Clustered(集群版)),还有更多 开源选项即将推出。一直以来,我们都声称最新版本的 InfluxDB 超越了我们之前构建的所有产品。我们不做空头承诺,因此这篇文章汇集了当前可用的所有信息,以在一个地方支持这些说法。

有几个相互关联的因素和发展促成了 InfluxDB 的整体成功,我的目标是理清它们之间的清晰联系。虽然其中一些内容必然经过简化,但我鼓励读者查看通篇链接的深入技术文章,如果您对细节感兴趣的话。那么,事不宜迟,让我们深入探讨。

重写

在这个旅程的开始,InfluxData 创始人 Paul Dix 决定Rust 语言编写新的数据库版本。虽然 Rust 并不是最容易使用的语言,但它有很多内置优势。我们用来构建新 InfluxDB 的一些开源项目也是用 Rust 编写的,但我们稍后会回到这些项目。

除了从 Go 语言转向 Rust 语言之外,我们还重新配置了数据库的 架构。这方面的一个关键决定是分离计算和存储。这使得 InfluxDB 可以单独扩展这些组件中的每一个,从而为用户提供更大的灵活性来扩展他们的数据库。

这个新版本的 InfluxDB 试图解决的关键挑战之一是 基数 问题。由于旧版本将数据的索引写入磁盘,用户可以摄取和查询的序列数量,而不影响性能,这与提交给编写和管理索引的内存量相关(观看此简短解释视频)。对于高基数用例,如 追踪,InfluxDB 难以应对。

我们知道,优化 InfluxDB 以处理大型时间序列工作负载需要我们解决基数问题。

走过的路

剧透警告:我们解决了基数问题。在思考新 InfluxDB 中的性能提升或对无限基数数据的支持哪个先出现时,这是一个有点像鸡和蛋的问题。这些以及其他几个项目是相互关联的。

工具

我们的团队做出的最关键的决定之一是基于 Apache Arrow 生态系统构建新版本。FDAP 堆栈Apache FlightDataFusionArrowParquet)提供了许多核心功能,并提供了我们可以使用和贡献的上游开源工具。这不仅扩大了我们对开源的内部承诺,而且还使我们能够为这些项目贡献特定于时间的代码,从而促进了 InfluxDB 的功能,同时使 InfluxDB 更容易与基于 FDAP 堆栈或其组件构建的其他解决方案互操作。

列式数据库

使用 Arrow 作为数据表示层,使我们能够将 InfluxDB 构建为列式数据库。这是一个关键的进步,因为它是从 1.x/2.x 版本开始的重大转变。我们 选择列式方法的原因之一 是因为它有助于更好地进行数据压缩。列式方法还使我们能够重新思考我们的数据模型。我们简化了数据模型,以便每个测量将数据组合在一起,而不是将其分成单独的时间序列。这意味着数据库在摄取时需要做的工作更少,因此可以更快地摄取数据。

压缩

列式框架使得按列压缩数据变得更容易。这本身就是一个巨大的提升。我们将此与 Apache Parquet 作为我们的数据持久化格式相结合。Parquet 旨在与列式数据一起工作,并提供高数据压缩率。因此,一旦数据进入 Parquet 文件,我们就可以进一步压缩它。

结果

如果您跳过“如何”部分直接查看我们所有辛勤工作的成果,这无可厚非。

一开始,我们希望消除阻止 InfluxDB 处理全方位时间序列工作负载的瓶颈。这意味着解决基数问题,这意味着数据库需要能够实时摄取和查询大量数据,而不会影响性能。

摄取

为了实现这一目标,我们重组了数据库,其中包括分离计算和存储,以使其可以独立扩展。我们简化了数据摄取过程,使其使用更少的资源,并且不依赖于磁盘索引。事实上,v3.0 的数据摄取吞吐量比以前的开源版本高 45 倍

存储和压缩

一旦所有数据都进入 InfluxDB,它会将新鲜且经常查询的数据保存在热存储层中。较旧的数据以 Apache Parquet 文件的形式进入冷存储层。得益于列式格式和压缩友好的 Parquet 格式,InfluxDB 3.0 实现了高比率压缩。这意味着您可以在更少的空间中存储更多的高保真数据。

对于依赖历史分析的用例,这是一个巨大的优势,因为您无需在分析完整性和存储成本之间做出选择。对于冷存储层,我们使用低成本的云存储,如 Amazon S3。当我们结合所有这些因素时,结果可能是 90%+ 的成本节省

查询

因此,在这一点上,我们可以摄取大量数据并以经济高效的方式存储它。现在我们只需要能够查询这些数据并对其进行分析。对于查询方面,我们倾向于使用 Apache DataFusion,这是一个用 Rust 构建的先进查询引擎,它使用 Arrow 作为其内存模型。简而言之,它真的很快,并且与数据库的其余部分配合良好。DataFusion 的另一个优势是它允许我们构建对 SQL 的原生支持,这是多年来许多用户要求的。SQL 支持不仅降低了许多人的入门门槛,而且 DataFusion 的极速性能帮助 InfluxDB 3.0 交付实时结果。

数据可视化

拼图的最后一块是数据分析和可视化。在 3.0 版本中,我们希望回到专注于核心数据库。与其将我们的资源投入到定制的可视化工具中,我们认为利用其他一流的工具更有意义。换句话说,我们没有让这个版本的 InfluxDB 尝试做所有事情,而是专注于集成和互操作性。它与 Grafana此处 也有)进行了原生集成,并且可以连接到 Apache SuperSet 和 Tableau,以及其他工具的集成也在积极开发中。

展望未来

基于开源构建也有助于其他集成,例如与人工智能 (AI) 和机器学习 (ML) 解决方案的集成。“真实世界”的 AI 工具(与生成式 AI 工具不同)通常依赖于时间序列数据。这些解决方案推动了工业运营的自动化和预测模型,使其更高效和有效。与此同时,这些工具需要大量数据来训练其模型,而时间序列数据的量和速度使其成为关键来源。InfluxDB 充当数据源、AI 模型和最终用户分析之间的中介,通过管理该数据并使其实时可用于 AI/ML 工具。

总结

为了强调这一点,查看这些基准,比较 InfluxDB 3.0 与以前的开源版本。与我们自己——已经是领先地位——的产品相比,速度和性能的提升非常显着。

随着时间序列数据在各个行业和领域变得越来越重要,产生的大量数据需要一种解决方案,该解决方案可以跟上真实世界的步伐,实时运行,而不会牺牲性能。InfluxDB 3.0 就是这种解决方案。最棒的是什么?3.0 版本仅仅是个开始;它只会变得越来越好。

使用 InfluxDB 迈出时间序列飞跃,立即开始构建一些令人惊叹的东西.