Существует множество способов определения моделей данных в DynamoDB. Правильная модель данных для вашего приложения требует от вас тонкого баланса между всеми шаблонами доступа. Я проиллюстрирую один из способов моделирования того, что вы описываете, но это не единственный способ. Я надеюсь, что это поможет вам не застрять!
Взгляните на следующую модель данных:
В этом примере я моделирую отношения «один ко многим» между продавцами и продуктами, устанавливая раздел продавца. Каждый продукт существует в разделе продавца.
Я решил смоделировать активных/неактивных продавцов, введя глобальный вторичный индекс для каждого активного продукта. Обратите внимание, что в приведенном выше примере у Джо Смита (SELLER#1) определены атрибуты GSIPK и GSISK, что означает, что продукты Joe Smiths активны и будут отображаться в GSI. GSI будет выглядеть так:
Если вы хотите искать продукты от активных продавцов, вы должны искать глобальный вторичный индекс. Обратите внимание, что у Джейн Смит (ПРОДАВЕЦ №2) нет товаров в GSI. Это связано с тем, что ни в одном из продуктов Jane Smiths не определены атрибуты GSIPK и GSISK. Поэтому, если вы хотите пометить продавца (или продукты продавца) как активного/неактивного, вам нужно просто добавить/удалить атрибуты GSIPK/GSISK по мере необходимости.
В этом примере пометка продавца как неактивного потребует обновления каждого из продуктов продавца (удаление GSIPK/GSISK). Вы бы сделали это с помощью пакетного вызова для обновления (или удаления) нескольких продуктов. Однако, если это создает узкое место в производительности, вам может понадобиться другой подход.
Вы можете рассмотреть возможность использования атрибута срока жизни (TTL) для неактивных продавцов/продуктов и позвольте DynamoDB удалить просроченные продукты из вашего поиска продуктов. Поскольку TTL не удаляет элементы сразу, вам все равно нужно фильтровать просроченные продукты при поиске.
Как видите, существует множество способов моделирования данных в DynamoDB. Правильный выбор для вашего варианта использования зависит от глубокого понимания ваших шаблонов доступа. Я надеюсь, что эти подходы дадут вам некоторое представление о возможностях.
person
Seth Geoghegan
schedule
15.02.2021
scan
. Лучшим подходом было бы перепроектировать вашу модель данных для поддержки необходимых шаблонов доступа. Трудно предложить, какую модель данных вам следует использовать, поскольку мы не знаем всех ваших шаблонов доступа. Вы можете получить более содержательные ответы, если опишете некоторые из своих моделей доступа к продавцам и продуктам. - person Seth Geoghegan   schedule 09.02.2021