Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/124.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon dynamodb DynamoDB模式-建筑物内的建模位置_Amazon Dynamodb_Amazon Dynamodb Data Modeling - Fatal编程技术网

Amazon dynamodb DynamoDB模式-建筑物内的建模位置

Amazon dynamodb DynamoDB模式-建筑物内的建模位置,amazon-dynamodb,amazon-dynamodb-data-modeling,Amazon Dynamodb,Amazon Dynamodb Data Modeling,这里是DynamoDB的新成员。我需要为建筑物内的不同位置找出一个DynamoDB模式。此外,我需要能够识别分配给每个位置的计算机。这些位置嵌套在其他位置中。比如说, 1号楼 翼A 一楼 A节 办公室1 计算机A 计算机B 办公室2 计算机A B节 办公室1 。。。等等 访问模式: 显示建筑物中的所有位置、翼子板、楼板、剖面等 显示特定位置 显示分配到特定位置的所有计算机 显示特定计算机的位置 我当时的想法是: 我最初想创建如下内容: PartitionKey Sort

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

1号楼 翼A 一楼 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             [...]
我知道这是一个错误的想法,但我想不出其他的方法


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

我认为您的思路是正确的。。。 将分层数据编码为带分隔符的排序键似乎符合我看到的建议,尽管您的两组示例数据与Section1 | Section2 | Section3与Wing a | Floor 1 | Section a不匹配

我可能会考虑只使用序列号或资产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_分区键为“位置”,GSI_排序键以建筑ID开头。您可以将子位置添加到字符串中,以便获取以建筑1 | WingA开头的Wing a中的所有位置|

使用PartitionKey和可选的SortKey='location'获取特定位置

要获取GSI分区键为“Computer”且GSI分区键以您的位置ID开头的位置GSI中的所有计算机


使用PartitionKey和可选的SortKey='computer'获取特定的计算机。属性应包括其位置。

非常感谢。。。我知道您提到排序键是可选的,但是将来如何使用它呢?我一直在想,我似乎找不到使用它的方法。比如说,你想存储一些关于某个位置的其他信息,而你不想把这些信息放在主记录中。可能是因为这会使记录太大,或者可能是因为它与它有关,但不是它的一部分。您可能仍然希望通过位置的ID进行查找。要执行此操作,您需要将其与实际位置记录区分开来。这就是排序键派上用场的地方。新记录在排序键中会有一些其他值,因此您仍然可以按ID查找它,但存储两种不同类型的数据。