Amazon dynamodb 如何查看表中是否存在具有特定属性的哈希键

Amazon dynamodb 如何查看表中是否存在具有特定属性的哈希键,amazon-dynamodb,dynamodb-queries,Amazon Dynamodb,Dynamodb Queries,我有一个既有HashKey又有RangeKey的表 该表包含许多发送到设备的不同消息 HashKey是每个设备唯一的ID,RangeKey是消息发送时间的时间戳 消息上的属性之一是表示消息类型的INT 我试图找到的是表中曾经出现过的所有具有特定消息类型的唯一设备ID 例如,假设有100个设备,每个设备有100条消息;总共有10000条信息。消息类型7很少见,在这10000条消息中,只有50条消息属于类型7,而这50条消息可能只发送到20个不同的设备 是否有一种简单(且快速)的方法来获取每一个唯一

我有一个既有HashKey又有RangeKey的表

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

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

消息上的属性之一是表示消息类型的INT

我试图找到的是表中曾经出现过的所有具有特定消息类型的唯一设备ID

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

是否有一种简单(且快速)的方法来获取每一个唯一的设备ID,该设备ID曾经有过类型为7的消息

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


对于我没有想到的查询或GSI,我可以做些什么吗?

一种方法是在整数字段上创建一个GSI,将消息类型作为哈希键,将设备ID作为范围键。请注意,GSI中的类型(HashKey、RangeKey)元组不必是唯一的

然后

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

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