Есть ли способ запросить несколько хэш-ключей в DynamoDB?

Есть ли способ запросить несколько хеш-ключей, используя один запрос в Amazon AWS SDK для Java?

Здесь моя проблема; У меня есть таблица DB для статуса проекта. Хэш-ключ - это статус проекта (т.е. Новый, назначенный, обрабатывающий или полный). Ключ диапазона - это набор идентификаторов проектов. В настоящее время у меня есть настройка запроса, чтобы просто найти все проекты, перечисленные в качестве статуса (хеш) "назначенного", и другой запрос, установленный для поиска статуса "обработки". Есть ли способ сделать это, используя один запрос, а не отправлять несколько запросов для каждого состояния, которое мне нужно найти? Код ниже:

    DynamoDBMapper mapper = new DynamoDBMapper(new AmazonDynamoDBClient(credentials));
    PStatus assignedStatus = new PStatus();
    assignedStatus.setStatus("assigned");
    PStatus processStatus = new PStatus();
    processStatus.setStatus("processing");

    DynamoDBQueryExpression<PStatus> queryAssigned = new DynamoDBQueryExpression<PStatus>().withHashKeyValues(assignedStatus);
    DynamoDBQueryExpression<PStatus> queryProcessing = new DynamoDBQueryExpression<PStatus>().withHashKeyValues(processStatus);

    List<PStatus> assigned = mapper.query(PStatus.class, queryAssigned);
    List<PStatus> process = mapper.query(PStatus.class, queryProcessing);

В принципе, я хотел бы знать, можно ли исключить переменные queryAssigned и assigned и обрабатывать как assignedStatus, так и processStatus через тот же запрос process, чтобы найти проекты, которые не новый или полный.

Ответ 1

Нет, на сегодняшний день нет способа отправить несколько запросов в одном запросе. Если вы обеспокоены задержкой, вы можете делать несколько запросов одновременно в разных потоках. Для этого потребуется такая же пропускная способность сети, как и "двойной запрос", если бы Dynamo предложила ее (если вы делаете 2, а не сотни).

Ответ 2

Невозможно запросить несколько хеш-ключей, но с апреля 2014 года вы можете использовать QueryFilter, чтобы вы могли фильтровать по не ключевым полям в дополнение к полям хэш-ключа.

В блоге 24 апреля 2014 года AWS объявила о выпуске опции "QueryFilter":

С выпуском сегодня мы расширяем эту модель с поддержкой фильтрации запросов по неключевым атрибутам. Теперь вы можете включить QueryFilter как часть вызова функции Query. Фильтр применяется после извлечения ключа и до того, как результаты будут возвращены вам. Фильтрация таким образом может уменьшить объем данных, возвращаемых вашему приложению, а также упростить и упорядочить ваш код.

Проверьте это http://aws.amazon.com/blogs/aws/improved-queries-and-updates-for-dynamodb/?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed:+AmazonWebServicesBlog+%28Amazon+Web+Services+Blog%29

Ответ 3

Возможно, вы посмотрите на операцию BatchGetItem или метод batchLoad() DynamoDBMapper. Хотя это немного отличается от запроса, поскольку это не запрос с условием OR для хэш-ключа, он позволит вам выполнить (как правило) одно и то же. Вот языковая агностическая документация, и вот Javadoc.