Я должен начать с рекомендации избегать Сканирование операций как можно больше. Если это необходимо, конечно (и по необходимости, я имею в виду, вам действительно нужно получить все предметы на столе).
Давайте рассмотрим, как работают запросы DynamoDB. Чтобы сделать запрос , вы должны знать ключ хэша таблицы. Это обязательно. Вы не можете сделать запрос, если вы этого не знаете.
Судя по дизайну вашего стола, я бы предположил, что вы, вероятно, не знаете своего (так как это случайный идентификатор), поэтому в качестве отправной точки я бы изменил формат таблицы.
Предположим, что мы выбрали имя country
как хэш-ключ. У нас здесь две ветви.
- Мы можем либо сделать
country
наш первичный ключ также, так что будет один пункт в каждой стране, и вы должны будете хранить states
в списке (который хорош, но не оптимально).
- Или мы можем выбрать
state
, чтобы быть ключом диапазона, делая основной ключ составным (хэш-ключ и клавиша диапазона). Это позволит нам иметь товар в одном государстве. Это идеальный вариант.
Основная цель ключей дальности должна использоваться в запросах. Обычно для определенного значения хэш-ключа имеется множество значений ключа диапазона. Другими словами, много государств для конкретной страны.
Вы смогли бы построить следующий запрос:
#c = :c
Где #c
это выражение атрибут имя, которое содержит значение country
и :c
это выражение значение атрибута, который содержит значение Germany
,
Этот запрос вернет все элементы, соответствующие этому хэш-ключу, которые в нашем случае являются разными состояниями.
Если вы хотели бы запросить для всех государств, начиная с буквой 'F'
вы можете сделать:
#c = :c and begins_with(#s, :s)
Где #c
и :c
один и то же значение, как и раньше, и #s = state
и :s = F
В качестве дополнительного совета вы должны всегда должны определить, какие запросы вы будете делать на столе, и создайте таблицу в соответствии с этими запросами. А не наоборот.
Вы получили существенный ответ на следующий день после того, как спросили об этом - было ли это хорошо? Обычно принято голосовать, принимать или отвечать на полезные люди здесь. – halfer
Downvoted (см. Выше). – halfer