当我尝试从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(),并且效果很好。甚至比以前更快。我将取消选择“接受的答案”,因此,如果有人想提供另一个答案,请成为我的客人。

09-28 05:23