Есть ли способ запросить несколько хэш-ключей в 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.
Ответ 4
API Amazon не поддерживает несколько фильтров hashkey, но вы можете использовать фильтр HASH KEY + RANGE KEY для получения результатов с использованием метода batchGetItem.
http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/batch-operation-lowlevel-java.html#LowLevelJavaBatchGet