我有一个dynamoDB表,用于存储传感器事件。
哈希键:传感器ID
范围键:时间戳
传感器信息
我现在需要查询每个传感器的最新事件。
我唯一能想到的解决方案是查询每个传感器ID的最新事件。但这将是使用2000+传感器的大量查询。 我也不想扫描整个表以便以后进行排序,因为表可以快速增长。
有什么想法吗?
答案 0 :(得分:1)
您必须确定对您而言重要的内容,并设计表以匹配用例。
您说要查询每个传感器的最后一个值,并且有2000多个传感器。您将如何处理这2000多个值?您多久需要一次这些值,这些值是否会过时?
一种解决方案是拥有两个表:一个表用于添加历史值(时间序列数据),而另一个表用于始终更新每个传感器的最新读数。当您需要最新的传感器数据时,只需扫描第二张表即可获取所有传感器的最新值。它和读取一样高效。对于写操作,这意味着您必须为每次传感器更新写两次。
另一种可能的解决方案是编写按时间划分的时间序列数据,而不是传感器ID。假设所有传感器在每个时间点都进行了更新,只需一个查询,您就可以获取所有传感器的值。仅当您每次都更新所有传感器的价位并且以常规节奏进行时,此方法才有效。
但是,如果您一次更新所有传感器,则可以通过将多个传感器读数合并到一个项目中来进行进一步的优化,因此只需较少的写入操作即可更新所有2000个传感器。
答案 1 :(得分:0)
由于定义了range_key
,因此可以使用Query(hash_key=HASH_KEY, ScanIndexForward=True, limit=1)
答案 2 :(得分:0)
万一其他人为k.wahome的答案而苦恼,L
中的limit
必须是大写,所以
Query(hash_key=HASH_KEY, ScanIndexForward=True, Limit=1)
有效!