InfluxDB JavaScript API 入门
作者: 社区 / 开发者
2024 年 10 月 01 日
导航至
时间序列数据库旨在存储和分析在指定时间点收集的数据。它们对于处理大量持续生成数据的应用程序至关重要,例如 物联网 (IoT) 设备、系统监控器和金融系统。
InfluxDB 是一款开源时间序列数据库,以其出色的性能和可扩展性而闻名,因其管理大量带时间戳数据的能力而广受欢迎。InfluxDB API 提供了与数据库交互的编程接口,允许开发人员执行各种任务,例如创建数据库以及写入和查询数据。
本文将全面介绍 InfluxDB API,指导您完成设置 InfluxDB 以及使用客户端库有效与之交互的过程。在本文结束时,您应该对如何使用 InfluxDB API 进行时间序列数据管理有扎实的掌握。
先决条件
要学习本教程,您必须满足以下要求:
基本知识
- JavaScript 和 Node.js 的基本知识,因为本教程使用 Node.js 编写服务器端代码。
- Express 的基本知识,包括如何设置服务器、发出请求和管理路由。
- 时间序列数据、其特征和常见用例的基本知识,以便您可以理解上下文中的数据。
软件要求
- 已安装 Node.js。您可以通过在终端中运行 `node -v` 和 `npm -v` 来验证安装。否则,请从 nodejs.org 下载。
- 使用 npm 安装 Express,方法是在终端中运行 `npm install express`。Express 是一个灵活的 Node.js 框架。
- Postman 用于测试 API 请求。
InfluxDB API 概述
InfluxDB API 提供了一种以编程方式与 InfluxDB 数据库交互的方法。它是一组规则和协议,使应用程序能够与 InfluxDB 通信并执行各种任务。
InfluxDB API 提供以下基本功能
- 写入数据:将带时间戳的数据发送到数据库。
- 读取数据:根据指定的查询和时间范围检索数据。
- 管理数据库:创建、删除和更新数据库。
- 管理用户和组织:控制数据库访问。
- 执行管理任务:管理保留策略、连续查询和各种数据库配置。
API 通常使用 HTTP 请求与 InfluxDB 交互,响应以 JSON 格式格式化,使其与各种编程语言和平台兼容。InfluxDB 3.0 提供了高级功能,包括强大的 API 和客户端库,使其易于集成和高效管理时间序列数据。
设置 InfluxDB 3.0
要开始使用 InfluxDB 3.0,您必须安装、配置和启动该服务。本节将指导您完成这些步骤,以确保您的 InfluxDB 设置顺利运行。
- 访问 InfluxDB 云 网站以设置帐户。如果您已经有帐户,请使用您现有的凭据登录。
2. 登录后,如果您还没有组织,请创建一个组织。
3. 之后,您将被带到资源中心。
4. 创建一个存储时间序列数据的 Bucket。InfluxDB 中的 Bucket 类似于传统 RDBMS 系统中的数据库。为此,首先单击仪表板上的“管理数据库和安全”。
5. 然后,单击下拉菜单中的“转到 Bucket”按钮。这将带您进入 Bucket 菜单。到达那里后,单击屏幕右侧的“创建 Bucket”按钮。
6. 在对话框中,为您的 Bucket 提供一个合适的名称,然后单击“创建”。
7. 接下来,将生成一个新的 API 令牌。此令牌将用于验证 API 请求。安全地存储此令牌,因为它提供了对您的 InfluxDB 实例的访问权限。为此,请导航回“资源中心”仪表板上的“管理数据库和安全”,然后单击“转到令牌”以访问令牌菜单。
8. 在令牌菜单中,单击“生成 API 令牌”。
请务必保存您的 API 令牌,因为您将在下一节中需要它。
InfluxDB 3.0 Node.js 客户端库实践教程
本实践教程将教您如何使用 InfluxDB 3.0 Node.js 客户端库。这包括配置您的开发环境、将数据写入 InfluxDB 以及从中查询数据。在本节结束时,您将对如何将 InfluxDB 集成到 Node.js 应用程序中有一个扎实的理解。
- 通过在终端中运行以下命令来初始化一个新的 Node.js 项目
mkdir influx-app-node cd influx-node-app npm init -y
- 安装 TypeScript 和 Node.js 的类型定义。
npm install -g typescript npm install --save-dev @types/node
- 初始化 TypeScript 配置。
npx tsc --init
- 安装用于查询和写入数据的 JavaScript 客户端库。
npm install --save @influxdata/influxdb3-client dotenv
- 在项目的根文件夹中创建一个 .env 文件,并添加以下变量
INFLUX_HOST=https://us-east-1-1.aws.cloud2.influxdata.com INFLUX_TOKEN="add your API token here" INFLUX_BUCKET="add your bucket name here" INFLUX_ORG="add your organization name here"
- 创建一个 app.ts 文件,并通过使用以下代码行导入 dotenv 和 InfluxDB 客户端
import * as dotenv from "dotenv"; import { InfluxDBClient, Point} from '@influxdata/influxdb3-client'
- 配置 dotenv 包。
dotenv.config();
- 读取所有 env 变量。
const host = process.env.INFLUX_HOST as string; const token = process.env.INFLUX_TOKEN as string; const database = process.env.INFLUX_BUCKET as string; const organization = process.env.INFLUX_ORG as string;
- 初始化 InfluxDB 客户端并传递所需的主机、令牌和数据库。
const client = new InfluxDBClient({host, token, database})
- 写入数据库。
const line = `stat,unit=temperature avg=20.5,max=45.0` await client.write(line, database, organization)
- 查询数据库并控制台查询结果。
const query = ` SELECT * FROM "stat" WHERE time >= now() - interval '5 minute' AND "unit" IN ('temperature') ` const queryResult = await client.query(query, database) for await (const row of queryResult) { console.log(`avg is ${row.avg}`) console.log(`max is ${row.max}`) }
- 关闭客户端及其所有资源。
client.close()
以下是完整代码
import * as dotenv from "dotenv";
import { InfluxDBClient, Point} from '@influxdata/influxdb3-client'
dotenv.config();
const host = process.env.INFLUX_HOST as string;
const token = process.env.INFLUX_TOKEN as string;
const database = process.env.INFLUX_BUCKET as string;
const organization = process.env.INFLUX_ORG as string;
async function main() {
const client = new InfluxDBClient(
{host, token, database})
//writing data
const line = `stat,unit=temperature avg=20.5,max=45.0`
await client.write(line, database, organization)
// Execute query
const query = `
SELECT *
FROM "stat"
WHERE
time >= now() - interval '5 minute'
AND
"unit" IN ('temperature')
`
const queryResult = await client.query(query, database)
for await (const row of queryResult) {
console.log(`avg is ${row.avg}`)
console.log(`max is ${row.max}`)
}
client.close()
}
main()
如何运行项目
- 将启动脚本添加到您的 package.json 文件。
"scripts": { "test": "echo \"Error: no test specified\" && exit 1", "start": "node app.js" },
- 运行以下命令
npx tsc npm start
运行这些命令后,您应该看到查询结果。
avg is 20.5
max is 45
使用 InfluxDB API 的最佳实践
遵循最佳实践将帮助您优化 InfluxDB 实施的性能和效率。
数据建模
有效的数据建模对于最佳 InfluxDB 性能至关重要。理解 measurements、tags 和 fields 的细微差别非常重要。为了实现高效的数据检索,在设计数据模型时请考虑查询模式。此外,建立合适的保留策略以控制数据生命周期和存储。
写入数据
优化数据摄取对于最大限度地发挥 InfluxDB 的潜力至关重要。在单个请求中发送多个数据点(批量写入)可以大大提高效率。考虑压缩以减少网络流量和存储需求。应优先考虑强大的错误处理方法,以避免写入过程中的数据丢失。
读取数据
高效的数据检索对于从时间序列数据中提取价值至关重要。使用 InfluxQL 创建有效的查询。创建适当的索引可以显着提高查询性能,而缓存方法可以最大限度地减少数据库负载并提高响应时间。
API 使用
InfluxDB API 优先考虑安全性和性能。使用强大的身份验证和权限技术来保护您的数据库。实施 速率限制 可以防止 API 滥用。适当的错误管理有助于开发弹性应用程序。
结论
InfluxDB 是一个处理时间序列数据的强大工具,其 API 允许自定义数据库交互。理解数据建模、编写高效查询以及遵循最佳实践的基础知识将使您能够充分利用 InfluxDB。
请记住,有效的数据管理对于从时间序列数据中提取有价值的见解至关重要。通过仔细的规划和优化,您可以创建强大且可扩展的应用程序,充分利用 InfluxDB 的功能。
这篇文章由 Vincent Chosen 撰写。Vincent 是一名 Web 开发人员和技术作家。他精通 JavaScript、ReactJS、NextJS、React Native、Nodejs 和数据库。除了编码之外,Vincent 还喜欢下棋并与其他开发人员讨论技术相关的话题。