Timescale Cloud:性能、扩展、企业级

自托管产品

MST

AWS Lambda 是 Amazon Web Services (AWS) 提供的一项无服务器计算服务,允许您无需预置或管理服务器即可运行代码,并根据需要自动扩展。

本页面展示了如何将 AWS Lambda 与 Timescale Cloud 服务集成,以高效处理和存储时序数据。

要遵循本页面的步骤

在 Timescale Cloud 服务中创建一个表来存储时序数据。

  1. 连接到您的 Timescale Cloud 服务

    对于 Timescale Cloud,在 Timescale 控制台 中打开一个 SQL 编辑器。对于自托管,请使用 psql

  2. 创建一个超表来存储传感器数据

    超表 是 PostgreSQL 表,可自动按时间对您的数据进行分区。您与超表的交互方式与常规 PostgreSQL 表相同,但额外功能使管理时序数据变得更加容易。

    CREATE TABLE sensor_data (
    time TIMESTAMPTZ NOT NULL,
    sensor_id TEXT NOT NULL,
    value DOUBLE PRECISION NOT NULL
    ) WITH (
    tsdb.hypertable,
    tsdb.partition_column='time'
    );

    如果您正在自托管 TimescaleDB v2.19.3 及更早版本,请创建一个 PostgreSQL 关系表,然后使用 create_hypertable 转换它。然后通过调用 ALTER TABLE 启用 hypercore。

在 Node.js 项目中编写一个 AWS Lambda 函数,用于处理时序数据并将其插入 Timescale Cloud 服务。

  1. 初始化一个新的 Node.js 项目来存放您的 Lambda 函数

    mkdir lambda-timescale && cd lambda-timescale
    npm init -y
  2. 在您的项目中安装 PostgreSQL 客户端库

    npm install pg
  3. 编写一个将数据插入 Timescale Cloud 服务的 Lambda 函数

    创建一个名为 index.js 的文件,然后添加以下代码

    const {
    Client
    } = require('pg');
    exports.handler = async (event) => {
    const client = new Client({
    host: process.env.TIMESCALE_HOST,
    port: process.env.TIMESCALE_PORT,
    user: process.env.TIMESCALE_USER,
    password: process.env.TIMESCALE_PASSWORD,
    database: process.env.TIMESCALE_DB,
    });
    try {
    await client.connect();
    //
    const query = `
    INSERT INTO sensor_data (time, sensor_id, value)
    VALUES ($1, $2, $3);
    `;
    const data = JSON.parse(event.body);
    const values = [new Date(), data.sensor_id, data.value];
    await client.query(query, values);
    return {
    statusCode: 200,
    body: JSON.stringify({
    message: 'Data inserted successfully!'
    }),
    };
    } catch (error) {
    console.error('Error inserting data:', error);
    return {
    statusCode: 500,
    body: JSON.stringify({
    error: 'Failed to insert data.'
    }),
    };
    } finally {
    await client.end();
    }
    };

要创建一个将数据注入 Timescale Cloud 服务的 AWS Lambda 函数

  1. 将您的代码压缩成 .zip 文件

    zip -r lambda-timescale.zip .
  2. 部署到 AWS Lambda

    在以下示例中,将 <IAM_ROLE_ARN> 替换为您的 AWS IAM 凭证,然后使用 AWS CLI 为您的项目创建一个 Lambda 函数

    aws lambda create-function \
    --function-name TimescaleIntegration \
    --runtime nodejs14.x \
    --role <IAM_ROLE_ARN> \
    --handler index.handler \
    --zip-file fileb://lambda-timescale.zip
  3. 设置环境变量

    在以下示例中,使用您的 连接详细信息 将 Timescale Cloud 服务连接设置添加到您的 Lambda 函数

    aws lambda update-function-configuration \
    --function-name TimescaleIntegration \
    --environment "Variables={TIMESCALE_HOST=<host>,TIMESCALE_PORT=<port>, \
    TIMESCALE_USER=<Username>,TIMESCALE_PASSWORD=<Password>, \
    TIMESCALE_DB=<Database name>}"
  4. 测试您的 AWS Lambda 函数

    1. 调用 Lambda 函数并发送一些数据到您的 Timescale Cloud 服务

      aws lambda invoke \
      --function-name TimescaleIntegration \
      --payload '{"body": "{\"sensor_id\": \"sensor-123\", \"value\": 42.5}"}' \
      --cli-binary-format raw-in-base64-out \
      response.json
    2. 验证数据是否已在您的服务中。

      打开一个 SQL 编辑器 并检查 sensor_data

      SELECT * FROM sensor_data;

      您会看到类似以下内容

      timesensor_idvalue
      2025-02-10 10:58:45.134912+00sensor-12342.5

您现在可以无缝地将时序数据从 AWS Lambda 摄取到 Timescale Cloud。

关键词

在此页面上发现问题?报告问题 或在 GitHub 上编辑此页面