Этот вопрос проверяет умение спроектировать БД так, чтобы она выдерживала большую частоту запросов и объёмы данных.
При высокой нагрузке базу обычно шардируют или реплицируют, выделяя горячие таблицы на отдельные серверы. Применяют горизонтальное разделение данных (sharding) и кэширование часто запрашиваемых результатов (Redis, Memcached). Для аналитических отчётов выделяют OLAP-хранилище отдельно от OLTP-базы. Наконец, оптимизируют схему через денормализацию там, где JOIN дорогостоящие.
Шардирование (sharding):
Горизонтальное разделение таблиц по ключу (например, по региону или пользователю).
Каждая шард-копия обслуживает часть данных, снижая нагрузку на один узел.
Репликация:
Master–slave или multi-master: основная БД для записей, реплики для чтения.
Чтение распределяется по репликам, записи идут на мастер.
Кэширование:
Использование Redis/Memcached для хранения «горячих» объектов и результатов запросов.
Снижение числа обращений к БД при пиковой нагрузке.
Отделение аналитики:
OLTP БД для транзакций, ETL или CDC для загрузки в OLAP-хранилище (ClickHouse, Druid) для отчётов.
Избегает блокировок и замедления транзакций.
Денормализация и предаггрегация:
Добавление избыточных полей или таблиц-сумм для ускорения чтения без многократных JOIN.