InfluxDB云服务,由IOx驱动,为何对我意义重大

导航至

在我职业生涯的某些时刻,我参与过一些项目,这些项目在发布时都非常有意义,因为我们构建并交付了一些非常新且特别的东西。InfluxDB Cloud(以下简称为“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 项目的上游库允许用户查询大量数据,高效地将它们传输到客户端,并以有趣的方式操作这些数据。

对我来说,最令人兴奋的是,Python 的箭头库 pyarrow 具有内置的 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 数据的方式以获得这些好处。

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

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

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

在大多数数据库中,这些变化是非常破坏性的,因为您必须部署模式更改来处理新数据。这些模式更新可能是劳动密集型的且具有风险。InfluxDB 一直通过“写入时模式”处理这个问题。这意味着您只需用新的模式写入数据,InfluxDB 就会在幕后处理这些更改。InfluxDB IOx 并未改变这一功能。

在 InfluxDB 的早期版本中,用户必须意识到基数的概念以保持良好的性能。InfluxDB IOx 完全消除了这一担忧。它存储和查询数据的方式不需要任何关于基数的概念。这意味着用户可以根据他们思考数据的方式以及数据收集的方式创建模式,而无需担心查询会变慢!

每段旅程都是从第一步开始的

这次发布只是 InfluxDB IOx 的起点。我们已经在努力进行下一步工作。这包括:

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

  2. 快速 InfluxQL。我们正在将本机 InfluxQL 支持集成到 DataFusion。这意味着以前 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 引擎扩展到更多区域和云服务提供商。