2

我有一个 dynamoDB 表,用于存储传感器事件。

  • 哈希键:传感器 ID

  • 范围键:时间戳

  • 传感器信息

我现在需要查询每个传感器的最新事件。

我能想出的唯一解决方案是查询每个传感器 ID 的最新事件。但这将是使用 2000 多个传感器的大量查询。我也不想扫描整个表来整理它,因为表可以增长得很快。

有任何想法吗?

4

2 回答 2

2

您必须决定什么对您很重要并设计您的表格以匹配您的用例。

你说你想查询每个传感器的最后一个值,并且有 2000 多个传感器。您将如何处理这 2000 多个值?您多久需要一次这些值,这些值是否会稍微过时?

一种解决方案是使用两张表:一张用于附加历史值(时间序列数据),另一张用于更新每个传感器的最新读数。当您需要最新的传感器数据时,只需扫描第二张表即可获取所有传感器的最新值。它与读取一样有效。对于写入,这意味着您必须为每次传感器更新写入两次。

另一个可能的解决方案是编写按时间分区的时间序列数据,而不是传感器 ID。假设所有传感器在每个时间点都更新,通过一次查询,您可以获得所有传感器的值。这有效,但前提是您每次都更新所有传感器的值,并且只有当您定期进行时。

但是,如果您一次更新所有传感器,则可以通过将多个传感器读数组合到一个项目中来进行进一步优化,因此需要更少的写入来更新所有 2000 个传感器。

于 2018-08-25T05:01:56.730 回答
1

由于您已range_key定义,因此您可以使用

Query(hash_key=HASH_KEY, ScanIndexForward=True, Limit=1)
于 2018-08-24T16:29:38.240 回答