Возможно ли в DynamoDb получить все элементы с данным ключом сортировки? - PullRequest
0 голосов
/ 27 мая 2019

В качестве первичного ключа у меня есть идентификатор для рецепта, а ключом сортировки является тип пищи (завтрак, еда, закуски и т. Д.).

Есть ли способ сканирования или запроса, чтобы получить всеэлементы с данным ключом сортировки?

1 Ответ

1 голос
/ 28 мая 2019

Как отмечают другие в комментариях, вы не можете запросить ключ сортировки в том смысле, что нет операции, которая выдаст список элементов с одинаковым ключом сортировки.

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

Соединяя их вместе, вам нужен способ разделить продукты по типам продуктов и затем запросить их. Введите Глобальный вторичный индекс (GSI) .

С помощью GSI вы можете индексировать данные в своей таблице таким образом, чтобы тип пищи становился ключом разделения, а какой-то другой атрибут становился ключом сортировки. Затем можно получить все предметы, которые соответствуют определенному типу еды, с помощью запроса.

Есть несколько вещей, которые нужно иметь в виду:

  • GSI похож на другую таблицу: он потребляет емкость, за которую вы будете платить
  • GSI в конечном итоге является согласованным, то есть изменения в таблице могут занять некоторое время, прежде чем они будут отражены в GSI
  • Если вы в конечном итоге создаете GSI, где выбор ключа раздела приводит к очень большим разделам, это может привести к регулированию (уменьшению пропускной способности), если какой-либо один раздел получает много запросов

Еще несколько рекомендаций: https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/bp-indexes-general.html

Но перед тем, как вы начнете создавать GSI, подумайте на секунду о схеме вашей таблицы: ваш выбор ключа раздела кажется не идеальным. С одной стороны, использование идентификатора рецепта в качестве ключа раздела прекрасно, потому что это, вероятно, приводит к очень хорошему распространению данных, но с другой стороны, у вас нет возможности использовать запросы к вашей таблице без создания GSI.

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

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