DynamoDB нумерация страниц - зная, когда больше нет результатов - PullRequest
0 голосов
/ 03 ноября 2018

doc заявляет:

Отсутствие LastEvaluatedKey - единственный способ узнать, что у вас есть достиг конца набора результатов

Однако, если у вас есть 10 элементов и вы запрашиваете 10 элементов, вы получите набор результатов с помощью LastEvaluatedKey. Однако после этого больше нет предметов.

Есть ли надежный метод, который нужно знать при достижении конца набора результатов?

1 Ответ

0 голосов
/ 04 ноября 2018

Когда вы указываете лимит (10 в соответствии с этим вопросом), он находит количество элементов в соответствии с лимитом и не выходит за его пределы.

Так как предметов 10, а лимит 10, он может каждый раз находить элементы в соответствии с лимитом.

При второй попытке чтения элементов он не находит элементов в таблице и, следовательно, возвращает ноль. Вам понадобится цикл 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...