当我尝试从DynamoDB表中获取一组分页的数据时,它可以完美工作,但前提是要查找的数据位于表的顶部。如果更深入(我将数据按user_alias排序,每个别名有100个元素),则不会返回任何内容。
AmazonDynamoDB dynamo = AmazonDynamoDBClientBuilder.standard()
.withCredentials(
new AWSStaticCredentialsProvider(
new BasicAWSCredentials(
"XXXXXXX",
"XXXXXXX")))
.build();
DynamoDBMapper mapper = new DynamoDBMapper(dynamo);
Map<String, AttributeValue> expressionAttributeValues = new HashMap<>();
expressionAttributeValues.put(":user", new AttributeValue().withS(request.getUser().getAlias()));
ScanResultPage<DatabaseFeedObject> feedEntry;
feedEntry = mapper.scanPage(
DatabaseFeedObject.class,
new DynamoDBScanExpression()
.withFilterExpression("user_alias = :user")
.withLimit(request.getLimit())
.withExpressionAttributeValues(expressionAttributeValues));
//feedEntry.getResults() returns nothing,
//but feedEntry.getLastEvaluatedKey() returns an
//element in the table that does not fit the original query.
我的第一个想法是一直运行查询,直到达到所需的极限,但这很快就会变得效率低下且成本高昂。还有其他方法吗?
最佳答案
我最近发现了“扫描”和“查询”之间的区别。扫描将仅解析整个表,而查询将使用类似SQL的行为来查找所需的内容。我改为迁移到mapper.queryPage(),并且效果很好。甚至比以前更快。我将取消选择“接受的答案”,因此,如果有人想提供另一个答案,请成为我的客人。