我在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