DynamoDB Пагинация - PullRequest
       6

DynamoDB Пагинация

0 голосов
/ 18 сентября 2018

Я делаю нумерацию страниц в DynamoDb и вижу, что результат не соответствует ожидаемому, но я все еще не знаю, где неправильно в моем коде. Я искал этот документ и вижу, что мне просто нужно установить оцененный ключ, который я получил последним оцененным ключом из последнего запроса, чтобы передать следующему запросу. Вот мой код:

public QueryResultPage<SbmBookingInfo> getListBooking(String email, int size,
        String lastTimeStamp, String lastBookingId, boolean isForward) {
    DynamoDBMapper mapper = new DynamoDBMapper(getClient());
    Map<String, AttributeValue> expressionAttributeValues = new HashMap<>();
    expressionAttributeValues.put(":email", new AttributeValue().withS(email));
    if (lastBookingId == null) {
        DynamoDBQueryExpression<SbmBookingInfo> queryExpression = new DynamoDBQueryExpression<SbmBookingInfo>()
                .withIndexName("practitioner-index").withKeyConditionExpression("email=:email")
                .withExpressionAttributeValues(expressionAttributeValues).withConsistentRead(false).withLimit(size);
        QueryResultPage<SbmBookingInfo> result = mapper.queryPage(SbmBookingInfo.class, queryExpression);
        m_log.info("Last evaluated key " + result.getLastEvaluatedKey());
        return result;
    } else {
        Map<String, AttributeValue> lastEvaluatedKey = new HashMap<>();
        lastEvaluatedKey.put("timeStamp", new AttributeValue().withN(lastTimeStamp));
        lastEvaluatedKey.put("bookingId", new AttributeValue().withN(lastBookingId));
        lastEvaluatedKey.put("email", new AttributeValue().withS(email));
        DynamoDBQueryExpression<SbmBookingInfo> queryExpression = new DynamoDBQueryExpression<SbmBookingInfo>().withLimit(size)
                .withIndexName("practitioner-index").withKeyConditionExpression("email=:email")
                .withExpressionAttributeValues(expressionAttributeValues).withConsistentRead(false)
                .withScanIndexForward(isForward).withExclusiveStartKey(lastEvaluatedKey);
        m_log.info("Exclusive key" + queryExpression.getExclusiveStartKey());
        return mapper.queryPage(SbmBookingInfo.class, queryExpression);

    }

}
  • Эта таблица имеет три ключа: bookingId - это хеш-ключ, index: email, и timeStamp - rangeKey.
  • Я проверил эту функцию, сделав первый запрос, и я получил последний оцененный ключ, затем я сделал второй запрос с передачей информации, которую я получил, но, похоже, она не работала.
  • Пожалуйста, помогите мне в этом деле. Спасибо
...