0

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

可以说,以下是示例项目:

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

}

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

}

在我的用例中,我总是会要求 index 只获取 parentType 记录。索引正在加载大量数据,因为 childTypes 也被索引(这就是本质)。我想选择特定的值(让我们说'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.

任何的意见都将会有帮助。

4

1 回答 1

1

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

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

考虑修改您的项目以仅包含父项目的索引哈希和范围键属性。例如:

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

}

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

如果您还需要仅对子项运行类似的查询,则可以通过仅在子项上设置该索引的哈希和排序键的属性来创建仅包含子项的第二个稀疏索引。

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

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

于 2019-04-25T22:29:25.063 回答