You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何优化AWS Timestream数据库及查询性能?

优化方案

1. 配置复合分区键

Timestream默认按time分区,你可以将查询中频繁用于分组的make维度设置为复合分区键的一部分,让数据按make+time的逻辑分区存储。这样查询时,Timestream可以直接定位到对应make的数据分区,避免全表扫描。

修改表结构的示例代码(创建或更新表时):

const { TimestreamWrite } = require('@aws-sdk/client-timestream-write');
const client = new TimestreamWrite({});

const updateTableParams = {
  DatabaseName: 'sampleDB',
  TableName: 'IoTMulti',
  Schema: {
    CompositePartitionKey: [
      { Type: 'DIMENSION', Name: 'make' },
      { Type: 'TIME' }
    ]
  }
};

await client.updateTable(updateTableParams);

2. 使用预聚合视图(Materialized Views)

针对这种固定维度的分组统计查询,创建预聚合视图可以预先计算并存储聚合结果,查询时直接读取视图数据,无需扫描千万级原始记录。

创建预聚合视图的SQL:

CREATE MATERIALIZED VIEW sampleDB.make_daily_count
AS SELECT 
  make, 
  COUNT(*) AS makeCount, 
  BIN(time, 1d) AS time_bin
FROM sampleDB.IoTMulti
GROUP BY make, BIN(time, 1d)
WITH DATA

后续查询时,只需从视图中聚合目标时间范围的结果:

SELECT make, SUM(makeCount) AS totalCount
FROM sampleDB.make_daily_count
WHERE time_bin BETWEEN TIMESTAMP '2021-11-30 00:00:00' AND TIMESTAMP '2022-12-30 23:59:59'
GROUP BY make

3. 缩小查询时间范围

你的查询覆盖了超过1年的数据,千万级数据下全范围扫描必然耗时。如果业务允许,尽量缩小time过滤范围,比如只查询最近30天,或者按季度分批查询后再合并结果。

4. 优化数据存储分层

从数据生成代码看,所有数据的时间范围集中在最近1天,导致大量数据堆积在内存存储(Memory Store)中。内存存储适合实时小范围查询,磁存储(Magnetic Store)针对大规模分析查询做了优化。你可以缩短内存存储保留期,让数据更快迁移到磁存储:

const updateTableParams = {
  DatabaseName: 'sampleDB',
  TableName: 'IoTMulti',
  RetentionProperties: {
    MemoryStoreRetentionPeriodInHours: 6, // 缩短为6小时
    MagneticStoreRetentionPeriodInDays: 365
  }
};

await client.updateTable(updateTableParams);

5. 查询语法优化

  • 如果业务允许接受近似统计结果,使用APPROX_COUNT_DISTINCT替代COUNT(*),该函数通过采样实现,执行效率远高于全量计数。
  • 确保time过滤条件使用标准TIMESTAMP格式,避免隐式类型转换带来的性能损耗。

内容的提问来源于stack exchange,提问作者Chad Johnson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 13:05:20