Запросить DynamoDB с оператором IN на ключе раздела

У меня есть таблица с названиями продуктов. Это схема

  1. CustomerNumber (HASH-ключ типа String)
  2. ProductID (ключ диапазона типа String)

Я хочу сделать запрос, похожий на

SELECT * FROM products WHERE CustomerNumber IN ("cust123","cust234"). 

Как этого добиться?

Несколько наблюдений -

  1. DynamoDBQueryExpression будет запрашивать только index / hashKey, а не список hashKey, как в примере выше.

  2. Также DynamoDBQueryExpression не поддерживает оператор IN, OR.

  3. Также BatchLoad использует только запись первичного ключа (в моем случае customerNumber и productID) для возврата пакета записей.

  4. Кроме того, я не хочу сканировать таблицу и применять к ней фильтр.

  5. Также создание GSI для customerNumber и последующий запрос к нему не сработали.


person Prerna shah    schedule 18.07.2019    source источник


Ответы (1)


Вместо select * where partitionkey IN ... вы должны выполнить отдельный запрос, эквивалентный select * where partitionkey= ... для каждого значения вашего IN условия. Это будет стоить вам нескольких дополнительных обходов сети, но это все; если вас беспокоит скорость, вы можете выполнять отдельные запросы параллельно.

person Matthew Pope    schedule 18.07.2019
comment
Да, спасибо, что ответил на вопрос. Однако как вы предлагаете выполнять запросы параллельно, сейчас я использую параллельные потоки в java. - person Prerna shah; 20.07.2019
comment
Параллельные потоки - один из способов сделать это. Трудно порекомендовать лучший способ, потому что здесь задействовано очень много факторов (например, память, ядра процессора, другие нагрузки на систему). Вы должны закончить сборку своего приложения, а затем провести некоторое тестирование производительности / эксперименты, чтобы увидеть, какой вариант лучше всего подходит для вас. Да, и помните, не оптимизируйте, пока не убедитесь в правильности. - person Matthew Pope; 20.07.2019