连接 InfluxDB 3.0 的两种方法

导航至

与之前的版本相比,InfluxDB 3.0 具有 10 倍的存储压缩率和性能提升,支持无限基数数据,并提供闪电般快速的 SQL 查询。这些提升得益于我们基于 Apache Arrow 构建的全新数据库引擎。Apache Arrow 处理大量的列式数据,并提供广泛的工具集来有效地操作这些数据。Arrow 拥有丰富的生态系统,包括 Pandas 和 Neural Prophet 的库,Grafana 和 Apache Superset 的可视化,并且支持多种编程语言。

Flight SQL 提供了一个高性能的 SQL 接口,用于使用 Arrow Flight RPC 框架处理数据库。它允许更快的数据访问和更低的延迟,而无需将数据转换为 Arrow 格式。这意味着在数据可用于查询或分析之前,必须使用 Flight SQL 客户端。为了方便 Flight SQL 和客户端之间的访问,开源社区创建了 FlightSQL 驱动程序。该驱动程序是 Go 语言编写的 Flight SQL 客户端的轻量级包装器。

在您可以查询 InfluxDB 之前,您必须使用数据源名称 (DSN) 配置 FlightSQL 驱动程序。构建 DSN 的方法有很多,本博文的其余部分重点介绍使用 Flight SQL 连接的两种方法 – 使用 usql CLI 和以编程方式连接。要将 InfluxDB 与 FlightSQL 驱动程序一起使用,请立即注册您的免费云账户

使用 sql CLI 与 InfluxDB 交互

usql CLI 是一个通用的交互式 SQL 客户端,允许您针对 InfluxDB 和其他 SQL 数据库发出 SQL 查询。在进行任何查询之前,DSN 配置是强制性的。

如果您没有安装 CLI,您可以从 usql 发布页面下载二进制文件。您需要 v0.14.3 或更新版本才能支持 Flight SQL。将 DSN 链接添加到 CLI 会创建到 Flight SQL 的连接。

使用 InfluxDB 时,DSN 连接链接的格式如下所示

flightsql://"address:port"?token="your-token"[&param1=value1&...&paramN=valueN]

port 不是可选的,默认为 443。有关如何使用 usql 执行查询和执行其他功能的更多详细信息,请查看他们的 GitHub 项目页面

以编程方式查询 InfluxDB

以编程方式构建 DSN 需要在开始之前添加其他功能。请在您的计算机上安装以下内容

  • Go 1.17+

  • FlightSQL 库安装 go get -u github.com/apache/arrow/go/v12/arrow/flight/flightsql

以下代码是以编程方式创建 Flight SQL 连接的示例

package main

import (
        	"database/sql"
        	"log"
        	"time"

        	"github.com/apache/arrow/go/v12/arrow/flight/flightsql"
)

func main() {
        	config := flightsql.DriverConfig{
        	Address: "localhost:12345",
        	Tls:  “enabled”,
        	Token:   "your token",
        	Timeout: 10 * time.Second,
        	Params: map[string]string{
       	"my-custom-parameter": "foobar",
        	},
        	}
        	db, err := sql.Open("flightsql", config.DSN())
        	if err != nil {
                    	log.Fatalf("open failed: %v", err)
        	}
        	defer db.Close()

        	...
}

此示例使用 DriverConfig 结构体为用户构建 DSN。用户可以自定义结构体值以适应其连接的要求。这被传递到 SQL 连接,一旦连接,用户就可以使用数据库连接来完成其所需的任务。

DSN 配置

一些其他配置项包括以下常见的区分大小写的参数

token

InfluxDB 实例需要不同安全级别的访问令牌。我们的文档提供了有关如何创建令牌的详细信息。

timeout

FlightSQL 驱动程序默认为无限超时。将 timeout 参数设置为持续时间字符串(例如 <code class=”language-sql”code class=”language-sql”>timeout=5s</code>)作为安全预防措施。这可以防止应用程序在查询时间过长或后端关闭时陷入无限超时。

tls

tls 参数启用和自定义传输层安全设置。参数的特殊值包括

  • disabledfalse – 这将禁用服务器连接的 TLS。在这种情况下,所有其他设置都将被忽略。

  • enabledtrue – 这将强制服务器连接使用 TLS。在这种情况下,将使用所有受信任 CA 的系统设置。

  • skip-verify – 这是一个安全风险。请勿使用!这将为服务器连接启用 TLS,但不验证服务器证书。

真实世界示例

本地连接到 InfluxDB 与连接到云中的 InfluxDB 需要不同的参数。云连接需要 bucket-name 规范,而本地连接需要 namespace-name

云连接

'flightsql://us-east-1-1.aws.cloud2.influxdata.com:443?timeout=10s&bucket-name=comany-sensors&token=xxxxxxxxxxxxxxxxxxx====&tls=enabled'

本地连接

'flightsql://127.0.0.1:8082?timeout=10s&iox-namespace-name=company_sensors'

结论

FlightSQL 驱动程序 GitHub 页面分享了更多关于连接的详细信息,但它们更通用,因为此连接适用于任何用 Go 编写的数据库。这些说明不是 InfluxDB 特定的。

您不需要用 Go 编写整个项目文件即可连接到 FlightSQL 驱动程序。要查看驱动程序的实际效果,请查看我们的社区项目 Plant Buddy源代码详细介绍了如何在 Python 中连接到 FlightSQL 驱动程序,包括 SQL 查询,并将数据转换为 Pandas DataFrame。

了解 InfluxDB 3.0 的其他令人兴奋的功能和优化。要开始使用,请注册您的免费 InfluxDB Cloud 账户。