如何查看表中是否存在具有特定属性的哈希密钥

时间:2018-04-11 20:36:28

标签: amazon-dynamodb dynamodb-queries

我有一个包含HashKey和RangeKey的表。

该表包含许多发送到设备的不同消息。

HashKey是每个设备唯一的ID,RangeKey是发送消息的时间戳。

消息的一个属性是表示消息类型的INT。

我想要找到的是所有具有特定消息类型的唯一设备ID都会出现在表格中。

例如,假设有100个设备,每个设备有100条消息;总共10 000条消息。消息类型7很少见,在这10 000个消息中只有50个消息属于类型7,而这50个消息可能只被发送到20个不同的设备。

是否有一种简单(快速)的方法来获取每个具有类型7消息的唯一设备ID?

我知道我可以扫描表格,过滤消息类型,然后跟踪结果中显示的唯一设备ID。但这有两个问题,扫描整个表格很慢,并且当我只需要知道它是否出现在该消息类型时,结果中的相同唯一设备ID也会多次出现。 (在这个例子中,它不是一个问题,但是我想避免在扫描结果中反复检查相同的设备ID,而是有数百万条消息)

对于我没想到的查询或者GSI,我能做些什么吗?

1 个答案:

答案 0 :(得分:1)

一种方法是在整数字段上创建一个GSI,它将消息类型保存为HashKey,将Device ID保存为Range Key。请注意,GSI中的类型(HashKey,RangeKey)元组不必是唯一的。

然后

  • 要知道设备是否收到特定的消息类型,您可以通过HashKey(MessageType),范围密钥(设备ID)进行索引搜索。 另请注意,根据记录数量,结果可能跨越多个页面,因此您应检索所有页面以了解特定设备ID是否获得给定类型的消息。

  • 要获取接收特定消息类型的设备列表,可以通过HashKey(MessageType)进行搜索。上面的分页注释也适用于检索曾收到过给定类型消息的所有唯一设备ID。