Я пытаюсь реализовать разбиение на страницы в DynamoDB с помощью Java SDK.
У меня есть простая модель данных с идентификатором HashKey
и датой RangeKey
.Я хочу запросить все даты после данной.Пока это работает, но проблема заключается в разбиении на страницы с использованием последнего оцененного ключа.
При запросе последней страницы lastEvaluatedKey
не является нулевым, оно по-прежнему указывает на последний элемент последней запрошенной страницы.Другой запрос с этим ключом, установленным как èxclusiveStartKey
, затем возвращает 0 результатов с null
lastEvaluatedKey
.
Мой код выглядит следующим образом:
var query = new DynamoDBQueryExpression<DynamoModel>();
var keyCondition = ImmutableMap.<String, AttributeValue>builder()
.put(":v_userid", new AttributeValue().withS(userId))
.put(":v_date", new AttributeValue().withS(date.toString()))
.build();
if (!StringUtils.isEmpty(lastKey)) {
query.setExclusiveStartKey(ImmutableMap.<String, AttributeValue>builder()
.put("userId", new AttributeValue().withS(userId))
.put("date", new AttributeValue().withS(lastKey)).build());
}
query.withKeyConditionExpression("userId = :v_userid AND date >= :v_date");
query.withExpressionAttributeValues(keyCondition);
query.setLimit(2);
QueryResultPage<DynamoModel> resultPage = mapper.queryPage(DynamoModel.class, query);
Кто-нибудь знает, почемуlastEvaluatedKey
не равно нулю при достижении последнего элемента, соответствующего KeyCondition
?Когда я сохраняю только те элементы, которые соответствуют условию, LastEvaluatedKey
является нулевым, как и ожидалось.