为什么 InfluxDB Cloud (由 IOx 提供支持) 对我来说意义重大

导航至

在我的职业生涯中,我不时参与一些具有戏剧性发布的项目,在这些项目中,我们构建和交付了一些非常新颖和特别的东西。InfluxDB Cloud (由 IOx 提供支持) (以下简称“InfluxDB IOx”) 的发布绝对符合这些标准。我想解释一下我对这次发布的个人看法,以及为什么我如此兴奋能够参与其中。

有关构建这个新数据库引擎的动机和技术的更多信息,请查看以下博客文章:此处此处此处

首先,也是最重要的,我们设计 InfluxDB IOx 的目的是为了快速处理大型时间序列工作负载。这意味着:

  1. 针对数据前沿的快速查询。通常(但不总是),这等同于最近两小时的数据,尽管所有查询都应显示出显著的性能提升。

  2. 海量数据的快速摄取。

  3. 尽可能小的磁盘占用空间。

用户不再需要对其数据做出妥协,并且可以根据需要写入尽可能多的数据,并高效地查询它。作为一名技术专家和产品经理,有什么比交付用户最想要的东西更令人兴奋的呢?

扩展的开源方法

至少自 2008 年以来,我一直是开源贡献者和社区成员。InfluxData 对开源的承诺是我被这家公司吸引的核心因素之一。InfluxData 认为自己是一家开源公司,这种信念如此坚定,以至于我们将其编码到我们的公司价值观声明中。过去,这需要公开工作并维护可供用户拾取和使用的开源软件。

Apache Arrow 项目

然而,借助 InfluxDB IOx,我们超越了仅仅为我们的项目交付代码。相反,我们正在上游工作,为 Apache Arrow 项目做出贡献,特别关注 Apache DataFusion,即 Apache Arrow 的 SQL 查询引擎。

这对开源社区意味着什么?虽然用户能够查看、修改和贡献 InfluxDB 代码总是好的,但在实践中,这效用有限。例如,如果您想构建一种不同类型的数据库,例如位置数据库怎么办?当然,您可以通过查看 InfluxDB 代码库获得一些想法,但这并不能帮助您实际构建数据库。Apache Arrow 项目从根本上改变了可能性,它为您提供了实际的组件来组装您自己的高性能数据库,以通过扩展 Apache Arrow 项目中的工作来满足您的特定需求。这种开源方法真正赋能了社区。

做既能增强公司实力,又能为更广泛的社区创造技术和经济机会的工作,对我来说是意义深远的。

拥抱标准

拥抱新兴标准意味着我们不必自己提供每一项功能。用户拥有一系列他们喜欢的工具和服务,通过避免“围墙花园”方法,我们可以与其他开发人员和公司合作,以帮助满足所有类型的用户。

SQL 查询语言

显然,SQL 不是“新兴标准”,但我们选择实施 SQL 支持的路线是。正如在其他地方详细描述的那样,IOx 使用 DataFusion 进行查询,DataFusion 使用 SQL 作为查询语言。对 DataFusion 的这项投资意味着,即使只懂一点 SQL 的人也可以在 InfluxDB 中查询时间序列数据,而 SQL 专家可以大量使用相同的数据。此外,当来自社区和其他公司的其他贡献开发人员改进 DataFusion 时,这些改进会流入 InfluxDB。

Parquet

InfluxDB IOx 将文件以 Parquet 作为本机文件格式存储。Parquet 是 Apache Arrow 项目的一部分,因此这两项技术协同工作得非常好。Parquet 文件提供了显著的数据压缩,尤其是 InfluxDB IOx 使用它们的方式。Parquet 也是一个开放标准,具有许多高质量的库来读取和写入 Parquet 文件。因此,Parquet 正在成为交换大型分析数据集的标准文件格式,无论这意味着在数据上就地运行作业,还是将其移动到服务。使用 Parquet 使依赖大型数据集的服务(例如异常检测、AI/ML、可视化等)可以轻松地与 InfluxDB IOx 协同工作,而无需耗时或计算密集型的导出步骤。

Flight SQL

Flight SQL 也是 Apache Arrow 项目中的一个标准。它是一个客户端/服务器协议,用于摄取 SQL 语句并以 Arrow 格式返回结果。任何数据库都可以自由地实施 Flight SQL。因此,通过支持少量驱动程序,Flight SQL 几乎可以支持任何仪表板、可视化或 BI 工具。

例如,我们创建了一个 Grafana 到 Flight SQL 的插件,并且正在将其贡献给 Grafana,因此任何使用支持 Flight SQL 的数据库的人都可以使用该插件。同样,我们创建了一个 Flight SQL SQLAlchemy 方言,以便任何人都可以使用它来在他们的数据库和 Apache Superset 之间进行通信。

您可以在此处找到我们贡献这些资源的仓库:

  • Grafana 到 FlightSQL 插件 此处 (等待正式纳入 Grafana 的插件库)

  • 通过我们编写的上游适配器对 Superset 的支持 此处

一个高质量的 JDBC Flight SQL 驱动程序和一个 ODBC Flight SQL 驱动程序已经存在于上游。您可以将这些驱动程序与大量工具一起使用,以解锁对您的数据的访问。如果您的团队想要使用 Tableau 或 PowerBI 等工具,他们可以使用这些已建立的驱动程序来访问 InfluxDB 中的数据。

说实话,我对我们对 Apache Superset 的支持感到特别兴奋。这是一个功能齐全的 BI/仪表板工具组合,它是 Apache 基金会的一部分。它是一个非常易于访问的 Python 代码库,并且得到了多家大型公司的良好支持。如果您还没有尝试过,我强烈建议您尝试 Superset

在 InfluxDB IOx 中查询数据

我们从头开始设计 InfluxDB IOx 以支持 SQL 查询,并使这些查询快速。但是标准 SQL 缺少一些核心时间序列功能。由于我们对 DataFusion 的投资,我们能够直接在上游实施其中一些核心时间序列函数。这不仅确保了这些函数的性能良好,而且几乎意味着 Apache Arrow 社区中的任何人都可以从中受益,甚至可以为它们贡献改进。

目前,DataFusion 中有三个特定于时间序列的函数:
date_bin() - 此函数创建数据时间窗口行,并带有聚合。

selector_first()selector_last() - 这些函数提供满足特定条件的表的第一行和最后一行。

time_bucket_gapfill() - 此函数返回窗口化数据,但如果存在缺少数据的窗口,它将填充这些空白。

Arrow 库

到目前为止,我已经讨论了 InfluxDB IOx 引擎如何利用 Apache Arrow 项目使用户能够使用熟悉的语言 (SQL) 和他们选择的工具编写特定于时间序列的查询,并且这些低延迟查询作用于数据前沿。但是 Apache Arrow 和 Flight SQL 组合带来了另一个关键优势。

请记住,Apache Arrow 旨在移动大量的列式数据,并允许工具有效地对该数据进行操作。因此,Apache Arrow 项目中的上游库允许用户查询大量数据,有效地将其带到他们的客户端,并以有趣的方式对该数据进行操作。

对我来说,最令人兴奋的方面是 pyarrow (Python arrow 库) 内置了 Pandas 支持。Pandas 是迄今为止最流行的数据操作库,被开发人员、业务分析师、AI/ML 从业者等使用。Plotly Express 和 Neural Prophet 等库只是构建在 Pandas 之上的功能丰富的库的几个示例。Python 的长期用户将欢迎 InfluxDB IOx 和这些库之间的轻松互操作性。也就是说,Arrow 提供了适用于 多种不同语言的库。

请记住,我们设计 InfluxDB IOx 的目的是快速处理大型时间序列工作负载,并且它对 Arrow 库的支持将这一目标一直延伸到您的客户端代码。

写入数据

虽然我们对 InfluxDB 进行了很多更改,但从用户的角度来看,我们没有更改数据写入 InfluxDB 的方式。这是因为我们很久以前就优化了 InfluxDB 以摄取大量时间序列数据,事实上,这仍然是一个核心差异点。您的 Telegraf 配置和行协议代码仍然可以与 InfluxDB IOx 引擎一起工作。

实际上,我们在 IOx 驱动的 InfluxDB 实例的配置中实施了一些更改,这些更改甚至可以实现更快的数据摄取和“可读时间”。但是用户无需更改他们将数据写入 InfluxDB 的方式即可获得这些好处。

最终,这意味着 InfluxDB Cloud (由 IOx 提供支持) 可以比您可能考虑用于此类工作负载的任何其他数据库更快地摄取更多数据。

更易于使用且适用于更多用例

操作时间序列数据库的运营挑战之一是您想要测量的东西可能会来来去去。例如,您的工厂车间可能会出现新的传感器类型,或者您开始观察一种新型的服务器基础设施。

对于大多数数据库,这些更改具有高度破坏性,因为您必须部署模式更改以适应新数据。这些模式更新可能既费力又危险。InfluxDB 始终通过“写入时模式”来处理此问题。这意味着您可以简单地写入具有新模式的数据,InfluxDB 会在后台为您处理更改。InfluxDB IOx 的此功能没有任何变化。

在以前版本的 InfluxDB 中,用户必须了解基数的概念才能保持良好的性能。InfluxDB IOx 完全消除了这种担忧。它存储和查询数据的方式不需要任何基数的概念。这意味着用户可以根据他们考虑数据的方式以及数据的收集方式来创建模式,而无需担心会降低查询速度!

千里之行,始于足下

对于 InfluxDB IOx 来说,这次发布仅仅是一个开始。我们已经在努力进行下一步。这包括:

  1. 优化,优化,再优化。我们已经看到了许多使 InfluxDB IOx 变得更快的机会,因此预计数据库将在未来几个月内变得越来越快。

  2. 快速 InfluxQL。我们正在 DataFusion 中实施本机 InfluxQL 支持。这意味着来自以前版本的 InfluxDB 的工作负载用户,他们使用 InfluxQL 进行查询,将能够以最少的应用程序更改获得 InfluxDB IOx 的好处。

  3. 单租户和企业版本。我们很高兴向新的多租户客户发布 InfluxDB IOx,但在今年内,您可以期待面向希望在单租户托管服务中使用 InfluxDB IOx 的客户以及希望自己管理 InfluxDB IOx 的客户的产品。

结论

InfluxDB IOx 在多方面都是真正的游戏规则改变者,我不得不承认我感到非常兴奋。这种感觉让我想起了冲浪时划到浪区的感觉。兴奋与为未知做好准备的结合真的让我感到充满活力。

除了加深 InfluxData 对开源的承诺外,它还允许在更大的工作负载上获得更好的性能,并支持您团队所有喜欢的工具。如果您是现有的 InfluxDB 用户,您将不得不稍微改变您使用 InfluxDB 的方式才能意识到这些好处,但我认为您会同意,当您将新的时间序列工作负载带到 InfluxDB IOx 时,这些好处将是巨大的。

在撰写本文时,InfluxDB IOx 是 InfluxDB Cloud 在两个特定区域中使用的引擎。在美国东部 1 区 (弗吉尼亚州) 或欧盟中部 1 区 (法兰克福) 区域注册 InfluxDB Cloud 帐户。我们计划在不久的将来将 InfluxDB IOx 引擎推广到更多区域和云提供商。