我在DynamoDB中有下表:
#include <math.h>
#include <stdlib.h>
double rand_finite_double(void) {
union {
double d;
unsigned char uc[sizeof(double)];
} u;
do {
for (unsigned i = 0; i < sizeof u.uc; i++) {
u.uc[i] = (unsigned char) rand();
}
} while (!isfinite(u.d));
return u.d;
}
我的问题是:我需要查询特定年龄之间的所有人员,例如,年龄在18岁以上且在45岁以下。
但是,我需要在查询中保持高度的一致性,因此,我不能使用全局二级索引。
在这种情况下,最佳/可行的解决方案是什么?
答案 0 :(得分:1)
您要的是矛盾的。如果您需要“所有年龄在18至45岁之间的人”,除非此表非常小,否则在查询时可能会更改一组人。这是本质上可以容忍最终一致性的操作类型。
我也想知道您将如何处理结果。
如果表真的很大,并且您的查询结果很多,那么如何显示数据?
如果表格总是很小,那么您只需对其进行扫描并应用过滤器即可。
问问自己,查询或扫描保持一致意味着什么?查询/扫描可能需要多次往返服务器才能完成操作,这意味着它无法为您提供数据的时间点快照。除非数据很小或不经常更改。
答案 1 :(得分:0)
我建议您使用scan
操作,因为您想实现过滤,但是您不知道分区键。在Java中,您可以按照以下指南扫描表和使用过滤器表达式。
https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/ScanJavaDocumentAPI.html