开发 InfluxDB 3.0 时选择客户端库

导航到

我们经常被问到的一个问题是“我应该使用哪个客户端库与 InfluxDB 3.0 一起使用?”

这个问题看起来可能很简单,但在决定使用哪个客户端库来开发写入和查询 InfluxDB 应用程序时可能会变得复杂。有众多选项可供选择,而答案可能取决于以下标准

  • 你当前使用或过去使用过的 InfluxDB 版本
  • 你寻找的 API 类型(查询、写入、管理)
  • 你想要使用的查询语言(SQL、InfluxQL、Flux)

今天,有三种版本的 InfluxDB 客户端库可供选择

  • v1 客户端库
  • v2 客户端库
  • v3 轻量级客户端库

起初,这似乎是一个简单的答案。与 InfluxDB 1.x 使用 v1 客户端库;与 InfluxDB 2.x 使用 v2 客户端库;与 InfluxDB 3.0 使用 v3 轻量级客户端库,对吧?嗯,有点,有点不对,可能不对,也许吧?

好吧,你可能认为,与其根据版本做出决定,不如根据你喜欢的查询语言来决定。换句话说,如果你想使用 InfluxQL,使用 v1 客户端库;如果你想使用 Flux,使用 v2 客户端库;如果你想使用 SQL,使用 v3 轻量级客户端库?这个说法也有一定的准确性,但在所有情况下都不完全正确。

v3 轻量级客户端库

我们称 v3 客户端库为“轻量级”,因为它们只实现了大多数客户使用的两个功能:查询和写入。我们专注于客户最常用的五种与 InfluxDB 一起使用的语言:Python、Golang、Java、JavaScript 和 C#。

v1 和 v2 API 还提供了管理 API(创建数据库、设置保留期等)。InfluxDB 3.0 将数据平面和控制平面工具分开,因此你可以在 InfluxDB 3.0 Cloud UI 中执行管理功能(如果使用 InfluxDB Cloud Serverless)或在 influxctl 命令行工具中执行(如果使用 InfluxDB Cloud Dedicated 或 InfluxDB 集群)。

除非你的应用程序依赖于管理 API,否则轻量级客户端库应该就足够了。

对于尚未使用v1或v2客户端库编写应用程序的新InfluxDB客户,v3轻量级客户端库是最好的选择。

然而,这并不是您的唯一选择。您实际上可以选择“以上皆非”,并使用Apache Arrow Flight进行查询,以及REST API进行写入。

Apache Arrow Flight库

查询InfluxDB 3.0的一个选项是使用Apache Arrow Flight框架。InfluxDB 3.0利用了Apache Arrow和Apache Arrow生态系统(Arrow,DataFusion,Flight,Flight SQL,Parquet)。这意味着您可以使用任何Apache Arrow Flight客户端通过gRPC查询InfluxDB。v3轻量级客户端库也使用Arrow Flight,所以技术上,您无论如何都在使用它。

Apache Arrow Flight是一个基于gRPC和IPC格式构建的高性能客户端-服务器框架。InfluxDB 3.0对Flight的实现允许您通过简单地更改Flight票据中的语言标志,使用SQL或InfluxQL进行查询。Flight使用Arrow内存中的列式数据格式。当您通过Flight检索数据时,您会得到类似于pandas DataFrame的列式数据,您可以使用pyarrow和pandas等第三方工具进行高效查询、分析和转换,这些工具支持Python,或者使用Polars支持Python、JavaScript和Rust。

以下是您可以使用Flight库和Python做一些巧妙的事情的示例

因此,如果您决定直接使用Apache Flight(而不是使用v3轻量级客户端库),您可能会问:“Apache Flight是我唯一需要的东西吗?”在一篇没有是或否答案的博客文章中,我们再次回答:“也许”。如果您只需要查询,那么是的,Apache Flight库可能就是您唯一需要的东西。

许多客户属于这一类别,因为他们使用InfluxDB的Telegraf代理将数据(写入)写入数据库,并且他们只通过程序查询数据。但是,如果您还需要在应用程序代码中将数据写入InfluxDB,您会发现InfluxDB客户端库在写入和查询方面非常方便。

您可以使用Arrow Flight库和v1/v2/v3客户端库之一,这样您就可以简单地使用Arrow Flight进行查询,并使用v3轻量级库进行写入。但大多数情况下,使用v3轻量级客户端库是您的最佳选择,因为它们已经利用了Flight,并允许查询和写入。如前所述,v3轻量级客户端库使用Arrow Flight,它只是让使用稍微简单一些,因为您不需要学习Flight。相反,库允许您专注于InfluxDB 3.0的查询和写入功能。

关于这一点的一个额外说明:Python的Arrow Flight框架是最先进的。您会发现它比支持的其他语言更容易使用。

v1客户端库

我们的一些现有客户问:“如果我今天使用v1客户端库,当我迁移到InfluxDB 3.0平台(InfluxDB Cloud Serverless、InfluxDB Cloud Dedicated、InfluxDB Clustered或,最终,OSS 3.x)时,我需要将我的代码转换为使用v3轻量级客户端库吗?”

在几乎所有情况下,这个问题的答案是“不”。您可以继续使用v1客户端库进行InfluxQL查询和写入。在我们过去的一个阶段,我们引导客户远离v1客户端库,鼓励他们使用v2库。我们不再这样做,因为v1客户端库与InfluxDB 3.0兼容。这使得客户可以轻松升级到InfluxDB 3.0,而无需更改大量代码。

考虑v1客户端库的另一个原因是它们支持比v3更多的语言,包括C++和PHP。因此,如果您需要使用这些语言,v1客户端库可能是您的最佳选择。

v2客户端库

好的,正如我们上面所确定的,您可以使用v3轻量级客户端库、Apache Arrow Flight框架或v1客户端库与InfluxDB 3.0一起使用。但是,v2库怎么办呢?

这里事情有点复杂。v2客户端库和v2查询API(v2库使用)使用Flux查询语言。虽然我们的一些客户非常喜欢这种Influx开发的语言,但大多数客户表示他们没有时间学习一门新的查询语言,并希望我们支持SQL。虽然我们感到失望,但我们理解这一点。因此,我们开发了InfluxDB 3.0来支持SQL和我们的时序数据库查询语言InfluxQL。

v2 API在InfluxDB Cloud Dedicated以及即将推出的InfluxDB Clustered和OSS 3.0版本中不可用。这意味着当您迁移到InfluxDB 3.0时,需要使用v3轻量级客户端库、Arrow Flight框架、v1客户端库或它们的组合之一。

对于InfluxDB Cloud Serverless客户,我们可以为一些客户启用一个兼容层,在某些情况下允许v2/Flux API调用工作。然而,由于我们针对SQL和InfluxQL优化了InfluxDB 3.0,这种兼容性需要进行翻译/转换,并需要重新排序和其他操作,以确保以与先前InfluxDB版本相同的格式和顺序提供数据。

简而言之,在InfluxDB 3.0中,v2库的性能并不理想。根据数据量和查询范围,您可能会看到超时和其他异常。因此,我们只建议在您将工作负载迁移到其他库,并将您的Flux查询转换为SQL或InfluxQL时这样做。

在所有这些之后仍然感到困惑或不清楚?请参考以下推荐表

客户类型 产品 推荐语言 推荐查询库 推荐写入库(如果不使用Telegraf) 推荐管理工具
首次使用InfluxDB的新客户 InfluxDB Cloud Serverless 使用SQL或InfluxQL 使用v3轻量级客户端库;Apache Arrow Flight也是另一种选择 使用v3轻量级客户端库 使用Cloud UI
InfluxDB Cloud Dedicated,InfluxDB Clustered,OSS 3.0 使用SQL或InfluxQL 使用v3轻量级客户端库;Apache Arrow Flight也是另一种选择 使用v3轻量级客户端库 使用influxctl命令行工具
使用InfluxQL和v1客户端库的现有客户 InfluxDB Cloud Serverless 使用InfluxQL 对于现有应用程序,使用v1客户端库;考虑v3轻量级客户端库或Apache Arrow Flight用于未来应用程序 对于现有应用程序,使用v1客户端库;考虑v3轻量级客户端库用于未来应用程序 使用Cloud UI
InfluxDB Cloud Dedicated,InfluxDB Clustered,OSS 3.0 使用InfluxQL 对于现有应用程序,使用v1客户端库;考虑v3轻量级客户端库或Apache Arrow Flight用于未来应用程序 对于现有应用程序,使用v1客户端库;考虑v3轻量级客户端库用于未来应用程序 使用influxctl命令行工具
使用InfluxQL和v2客户端库的现有客户 InfluxDB Cloud Serverless 使用InfluxQL或SQL 仅为了短期兼容性(如果您无法避免),使用v2客户端库;尽快迁移到v3轻量级客户端库、Arrow Flight或v1客户端库 仅为了短期兼容性(如果您无法避免),使用v2客户端库;尽快迁移到v3轻量级客户端库、Arrow Flight或v1客户端库 使用Cloud UI
使用InfluxQL和v2客户端库的现有客户 InfluxDB Cloud Dedicated,InfluxDB Clustered,OSS 3.0 使用InfluxQL或SQL 请使用 v3 轻量级客户端库、Arrow Flight 或 v1 客户端库;v2 客户端库和 v2 API 不可用。 请使用 v3 轻量级客户端库、Arrow Flight 或 v1 客户端库;v2 客户端库和 v2 API 不可用。 使用influxctl命令行工具

您可以在以下位置找到 v3 轻量级客户端库:

关于 Python v3 客户端库的深入了解,请查看同事 Jay Clifford 的这篇博客:查看博客