Для MVP достаточно модульного backend, PostgreSQL и объектного хранилища изображений. Категории и допустимые атрибуты храните отдельно от пользовательских публикаций.
Проектирование архитектуры и модели данных MVP сервиса, похожего на Pinterest
Для MVP достаточно модульного backend, PostgreSQL и объектного хранилища изображений. Категории и допустимые атрибуты храните отдельно от пользовательских публикаций.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Необходимо создать минимально жизнеспособный продукт (MVP) сервиса, аналогичного Pinterest, охватывающего три типовых пользовательских сценария.
1️⃣ Пользователь запускает приложение, переходит в дерево категорий, выбирает конечную категорию, после чего может задать несколько атрибутов с их значениями, добавить изображение и нажать кнопку «Отправить». После подтверждения изображение передаётся на бекенд, где сохраняется в выбранной категории вместе с указанными атрибутами и их значениями.
2️⃣ Пользователь открывает приложение, выбирает категорию, указывает набор атрибутов и их значений, нажимает «Поиск». Система должна вернуть набор изображений, соответствующих указанным комбинациям атрибутов.
3️⃣ Администратор имеет возможность управлять и изменять структуру категорий, наборы атрибутов и их возможные значения.
Требуется подобрать стек технологий, спроектировать общую архитектуру решения и описать структуру данных, необходимую для реализации указанных сценариев.
Ответ
Для MVP достаточно модульного backend, PostgreSQL и объектного хранилища изображений. Категории и допустимые атрибуты храните отдельно от пользовательских публикаций.
Сущности: Category(id, parent_id, name), Attribute(id, name, type), CategoryAttribute, допустимые AttributeOption, Pin(id, owner_id, category_id, image_key) и типизированные значения атрибутов публикации.
При загрузке backend проверяет, что категория конечная, атрибуты разрешены, значения соответствуют типам. Файл сохраняется отдельно; БД хранит ключ и состояние проверки/обработки. Поиск фильтрует категорию и все выбранные значения с пагинацией. Для небольшого MVP достаточно SQL и целевых индексов, отдельный поисковый движок нужен по измерениям.
Админское изменение категорий требует проверки циклов дерева и судьбы существующих публикаций. Удаление использованных вариантов лучше заменять архивированием либо контролируемой миграцией.