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

How to see if Hash Key exists with particular attribute ever in table

我有一个 table,它同时具有 HashKey 和 RangeKey。

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

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

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

我要查找的是 table.

中出现过的具有特定消息类型的所有唯一设备 ID

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

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

我知道我可以扫描 table,过滤消息类型,然后跟踪出现在结果中的唯一设备 ID。但这有两个问题,扫描整个 table 很慢,而且相同的唯一设备 ID 会多次出现在结果中,而我只需要知道它是否曾经出现在该消息类型中。 (在这个例子中,这不是什么大问题,但是我想避免在扫描结果中一遍又一遍地检查相同的设备 ID)

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

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

然后

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

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