it-swarm.com.ru

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

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

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

    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, чтобы найти проекты, которые не являются новыми или завершенными.

12
DGolberg

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

8
Cory Kendall

Невозможно выполнить запрос по нескольким хеш-ключам, но с апреля 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+ + Услуги + Блог% 29

5
Aybat

Попробуйте это в C #. Я думаю, что это похоже на Java. UserId это ключ hask.

        var table = Table.LoadTable(DynamoClient, "YourTableName");
        var batchGet = table.CreateBatchGet();
        batchGet.AddKey(new Dictionary<string, DynamoDBEntry>() { { "UserId", 123 } });
        batchGet.AddKey(new Dictionary<string, DynamoDBEntry>() { { "UserId", 456 } });
        batchGet.Execute();
        var results = batchGet.Results;
0
deverton