Запрос к DynamoDB с ключом раздела и списком определенных ключей сортировки - PullRequest
0 голосов
/ 22 мая 2018

У меня есть таблица DyanmoDB, которая ради этого вопроса выглядит следующим образом:

  • id (ключ раздела строки)
  • origin (ключ сортировки строки)

Я хочу запросить у таблицы подмножество источников с определенным идентификатором.Насколько я понимаю, единственный оператор DynamoDB разрешает для ключей сортировки в запросе «между», «начинается_ с», «=», «<=» и «> =».

Проблема в том, что мой запроснужна форма 'CONTAINS', потому что список 'origin' не обязательно упорядочен (для оператора между).

Если бы это был SQL, это было бы что-то вроде:

SELECT * from Table where id={id} AND origin IN {origin_list}

Мой точный вопрос: что мне нужно сделать, чтобы добиться этой функциональности наиболее эффективным способом?я должен изменить свою структуру таблицы?может добавить GSI?Открыты для предложений.

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

Спасибо

1 Ответ

0 голосов
/ 22 мая 2018

Это случай использования выражений фильтра для запроса.Имеет оператор IN

Оператор сравнения

a IN (b, c, d) - true, если a равно любому значению в списке- например, любой из b, c или d.Список может содержать до 100 значений, разделенных запятыми.

Однако нельзя использовать выражения условий для ключевых атрибутов.

Выражения фильтра для запроса

Выражение фильтра не может содержать атрибуты ключа раздела или ключа сортировки.Вы должны указать эти атрибуты в выражении условия ключа, а не в выражении фильтра.

Итак, вы можете использовать источник, а не ключ сортировки (или дублировать его с другим атрибутом), чтобыотфильтруйте его после запроса.Конечно, фильтр сначала считывает, что все элементы имеют этот «идентификатор», а затем фильтры, которые потребляют емкость чтения и менее эффективны, но нет другого способа запросить это иначе.В зависимости от размеров вашего элемента и частоты запросов и предполагаемого количества возвращаемых элементов BatchGetItem может быть лучшим выбором.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...