Amazon dynamodb DynamoDB索引只是一组特定的值

Amazon dynamodb DynamoDB索引只是一组特定的值,amazon-dynamodb,amazon-dynamodb-index,Amazon Dynamodb,Amazon Dynamodb Index,我的dynamoDB索引中充斥着大量数据。我希望选择可以索引的值,并避免索引其余的值。这可能吗 比方说,以下是示例项目: parent item: { "hashKey":"a1" "indexHashKey":"parentType" "indexRangeKey":"date1" } child item: { "hashKey":"a2" "indexHashKey":"childType" "indexRangeKey":"date11

我的dynamoDB索引中充斥着大量数据。我希望选择可以索引的值,并避免索引其余的值。这可能吗

比方说,以下是示例项目:

parent item:
{
    "hashKey":"a1"
    "indexHashKey":"parentType"
    "indexRangeKey":"date1"

}

child item:
{
    "hashKey":"a2"
    "indexHashKey":"childType"
    "indexRangeKey":"date11"

}
在我的用例中,我总是要求索引只获取父类型记录。索引正在加载大量数据,因为子类型也在被索引(这就是本质)。我想选择特定的值(比如“parentType1”、“parentType2”)在dynamoDB中建立索引。dynamoDB是否为此提供了任何功能

备选方案: 如果dynamoDB没有提供这样的功能,那么我也应该

* avoid storing the child type of the item. But it would be good to have the child type stored.

or 

* Maintain two different fields. One to store parent record type and another to store child record type. This looks ugly.

任何建议都会有帮助。

要清楚,您将父项和子项存储在一个表中,并且希望表上的索引仅包含子项?这是你问题的正确表述吗

如果不希望DynamoDB表中的所有数据都在索引中,则需要设计一个常规索引,其中为索引哈希和范围键指定的属性不在表中的每个项上。您的问题是“indexHashKey”和“indexRangeKey”属性位于所有父项和子项上,因此它们都显示在索引中。记住,DynamoDB表中的项可以有不同的属性;至少,它们需要包含表的哈希键和排序键(如果表有),但不需要包含恰好是附加到表的任何索引的键的属性

考虑修改项目,使其仅包括父项目上的索引哈希和范围键属性。例如:

parent item:
{
    "hashKey":"a1"
    "parentIndexHashKey":"parentType"
    "parentIndexRangeKey":"date1"

}
然后可以按父类型(例如parentType==“parentType2”)对该索引进行查询,并仅返回该表中具有该类型的父项

如果还需要对唯一的子项运行类似的查询,则可以创建第二个仅包含子项的稀疏索引,方法是仅对子项设置该索引的哈希和排序键的属性

child item:
{
    "hashKey":"a2"
    "childIndexHashKey":"childType"
    "childIndexRangeKey":"date11"
}

或者,您可以将父项和子项存储在单独的DynamoDB表中,这样子项就无法进入父项索引并干扰您的查询。

那么,您基本上是说这一点?“维护两个不同的字段。一个存储父记录类型,另一个存储子记录类型。这看起来很难看。”所以只有父类型字段的索引。是的,基本上。但是,你为什么认为它很丑?我不知道您的场景的细节,但感觉好像您在强迫不同类型的数据放在一个表中,而只希望一种数据显示在该表的索引中。支持这一点的唯一方法是在不同类型的数据上具有不同类型的属性。如果您觉得难看,您可能需要考虑使用两个单独的表。稀疏索引通常用于调用特殊项目(例如,当前正在处理的标记项目或订单),其中有属性(例如“标记的”或“处理”)。仅在表中要显示在FlaggedItems或ActiveOrders索引中的项上。如果您的父项在这种情况下是特殊的,您必须使用单独的属性来调用它们。非常感谢。我正期待着“支持这一点的唯一方法是在不同类型的数据上有不同类型的属性。”不客气。我很乐意帮忙。你介意把我的回答作为你问题的答案吗?