DynamoDB分页-知道何时没有其他结果

时间:2018-11-02 23:45:53

标签: amazon-dynamodb

doc指出:

  

缺少LastEvaluatedKey是了解您拥有的唯一方法   到达结果集的结尾

但是,如果您有10个项目并且要查询10个项目,则将使用LastEvaluatedKey获得结果集。但是,此后没有更多项目了。

是否有可靠的方法可以真正知道何时到达结果集的末尾?

1 个答案:

答案 0 :(得分:0)

当您指定限制(每个问题10个)时,它会找到限制所提供的项目数,并且看起来不会超出限制。

由于项目为10,限制为10,因此每次都可以按限制查找元素。

在第二次尝试读取项目时,它在表中找不到任何项目,因此返回null。您将需要while循环,如下所示:

List<QueryResult> queryResultList = new ArrayList<>();

// Since query returns only max 1MB of items at a time,
// use of this flag tells if no more such elements are present in db.
Map<String, AttributeValue> lastKeyEvaluated = null;

Map<String, AttributeValue> expressionAttributeValue = new HashMap<>();
expressionAttributeValue.put(":primary_key_value", new AttributeValue().withS(primary_key_value));

do {
    QueryRequest queryRequest = new QueryRequest()
            .withTableName(this.getDynamoTable().getTableName())
            .withIndexName(Constants.Table.INDEX_NAME)
            .withKeyConditionExpression("primary_key = :primary_key_value")
            .withExpressionAttributeValues(expressionAttributeValue)
            .withExclusiveStartKey(lastKeyEvaluated);
    QueryResult result = this.getAmazonDynamoDBClient().query(queryRequest);
    queryResultList.add(result);
    lastKeyEvaluated = result.getLastEvaluatedKey();
} while (lastKeyEvaluated != null);