DynamoDB模式-对建筑物内的位置建模

时间:2020-01-24 22:35:54

标签: amazon-dynamodb amazon-dynamodb-data-modeling

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

  • 1号楼
    • A座
      • 1楼
        • A部分
          • 办公室1
            • 计算机A
            • 计算机B
          • 办公室2
            • 计算机A
        • B部分
          • 办公室1

...等等。

访问模式:

  • 显示建筑物中的所有位置(机翼,楼层,剖面等)
  • 显示特定位置
  • 显示分配给特定位置的所有计算机
  • 显示特定计算机的位置

我在想什么:

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

a = [ { pid: 1 }, { pid: 2 }, { pid: 1 } ]
a.filter(e => e.pid === 1)

> [ { pid: 1 }, { pid: 1 } ]

我知道这是错误的思考方式,但是我找不到其他办法。

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

2 个答案:

答案 0 :(得分: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开头。您可以在字符串中添加子位置,以便以Building#1|Wing#A|

开头获取Wing A中的所有位置

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

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

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

答案 1 :(得分:0)

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

我可能会考虑使用仅带有“序列号”或“资产ID”散列的表

然后有一个GSI,其中包含您所描述的密钥。

相关问题