查询 dynamoDB 以获取每个哈希键的最新条目
query dynamoDB for the latest entry of every hash key
我有一个 dynamoDB table 用于存储传感器事件。
哈希键:传感器 ID
范围键:时间戳
传感器信息
我现在需要查询每个传感器的最新事件。
我能想到的唯一解决方案是查询每个传感器 ID 的最新事件。但如果使用 2000 多个传感器,那将是很多查询。
我不想扫描整个 table 以在之后将其整理出来,因为 table 可以增长得非常快。
有什么想法吗?
由于您定义了 range_key
,因此您可以使用
获取最新的项目
Query(hash_key=HASH_KEY, ScanIndexForward=True, Limit=1)
您必须决定什么对您很重要,并设计您的 table(s) 以匹配您的用例。
你说你想查询每个传感器的最后一个值,而且有 2000 多个传感器。您将如何处理这 2000 多个值?您多久需要一次这些值,这些值是否会稍微过时?
一个解决方案是有两个 table:一个用于附加历史值(时间序列数据),另一个 table 用于始终更新每个传感器的最新读数。当您需要最新的传感器数据时,只需扫描这一秒 table 即可获取所有传感器的最新值。它与读取一样高效。对于写入,这意味着您必须为每个传感器更新写入两次。
另一个可能的解决方案是编写按时间分区的时间序列数据,而不是传感器 ID。假设所有传感器在每个时间点都更新,通过一次查询就可以获得所有传感器的值。这有效,但前提是您每次都更新所有传感器的值,并且前提是您以规律的节奏进行。
但是,如果您一次更新所有传感器,则可以通过将多个传感器读数组合到一个项目中来进一步优化,因此需要更少的写入来更新所有 2000 个传感器。
我有一个 dynamoDB table 用于存储传感器事件。
哈希键:传感器 ID
范围键:时间戳
传感器信息
我现在需要查询每个传感器的最新事件。
我能想到的唯一解决方案是查询每个传感器 ID 的最新事件。但如果使用 2000 多个传感器,那将是很多查询。 我不想扫描整个 table 以在之后将其整理出来,因为 table 可以增长得非常快。
有什么想法吗?
由于您定义了 range_key
,因此您可以使用
Query(hash_key=HASH_KEY, ScanIndexForward=True, Limit=1)
您必须决定什么对您很重要,并设计您的 table(s) 以匹配您的用例。
你说你想查询每个传感器的最后一个值,而且有 2000 多个传感器。您将如何处理这 2000 多个值?您多久需要一次这些值,这些值是否会稍微过时?
一个解决方案是有两个 table:一个用于附加历史值(时间序列数据),另一个 table 用于始终更新每个传感器的最新读数。当您需要最新的传感器数据时,只需扫描这一秒 table 即可获取所有传感器的最新值。它与读取一样高效。对于写入,这意味着您必须为每个传感器更新写入两次。
另一个可能的解决方案是编写按时间分区的时间序列数据,而不是传感器 ID。假设所有传感器在每个时间点都更新,通过一次查询就可以获得所有传感器的值。这有效,但前提是您每次都更新所有传感器的值,并且前提是您以规律的节奏进行。
但是,如果您一次更新所有传感器,则可以通过将多个传感器读数组合到一个项目中来进一步优化,因此需要更少的写入来更新所有 2000 个传感器。