DynamoDB的新功能在这里。我需要找出建筑物内不同位置的DynamoDB模式。另外,我需要能够识别分配给每个位置的计算机。这些位置嵌套在其他位置内。例如,
...等等。
访问模式:
我在想什么:
我最初想创建这样的东西:
a = [ { pid: 1 }, { pid: 2 }, { pid: 1 } ]
a.filter(e => e.pid === 1)
> [ { pid: 1 }, { pid: 1 } ]
我知道这是错误的思考方式,但是我找不到其他办法。
为建筑物的部分,办公室等位置建模的最佳方法是什么?
答案 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|
使用PartitionKey
(以及可选的SortKey
=“位置”)获取特定位置。
要获取位于GSI_PartitionKey
为“计算机”且GSI_SortKey
以您的位置ID开头的位置GSI中的所有计算机。
使用PartitionKey
(以及可选的SortKey
='Computer')获取特定的计算机,属性应包括其位置。
答案 1 :(得分:0)
我认为您的方向正确...
将分层数据编码为定界的排序键似乎符合我所看到的建议(尽管您的两组示例数据不匹配)Section#1|Section#2|Section#3
与Wing A|Floor 1|Section A
我可能会考虑使用仅带有“序列号”或“资产ID”散列的表
然后有一个GSI,其中包含您所描述的密钥。