我的dynamoDB索引中充斥着海量数据。我想选择可以索引的值,而避免索引其余的值。这个是可能的吗?
假设,以下是示例项目:
parent item:
{
"hashKey":"a1"
"indexHashKey":"parentType"
"indexRangeKey":"date1"
}
child item:
{
"hashKey":"a2"
"indexHashKey":"childType"
"indexRangeKey":"date11"
}在我的用例中,我总是要求索引只获取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.任何建议都会很有帮助。
发布于 2019-04-26 06:29:25
需要明确的是,您将父项和子项都存储在单个表中,并且希望表上的索引仅包含子项?这是您的问题的正确表示吗?
如果您不希望DynamoDB表中的所有数据都在索引中,则需要设计一个sparse index,这是一个常规索引,其中为索引散列和范围键指定的属性并不在表中的每一项上。您的问题是您的'indexHashKey‘和'indexRangeKey’属性都在您的父项和子项上,因此它们都显示在您的索引中。请记住,DynamoDB表中的项可以有不同的属性;至少,它们需要包含表的散列键和排序键(如果表中有散列键和排序键),但它们不需要包含恰好是附加到表的任何索引的键的属性。
考虑修改您的项目,使其仅包含父项目的索引散列和范围键属性。例如:
parent item:
{
"hashKey":"a1"
"parentIndexHashKey":"parentType"
"parentIndexRangeKey":"date1"
}然后,您可以按父类型(例如parentType == "parentType2")对该索引进行查询,并仅返回该表中具有该类型的父项。
如果您还需要仅针对子项运行类似的查询,则可以创建仅包含子项的第二个稀疏索引,方法是仅针对子项设置该索引的散列和排序关键字的属性。
child item:
{
"hashKey":"a2"
"childIndexHashKey":"childType"
"childIndexRangeKey":"date11"
}或者,您可以将父项和子项存储在单独的DynamoDB表中,这样子项就不会进入父索引并干扰您的查询。
https://stackoverflow.com/questions/55858218
复制相似问题