0

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

  • 1号楼
    • A翼
      • 1楼
        • A节
          • 办公室 1
            • 电脑A
            • 电脑B
          • 办公室 2
            • 电脑A
        • B节
          • 办公室 1

... 等等。

访问模式:

  • 显示建筑物中的所有位置(翼、楼层、部分等)
  • 显示特定位置
  • 显示分配到特定位置的所有计算机
  • 显示特定计算机的位置

我在想什么:

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

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             [...]

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

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

4

2 回答 2

1

如果这些确实是唯一的访问模式,您可能可以使用简单的 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“位置”和GSI_SortKey以您的建筑物 ID 开头。您可以将子位置添加到字符串中,这样您就可以获得 Wing A 中以 of 开头的所有位置Building#1|Wing#A|

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

GSI_PartitionKey获取位于“计算机”且GSI_SortKey以您的位置 ID 开头的位置 GSI 中的所有计算机。

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

于 2020-01-24T23:06:05.173 回答
0

我认为您走在正确的轨道上...
将分层数据编码为分隔排序键似乎遵循了我所看到的建议(尽管您的两组示例数据不匹配)Section#1|Section#2|Section#3vsWing A|Floor 1|Section A

我可能会考虑让表只包含“序列号”或“资产 ID”的哈希值

然后有一个带有您描述的密钥的 GSI。

于 2020-01-24T22:59:57.900 回答