首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DynamoDB仅对一组特定的值进行索引

DynamoDB仅对一组特定的值进行索引
EN

Stack Overflow用户
提问于 2019-04-26 06:02:24
回答 1查看 238关注 0票数 0

我的dynamoDB索引中充斥着海量数据。我想选择可以索引的值,而避免索引其余的值。这个是可能的吗?

假设,以下是示例项目:

代码语言:javascript
复制
parent item:
{
    "hashKey":"a1"
    "indexHashKey":"parentType"
    "indexRangeKey":"date1"

}

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

}

在我的用例中,我总是要求索引只获取parentType记录。索引加载了大量数据,因为childTypes也会被索引(这是自然而然的)。我想选择特定的值(比如'parentType1','parentType2')来在dynamoDB中建立索引。dynamoDB是否提供了用于此目的的功能?

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

代码语言:javascript
复制
* 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.

任何建议都会很有帮助。

EN

回答 1

Stack Overflow用户

发布于 2019-04-26 06:29:25

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

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

考虑修改您的项目,使其仅包含父项目的索引散列和范围键属性。例如:

代码语言:javascript
复制
parent item:
{
    "hashKey":"a1"
    "parentIndexHashKey":"parentType"
    "parentIndexRangeKey":"date1"

}

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

如果您还需要仅针对子项运行类似的查询,则可以创建仅包含子项的第二个稀疏索引,方法是仅针对子项设置该索引的散列和排序关键字的属性。

代码语言:javascript
复制
child item:
{
    "hashKey":"a2"
    "childIndexHashKey":"childType"
    "childIndexRangeKey":"date11"
}

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55858218

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档