DynamoDB Schema - 建筑物内的建模位置

DynamoDB Schema - Modeling Locations inside a building

这里是 DynamoDB 的新手。我需要为建筑物内的不同位置找出 DynamoDB 模式。此外,我需要能够识别分配给每个位置的计算机。这些位置嵌套在其他位置中。例如,

...等等。

访问模式:

我在想什么:

我最初想创建这样的东西:

PartitionKey              SortKey                                 Attributes

Building#1                Building#1 (For metadata)
Building#1                Section#1                                 [...]
Building#1                Section#1|Section#2                       [...]
Building#1                Section#1|Section#2|Section#3             [...]

我知道这是错误的思考方式,但我想不出任何其他方式。

为建筑物的部分、办公室等位置建模的最佳方法是什么?

我认为你的方向是正确的...
将分层数据编码为定界排序键似乎遵循了我所看到的建议(尽管您的两组示例数据不匹配)Section#1|Section#2|Section#3 vs Wing A|Floor 1|Section A

我可能会考虑让 table 仅包含 "serial number" 或 "asset ID"

的散列

然后使用您描述的密钥创建一个 GSI。

如果这些真的是唯一的访问模式,您可以使用简单的 GSI 做一些事情。我不会使用 Building 作为 PartitionKey,因为这会给您带来很多数据热点。像这样的东西可能会起作用:

PartitionKey        SortKey     GSI_PartitionKey GSI_SortKey            Attributes
Building#1          'Location'                                          [...]
Wing#1              'Location'  'Location'       Building#1 .           [...]
Floor#1             'Location'  'Location'       Building#1|Wing#A      [...]
.
.
.
Computer#1          'Computer'  'Computer'       B#1|W#A|F#1|S#A|O#1    [...]
Computer#2          'Computer'  'Computer'       B#1|W#A|F#1|S#B|O#1    [...]
.
.
.

此处的 SortKey 值更具可选性,但它们往往允许以后进行更改,而无需现在做太多工作。

要获取建筑物中的所有位置,您可以查询 GSI,其中 GSI_PartitionKey 是 'Location' 并且 GSI_SortKey 以您的建筑物 ID 开头。您可以将子位置添加到字符串中,这样您就可以获得 Wing A 中以 Building#1|Wing#A|

开头的所有位置

使用 PartitionKey(以及可选的 SortKey = 'Location')获取特定位置。

获取 GSI 中 GSI_PartitionKey 为 'Computer' 且 GSI_SortKey 以您的位置 ID 开头的所有计算机。

使用 PartitionKey(以及可选的 SortKey = 'Computer')获取特定计算机,属性应包括其位置。