Как получить результаты из нескольких разделов DynamoDb на одной странице QueryResultPage

Я пытаюсь запросить Dynamodb, где мои фактические данные разделены на 3 части (на основе хеш-функции). Я хотел бы получить результаты из всех разделов для соответствующего первичного ключа, а затем разбить их на страницы. Я не уверен, возможно ли это.

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

Map<String, AttributeValue> eav = new HashMap<String, AttributeValue>();
        eav.put(":partitionKey", new AttributeValue().withS(hashKey));
DynamoDBQueryExpression<MyClazz> queryExpression = new DynamoDBQueryExpression<MyClazz>()
                .withKeyConditionExpression("partitionKey = :partitionKey")
                .withExpressionAttributeValues(eav)
                .withLimit(limit)
                .withExclusiveStartKey(lastEvaluatedKey);

Но это будет извлекать данные из первого раздела. Я хочу получить данные из других оставшихся разделов в одной QueryResultPage, чтобы я мог пролистывать их по страницам.

Возможно ли это?

Я имею в виду, что ниже условие выполняется вместе, так что я получаю один QueryResultPage

("key = :partition1 or key = :partition2 or key = :partition3")


person creed    schedule 09.05.2019    source источник


Ответы (1)


Это обычная проблема с DynamoDB, на самом деле у вас не может быть условия ИЛИ для ключа раздела, но есть несколько способов решения вашей проблемы.

Самый простой - использовать TransactGetItems или BatchGetItems, в основном вы отправляете несколько запросов вместе, транзакции имеют ограничение или 10 на запрос, а пакет - 25.

Я не уверен, какой SDK вы используете, но, вероятно, у него есть сопоставленные функции.

person Mojimi    schedule 10.05.2019
comment
Не уверен, что BatchgetItems решит проблему разбивки на страницы, как Dynamodbmapper с LastEvaluatedKey. - person creed; 13.05.2019
comment
@creed Я думаю, вы что-то путаете, ваша клиентская логика уже знает все ключи, которые ей нужно получить, поэтому разбиение на страницы реализуется вашим кодом. - person Mojimi; 13.05.2019