База не справляется с чтением
Вопрос
База данных интернет-магазина перегружена чтением каталога. Какие шаги вы предпримете и в каком порядке?
Попробуйте сами
Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.
Показать ответ и разбор
Коротко
Что должно прозвучать в ответе
Сначала найти тяжёлые запросы и проверить индексы (EXPLAIN)
Кеш горячих данных: Redis, HTTP-кеш, CDN для страниц
Реплики чтения с учётом отставания
Пулер соединений, если упираемся в соединения
Денормализация или отдельное хранилище для поиска и фильтров
Что могут спросить следом
- Какие данные каталога нельзя брать с реплики?
- Как инвалидировать кеш при смене цены?
Разбор
Сначала измеряю: какие запросы съедают время, смотрю EXPLAIN, добавляю недостающие индексы. Часто этого хватает. Дальше кеш: карточки и списки каталога меняются редко, их можно держать в Redis и отдавать через HTTP-кеш и CDN. Затем реплики чтения: каталог терпит отставание в секунды. Цену и остаток в корзине и при оплате беру с лидера, потому что там нужна точность. Если тысячи соединений, ставлю PgBouncer. Фильтры и полнотекстовый поиск выношу в Elasticsearch или OpenSearch, который наполняется из БД через события.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Предыдущий вопрос
Консистентное хеширование
Следующий вопрос
Вертикальное и горизонтальное масштабирование