DynamoDB如何查询具有高度一致性的非关键属性?

时间:2019-04-19 18:56:34

标签: java amazon-dynamodb dynamodb-queries amazon-dynamodb-index amazon-dynamodb-data-modeling

我在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岁以下。

但是,我需要在查询中保持高度的一致性,因此,我不能使用全局二级索引。

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

2 个答案:

答案 0 :(得分:1)

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

我也想知道您将如何处理结果。

如果表真的很大,并且您的查询结果很多,那么如何显示数据?

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

问问自己,查询或扫描保持一致意味着什么?查询/扫描可能需要多次往返服务器才能完成操作,这意味着它无法为您提供数据的时间点快照。除非数据很小或不经常更改。

答案 1 :(得分:0)

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