лучшая стратегия для запроса элементов из Dynamodb - PullRequest
0 голосов
/ 20 января 2019

У меня есть таблица с продуктами, которые имеют идентификатор, имя и несколько других атрибутов, которые я хочу использовать для фильтрации (например, цвет, тип, производитель).

Я хочу установить ID в качестве первичного ключа, имя в качестве ключа сортировки и думать о том, как обрабатывать другие запросы, например апи / продукты? цвет = X & Y = тип и производитель = Z

Будет ли хорошим решением создать глобальный вторичный индекс для каждого атрибута (цвет, тип, производитель)? Таким образом, с таким запросом я бы сделал 3 запроса, которые возвращали бы 3 списка записей с идентификатором, которые я использовал бы для запроса на основе первичного ключа.

Ответы [ 2 ]

0 голосов
/ 22 января 2019

Полезно разделить две разные вещи, которые похожи друг на друга: запросы и поиск. Если вы хотите, чтобы ваш API предоставил возможность запроса, то DynamoDB с парой GSI должен удовлетворять большинство ваших требований.

Если вы хотите, чтобы ваш API просто осуществлял поиск по множеству данных, то IMO уходит от стандартных баз данных в область поисковых систем, поэтому, возможно, стоит взглянуть на AWS CloudSearch или Elasticsearch или что-то вроде Algolia - технологии, специально разработанные для поиска.

Для дизайна DynamoDB, я рекомендую это видео о продвинутых шаблонах проектирования: https://www.youtube.com/watch?v=HaEPXoXVf2k

Примерно через 1-2 часа вы узнаете много нового об использовании DynamoDB, включая рекомендации по моделированию моделей реляционного доступа на нем. Примерно через 50 минут вы увидите большую таблицу примеров, из которой вы сможете собрать проектные решения для достижения определенного набора шаблонов доступа.

0 голосов
/ 22 января 2019

Как @Michael - sqlbot сказал, во-первых, вы должны рассмотреть возможность того, что DynamoDB - не правильный выбор.

Чтобы помочь вам с этим, я настоятельно рекомендую вам прочитать документацию (если вы этого еще не сделали).DynamoDB - очень мощная система баз данных NoSQL, но она также может быть очень сложной.

В таком простом случае вы сможете решить ее без GSI.Имейте в виду, что использование GSI может подразумевать использование дополнительных WCU каждый раз, когда вы добавляете / обновляете / удаляете элемент в базовой таблице.И имейте в виду, что GSI в конечном итоге непротиворечивы, что может или не может быть проблемой, в зависимости от вашего случая.

Вы также можете рассмотреть другие решения NoSQL, такие как Cassandra, MongoDB, CouchDB и т. Д.

...