在教程中https://docs.aws.amazon.com/iot/latest/developerguide/iot-ddb-rule.html建议使用样本记录时间作为分区键而不是设备ID。
然而,查看https://aws.amazon.com/blogs/database/choosing-the-right-dynamodb-partition-key/,设备 ID 似乎更有意义:“使用高基数属性。这些属性对于每个项目都有不同的值,例如 emailid、employee_no、customerid、sessionid、orderid 等。”
它还说:“在大多数情况下,具有相同分区键的所有项目都存储在一个集合中,我们将其定义为具有相同分区键但不同排序键的一组项目。”因此,当使用时间戳作为分区键时,来自同一设备的消息将在不同的集合之间拆分。这有什么意义吗?
我知道分区键必须是唯一的,因此从这个意义上说,使用设备 ID 不起作用,但是当将分区键与排序键组合时,这种唯一性要求不适用。
你是对的,使用 deviceId 作为分区键更有意义,否则你存储的数据基本上是无用的。
按 device_id 分组数据意味着您可以发出请求,例如向我提供给定设备的最新输出,或向我提供过去 30 天的所有设备输出。
使用时间戳作为分区键不会给你带来这些,它只能提供:给我在这一秒/微秒或任何时间戳的粒度中发出指标的所有设备。
设备ID | 采样时间 |
---|---|
123 | 2023-01-01T00:00:000Z |
123 | 2023-01-02T00:00:000Z |
123 | 2023-01-03T00:00:000Z |
我建议在教程底部留下反馈,这样可以将其交给正确的团队。