Как получить результаты из нескольких разделов в DynamoDb в одном QueryResultPage - PullRequest
0 голосов
/ 10 мая 2019

Я пытаюсь запросить 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")

1 Ответ

0 голосов
/ 10 мая 2019

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

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

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

...