首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我应该让这个字段成为一个GSI,一个常规属性,还是其他什么东西,以便有效率的查询?

我应该让这个字段成为一个GSI,一个常规属性,还是其他什么东西,以便有效率的查询?
EN

Stack Overflow用户
提问于 2020-07-25 19:50:16
回答 3查看 169关注 0票数 4

对于我的DynamoDB表,我现在有一个如下所示的模式:

分区键-唯一ID,因此每个项目都有一个完全唯一的ID。

排序键-无

属性-包含一些值的JSON

现在,我想添加一个每个项目都需要的新字段,并指示特定区域(例如NA-1、NA-2、JP-1等)和,我希望能够对这个字段进行查询。例如,我可能需要在我的表上执行一个查询,以检索区域NA-1的所有项。

我的问题是,我应该让这个领域成为一种GSI吗?我是DynamoDB新手,所以我一直在网上进行研究,当GSI字段可能只存在于表中的选定项时,使用GSI似乎是首选的,但对于每个条目,我的字段都是必需的,所以我认为使用GSI不是一种选择。

我看到的另一个可能的选择是执行扫描操作并使用筛选器表达式,但据我所见,这是一个代价高昂的操作,因为DynamoDB必须逐个查看整个表,然后再进行筛选。我的表现在不是很大,但将来可能会变得很大,所以我想要一个可伸缩的选项

TL;DR有什么方法可以在我的表中添加一个强制的regionID字段并对其执行高效的查询吗?我应该考虑哪些好的选择?

EN

回答 3

Stack Overflow用户

发布于 2020-07-25 21:39:40

是啊,枪弹可能不是这里最合适的。也许你能让它成为分区键的一部分?

票数 1
EN

Stack Overflow用户

发布于 2020-07-26 19:00:55

是。在表上执行2次写入。第一行将是您当前正在编写的内容,第二行将以您的区域作为分区键。不要忘记使用事务,因为其中一个写操作可能不会成功。

虽然您可以使用GSI,但您必须认识到它最终是一致的。更新它需要一段时间,如果在编写完后立即查询,您可能会得到不一致的数据。

票数 0
EN

Stack Overflow用户

发布于 2020-08-02 18:46:48

DynamoDB是一个分布式数据存储区,即它不是将数据存储在单个服务器中,而是使用所提供的分区键(PK)进行分区。这意味着您的数据分布在多个服务器上,并带来了这样的限制:您可以一次查询一个分区。

回到你的查询模式,

代码语言:javascript
复制
retrieve all items with the region X

您需要在主表中添加region-id作为属性,并使其成为GSI的一部分。请注意,为了避免冲突,您需要使GSI成为复合SK。

我建议使用#

这样你就可以查询GSI喜欢的内容,

代码语言:javascript
复制
where BEGINS_WITH ('X', SK)

此外,如果您的任何条目移动到一个新区域或在某个区域中创建了一个新条目,它将自动反映在GSI和您的查询结果中。

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

https://stackoverflow.com/questions/63092887

复制
相关文章

相似问题

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