连接InfluxDB 3.0的两种方法
作者:Jessica Wachtel / 产品,开发者
2023年5月26日
导航至
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驱动程序。该驱动程序是围绕Flight SQL客户端的轻量级包装,用Go编写。
在您查询 InfluxDB 之前,必须使用数据源名称(DSN)配置 FlightSQL 驱动程序。构建 DSN 有许多方法,本博客文章的剩余部分将重点介绍两种与 Flight SQL 连接的方式——使用 usql
CLI 和程序化方式。要使用 FlightSQL 驱动程序与 InfluxDB,现在就注册您的 免费云账户。
使用 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"[¶m1=value1&...¶mN=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=5s
)设置 timeout
参数。这可以防止应用程序在查询时间过长或后端服务中断时陷入无限超时。
tls
tls
参数启用并自定义传输层安全性设置。参数的特殊值包括
-
disabled
或false
– 这将禁用服务器连接的 TLS。在这种情况下,忽略所有其他设置。 -
enabled
或true
– 这将强制服务器连接使用 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 3.0 概述。要开始使用,请注册您的免费 InfluxDB 云账户。