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 安装 Express,方法是在终端中运行 `npm install 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 云 网站以设置帐户。如果您已经有帐户,请使用您现有的凭据登录。

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

Organization 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 应用程序中有一个扎实的理解。

  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 客户端并传递所需的主机、令牌和数据库。
    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 文件。
    "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 性能至关重要。理解 measurements、tags 和 fields 的细微差别非常重要。为了实现高效的数据检索,在设计数据模型时请考虑查询模式。此外,建立合适的保留策略以控制数据生命周期和存储。

写入数据

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

读取数据

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

API 使用

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

结论

InfluxDB 是一个处理时间序列数据的强大工具,其 API 允许自定义数据库交互。理解数据建模、编写高效查询以及遵循最佳实践的基础知识将使您能够充分利用 InfluxDB。

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

这篇文章由 Vincent Chosen 撰写。Vincent 是一名 Web 开发人员和技术作家。他精通 JavaScript、ReactJS、NextJS、React Native、Nodejs 和数据库。除了编码之外,Vincent 还喜欢下棋并与其他开发人员讨论技术相关的话题。