1

我有一个同时具有 HashKey 和 RangeKey 的表。

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

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

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

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

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

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

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

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

4

1 回答 1

1

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

然后

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

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

于 2018-04-11T23:49:48.283 回答