我在 DynamoDB 中有下表:
Table: Person
Attributes: person_id, firstName, lastName, age, birthday
Partition Key: person_id
我的问题是:我需要查询某个年龄之间的所有人,例如年龄 > 18 AND 年龄 < 45。
但是,我的查询需要强一致性,因此,我不能使用全局二级索引。
在这种情况下,最好/可能的解决方案是什么?
我在 DynamoDB 中有下表:
Table: Person
Attributes: person_id, firstName, lastName, age, birthday
Partition Key: person_id
我的问题是:我需要查询某个年龄之间的所有人,例如年龄 > 18 AND 年龄 < 45。
但是,我的查询需要强一致性,因此,我不能使用全局二级索引。
在这种情况下,最好/可能的解决方案是什么?
你的要求是矛盾的。如果您需要获取“所有年龄在 18 到 45 岁之间的人”,除非此表非常非常小,否则在您查询时,人员集可能会发生变化。这本质上是允许最终一致性的操作类型。
我也想知道你会如何处理结果。
如果表真的很大,并且您的查询会有很多结果,您将如何呈现数据?
如果表总是很小,那么您可以简单地扫描它并应用过滤器。
问问自己,查询或扫描保持一致意味着什么?查询/扫描可能需要多次往返服务器才能完成这一事实意味着它不会为您提供数据的时间点快照。除非数据非常小或不经常更改。
我建议您使用scan
operation ,因为您想实现过滤但您不知道分区 Key。在 Java 中,您可以按照以下指南扫描表格并使用过滤器表达式。
https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/ScanJavaDocumentAPI.html