DynamoDB Schema - 建筑物内的建模位置
DynamoDB Schema - Modeling Locations inside a building
这里是 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 [...]
我知道这是错误的思考方式,但我想不出任何其他方式。
为建筑物的部分、办公室等位置建模的最佳方法是什么?
我认为你的方向是正确的...
将分层数据编码为定界排序键似乎遵循了我所看到的建议(尽管您的两组示例数据不匹配)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')获取特定计算机,属性应包括其位置。
这里是 DynamoDB 的新手。我需要为建筑物内的不同位置找出 DynamoDB 模式。此外,我需要能够识别分配给每个位置的计算机。这些位置嵌套在其他位置中。例如,
- 1号楼
- A区
- 1 楼
- A 部分
- 办公室 1
- 计算机 A
- 计算机 B
- 办公室 2
- 计算机 A
- 办公室 1
- B 部分
- 办公室 1
- A 部分
- 1 楼
- A区
...等等。
访问模式:
- 显示建筑物中的所有位置(侧翼、楼层、部分等)
- 显示具体位置
- 显示分配给特定位置的所有计算机
- 显示特定计算机的位置
我在想什么:
我最初想创建这样的东西:
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')获取特定计算机,属性应包括其位置。