开始使用InfluxDB的JavaScript API
作者:社区 / 开发者
2024年10月1日
导航至
时间序列数据库旨在存储和分析在指定时间点收集的数据。它们对于处理大量持续生成数据的应用程序至关重要,例如物联网(IoT)设备、系统监控和金融系统。
InfluxDB是一个开源的时间序列数据库,以其卓越的性能和可扩展性而闻名,由于能够管理大量带时间戳的数据而受到欢迎。InfluxDB API提供了一个与数据库交互的编程接口,允许开发者执行各种任务,如创建数据库、写入和查询数据。
本文将为您提供对InfluxDB API的全面理解,引导您通过设置InfluxDB和使用客户端库有效与之交互的过程。在本文结束时,您应该对如何使用InfluxDB API进行时间序列数据管理有很强的掌握。
先决条件
要跟随本教程,您必须满足以下要求:
基础知识
- JavaScript和Node.js的基础知识,因为本教程使用Node.js编写服务器端代码。
- Express基础知识,包括如何设置服务器、发出请求和管理路由。
- 了解时间序列数据的基本知识,包括其特性和常见用例,以便您能够理解数据在特定情境下的含义。
软件要求
- 已安装Node.js。您可以在终端中运行node -v和npm -v来验证安装。否则,请从nodejs.org下载。
- 使用npm在终端中运行npm install express来安装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 Cloud网站以设置账户。如果您已有账户,请使用现有凭据登录。
2. 登录后,如果您还没有组织,请创建一个。
3. 之后,您将进入资源中心。
4. 创建一个存储时间序列数据的存储桶。InfluxDB中的存储桶类似于传统RDBMS系统中的数据库。为此,首先在仪表板上点击“管理数据库与安全”。
5. 然后,点击下拉菜单中的“转到存储桶”按钮。这会将您带到存储桶菜单。一旦到达那里,请点击屏幕右侧的“创建存储桶”按钮。
6. 在对话框中,为您的存储桶提供一个合适的名称,然后点击“创建。” 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客户端并传递所需的host、token和database。
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文件中添加一个start脚本。
"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的最佳性能是必要的。了解度量、标签和字段的特点很重要。为了实现高效的数据检索,在设计数据模型时考虑查询模式。此外,建立合适的保留策略以控制数据生命周期和存储。
写入数据
优化数据摄入对于最大限度地发挥InfluxDB的潜力至关重要。在单个请求中发送多个数据点(批量写入)可以大大提高效率。考虑压缩以减少网络流量和存储需求。应优先考虑健壮的错误处理方法以避免写入过程中的数据丢失。
读取数据
高效的数据检索对于从您的时间序列数据中提取价值至关重要。使用InfluxQL创建有效的查询。创建适当的索引可以显着提高查询性能,缓存方法可以最小化数据库负载并提高响应时间。
API使用
InfluxDB API优先考虑安全和性能。使用强认证和权限技术来保护您的数据库。实施速率限制可以防止API滥用。适当的错误管理有助于开发弹性的应用程序。
结论
InfluxDB是处理时序数据的有力工具,其API允许定制数据库交互。理解数据建模的基本原理、编写高效的查询以及遵循最佳实践将使您能够充分利用InfluxDB。
请记住,有效的数据管理对于从时序数据中提取有价值的见解至关重要。通过精心规划和优化,您可以创建强大且可扩展的应用程序,充分利用InfluxDB的功能。
本文由Vincent Chosen撰写。Vincent是一位网页开发人员和技术作家。他对JavaScript、ReactJS、NextJS、React Native、Nodejs和数据库有精通的知识。除了编码,Vincent喜欢下棋,并与其他开发人员讨论技术相关的话题。