开始使用InfluxDB的JavaScript API

导航至

时间序列数据库旨在存储和分析在指定时间点收集的数据。它们对于处理大量持续生成数据的应用程序至关重要,例如物联网(IoT)设备、系统监控和金融系统。

InfluxDB是一个开源的时间序列数据库,以其卓越的性能和可扩展性而闻名,由于能够管理大量带时间戳的数据而受到欢迎。InfluxDB API提供了一个与数据库交互的编程接口,允许开发者执行各种任务,如创建数据库、写入和查询数据。

本文将为您提供对InfluxDB API的全面理解,引导您通过设置InfluxDB和使用客户端库有效与之交互的过程。在本文结束时,您应该对如何使用InfluxDB API进行时间序列数据管理有很强的掌握。

先决条件

要跟随本教程,您必须满足以下要求:

基础知识

  1. JavaScript和Node.js的基础知识,因为本教程使用Node.js编写服务器端代码。
  2. Express基础知识,包括如何设置服务器、发出请求和管理路由。
  3. 了解时间序列数据的基本知识,包括其特性和常见用例,以便您能够理解数据在特定情境下的含义。

软件要求

  1. 已安装Node.js。您可以在终端中运行node -v和npm -v来验证安装。否则,请从nodejs.org下载。
  2. 使用npm在终端中运行npm install express来安装Express。Express是一个灵活的Node.js框架。
  3. 使用Postman测试API请求。

A pink and blue text
Description automatically generated

InfluxDB API概述

InfluxDB API提供了一种程序化的方式与InfluxDB数据库交互。它是一套规则和协议,使应用程序能够与InfluxDB通信并执行各种任务。

InfluxDB API提供了以下基本功能

  • 写入数据:将带时间戳的数据发送到数据库。
  • 读取数据:根据指定的查询和时间范围检索数据。
  • 管理数据库:创建、删除和更新数据库。
  • 管理用户和组织:控制数据库访问。
  • 执行管理任务:管理保留策略、连续查询和数据库的各种配置。

API通常使用HTTP请求与InfluxDB交互,响应以JSON格式进行格式化,使其与各种编程语言和平台兼容。InfluxDB 3.0提供高级功能,包括强大的API和客户端库,使高效集成和管理时间序列数据变得容易。

设置InfluxDB 3.0

要开始使用InfluxDB 3.0,您必须安装、配置并启动服务。本节将指导您完成确保InfluxDB设置顺利运行的步骤。

  1. 访问InfluxDB Cloud网站以设置账户。如果您已有账户,请使用现有凭据登录。

Signup 2. 登录后,如果您还没有组织,请创建一个。

Organization 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应用程序中有深刻的理解。

  1. 通过在终端运行以下命令初始化一个新的Node.js项目
    mkdir influx-app-node
    cd influx-node-app
    npm init -y
  2. 安装TypeScript和Node.js的类型定义。
    npm install -g typescript
    npm install --save-dev @types/node
  3. 初始化TypeScript配置。
    npx tsc --init
  4. 安装用于查询和写入数据的JavaScript客户端库。
    npm install --save @influxdata/influxdb3-client dotenv
  5. 在您的项目根目录中创建一个.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"
  6. 创建一个app.ts文件并使用以下代码行导入dotenv和InfluxDB客户端
    import * as dotenv from "dotenv";
    import { InfluxDBClient, Point} from '@influxdata/influxdb3-client'
  7. 配置dotenv包。
    dotenv.config();
  8. 读取所有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;
  9. 初始化InfluxDB客户端并传递所需的host、token和database。
    const client = new InfluxDBClient({host, token, database})
  10. 写入数据库。
    const line = `stat,unit=temperature avg=20.5,max=45.0`
    await client.write(line, database, organization)
  11. 查询数据库并在控制台中输出查询结果。
    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}`)
    }
  12. 关闭客户端及其所有资源。
    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()

如何运行项目

  1. 向package.json文件中添加一个start脚本。
    "scripts": {
      "test": "echo \"Error: no test specified\" && exit 1",
    "start": "node app.js"
    },
  2. 运行以下命令
    npx tsc 
    npm start

运行这些命令后,您应该看到查询结果。

avg is 20.5
max is 45

A close-up of a sign Description automatically generated

InfluxDB API使用的最佳实践

遵循最佳实践将有助于优化您的InfluxDB实现的性能和效率。

数据建模

有效的数据建模对于InfluxDB的最佳性能是必要的。了解度量、标签和字段的特点很重要。为了实现高效的数据检索,在设计数据模型时考虑查询模式。此外,建立合适的保留策略以控制数据生命周期和存储。

写入数据

优化数据摄入对于最大限度地发挥InfluxDB的潜力至关重要。在单个请求中发送多个数据点(批量写入)可以大大提高效率。考虑压缩以减少网络流量和存储需求。应优先考虑健壮的错误处理方法以避免写入过程中的数据丢失。

读取数据

高效的数据检索对于从您的时间序列数据中提取价值至关重要。使用InfluxQL创建有效的查询。创建适当的索引可以显着提高查询性能,缓存方法可以最小化数据库负载并提高响应时间。

API使用

InfluxDB API优先考虑安全和性能。使用强认证和权限技术来保护您的数据库。实施速率限制可以防止API滥用。适当的错误管理有助于开发弹性的应用程序。

结论

InfluxDB是处理时序数据的有力工具,其API允许定制数据库交互。理解数据建模的基本原理、编写高效的查询以及遵循最佳实践将使您能够充分利用InfluxDB。

请记住,有效的数据管理对于从时序数据中提取有价值的见解至关重要。通过精心规划和优化,您可以创建强大且可扩展的应用程序,充分利用InfluxDB的功能。

本文由Vincent Chosen撰写。Vincent是一位网页开发人员和技术作家。他对JavaScript、ReactJS、NextJS、React Native、Nodejs和数据库有精通的知识。除了编码,Vincent喜欢下棋,并与其他开发人员讨论技术相关的话题。