DynamoDB如何查询具有强一致性的非键属性?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了DynamoDB如何查询具有强一致性的非键属性?相关的知识,希望对你有一定的参考价值。

我在DynamoDB中有以下表格:

Table: Person

Attributes: person_id, firstName, lastName, age, birthday

Partition Key: person_id

我的问题是:我需要查询特定年龄之间的所有人,例如年龄> 18岁,年龄<45岁。

但是,我的查询需要强一致性,因此,我无法使用全局二级索引。

在这种情况下,什么是最好/可能的解决方案?

答案

你所要求的是矛盾的。如果您需要“所有年龄在18到45岁之间的人”,除非此表非常小,否则在您查询时,这组人员可能会发生变化。这本质上是容忍最终一致性的操作类型。

我也想知道你会对结果做些什么。

如果表格非常大并且您的查询会有很多结果,那么您将如何呈现数据?

如果表总是很小,那么您只需扫描它并应用过滤器即可。

并且问问自己,查询或扫描是否一致意味着什么?事实上,查询/扫描可以多次往返服务器完成,这意味着它不会为您提供数据的时间点快照。除非数据非常小或不经常更改。

另一答案

我建议你使用scan操作,因为你想实现过滤,但你不知道分区键。在java中,您可以按照以下指南扫描表并使用过滤器表达式。 https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/ScanJavaDocumentAPI.html

以上是关于DynamoDB如何查询具有强一致性的非键属性?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Laravel 中获取非键列字段的不同值?

如何在DynamoDB查询中计算消耗的读取容量单位

创建带包含列的索引 sqlserver

Create Index语句的Include作用

DynamoDB 是不是仍然遵循 CAP 定理及其“强一致性”承诺?

如何通过主 ID 以外的列从 DynamoDB 检索数据