Хранилище под паттерн доступа
Вопрос
Объясните на примере, что значит «проектировать хранение от паттерна доступа».
Попробуйте сами
Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.
Показать ответ и разбор
Коротко
Что должно прозвучать в ответе
Сначала перечисляю запросы и их частоту, потом выбираю модель
Ключи и индексы под самые частые запросы
Денормализация ради чтения там, где это оправдано
Отдельные представления или хранилища под разные запросы
Цена: синхронизация копий и усложнение записи
Что могут спросить следом
- Когда денормализация оправдана?
- Как держать копии данных согласованными?
Разбор
Это значит идти от запросов к схеме. Пример: лента заказов в личном кабинете. Самый частый запрос: последние 20 заказов пользователя со статусом и суммой. Значит, ключ шардирования user_id, индекс (user_id, created_at desc), а сумму и число позиций храню прямо в заказе, а не считаю JOIN по позициям каждый раз. Второй паттерн, отчёт продавца по продажам за месяц, совсем другой: его отдаю из ClickHouse, куда события уходят асинхронно. Цена: несколько представлений одних данных, их надо синхронизировать, а запись становится сложнее. Зато каждый частый запрос попадает в один узел и индекс.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.