我应该使用 AWS Timestream 计划查询还是预先计算时间序列数据的聚合?

问题描述 投票:0回答:1

我正在使用 AWS Timestream 来存储 IoT 传感器数据,其中包括温度、湿度等测量值。我的用例涉及每小时从传感器收集数据,并且我需要计算每日平均值以用于报告和分析目的。

这是我用来计算特定传感器一周内每日平均值的查询示例:

常量参数 = { 查询字符串:` 选择 bin(时间, 1d) AS 天,
AVG(measure_value::double) AS daily_avg 来自“物联网”。“测试” 哪里

        AND sensor_id = '${sensorId}' 
        AND time BETWEEN TIMESTAMP '${startWeek} 00:00:00' 
        AND TIMESTAMP '${endWeek} 23:59:59' 
    GROUP BY bin(time, 1d)  
    ORDER BY day ASC
`

}; const data =等待 timestreamquery.query(params).promise();

问题: 我正在争论计算和存储这些每日平均值的两种方法:

  1. 预先计算平均值:每次摄取数据时,我都可以计算平均值并将其存储在单独的表中,以便更快地查询。
  2. 使用 AWS Timestream 的计划查询:我可以运行计划查询(例如,每天一次)来计算每日平均值并将其存储在不同的表中。

我的问题:

  1. 哪种方法在性能和成本效率方面被认为是最佳实践,尤其是随着数据量的增长?
  2. 我应该考虑针对此类问题的任何其他常见解决方案(例如,用于实时聚合的 Lambda 函数、Athena 或方法组合)?
  3. 这两种解决方案可能会面临哪些潜在挑战,特别是在处理实时数据与历史数据聚合时? 我的要求:
  • 数据量:我预计每小时会有大量传感器数据。
  • 实时监控:如果可能的话,我希望能够获得近乎实时的聚合数据。
  • 成本效率:最小化查询和存储成本很重要。 任何有关最佳方法或替代解决方案的建议将不胜感激!

当前方法:我当前正在运行类似于下面的查询,以在需要时计算每日平均值:

常量参数 = { 查询字符串:` 选择 bin(时间, 1d) AS 天,
AVG(measure_value::double) AS daily_avg 来自“物联网”。“测试” 哪里

        AND sensor_id = '${sensorId}' 
        AND time BETWEEN TIMESTAMP '${startWeek} 00:00:00' 
        AND TIMESTAMP '${endWeek} 23:59:59' 
    GROUP BY bin(time, 1d)  
    ORDER BY day ASC
`

}; const data =等待 timestreamquery.query(params).promise();

我希望这能很好地获得每日平均值。然而,随着数据的增长,我担心频繁查询大型数据集以获取实时仪表板可能会变得缓慢且昂贵。

计划的方法:我正在考虑两种选择:

  1. 预先计算数据摄取的平均值并将其存储在单独的表中,期望这将使查询更快、更高效。
  2. 使用AWS Timestream的计划查询每天计算并存储一次日平均值,希望这能帮助我避免实时计算的开销。
amazon-web-services performance time-series iot amazon-timestream
1个回答
0
投票

首先,我建议您使用现有的选项进行小型 PoC,并研究其成本、实施的难易程度、维护的难易程度以及业务需求。

话虽如此,计划查询将非常容易地满足您的需要,并且如果您的指标/维度设置得当,成本不会是一个大问题,因为查询将仅读取当天索引的数据并会吐出可能是包含您需要的聚合数据的单行。如果您对“实时信息”的要求灵活到一天的时间跨度,我建议您使用它。

如果您需要真实数据(例如最近 24 小时的平均值),那么计划查询可能不是您所需要的。也许您可以使用 Apache Flink 之类的工具来读取包并以窗口方式计算平均值并将其存储在其他地方。但我建议,仅将 Flink 用于每日平均值,在我看来是过度设计。

© www.soinside.com 2019 - 2024. All rights reserved.