← Назад ко всем вопросам

Как решали проблему масштабирования в реляционных БД

1️⃣ Как кратко ответить

Масштабирование реляционных баз данных решается через вертикальное масштабирование (увеличение ресурсов одного сервера) и горизонтальное масштабирование (шардинг и репликация). Вертикальное масштабирование ограничено физическими возможностями сервера, тогда как горизонтальное масштабирование позволяет распределять данные и нагрузку между несколькими серверами.

2️⃣ Подробное объяснение темы

Масштабирование реляционных баз данных — это процесс увеличения их способности обрабатывать больше данных и запросов. Существует два основных подхода к масштабированию: вертикальное и горизонтальное.

Вертикальное масштабирование (Scale-Up):

Вертикальное масштабирование подразумевает увеличение ресурсов одного сервера, на котором работает база данных. Это может включать добавление большего объема оперативной памяти, более мощного процессора или более быстрого диска.

  • Преимущества:

    • Простота реализации: не требует изменения архитектуры приложения.
    • Поддержка транзакционной целостности и согласованности данных без дополнительных усилий.
  • Недостатки:

    • Ограничения по максимальным ресурсам одного сервера.
    • Высокая стоимость мощного оборудования.
    • Потенциальная точка отказа: если сервер выходит из строя, вся база данных становится недоступной.

Горизонтальное масштабирование (Scale-Out):

Горизонтальное масштабирование включает распределение данных и нагрузки между несколькими серверами. Это достигается с помощью шардинга и репликации.

  • Шардинг:

    • Данные разбиваются на части (шарды), которые хранятся на разных серверах.
    • Каждый шард содержит подмножество данных, и запросы направляются к соответствующему шарду.
    • Пример: если у вас есть таблица пользователей, вы можете разделить её по первой букве фамилии, распределив данные по разным серверам.
  • Репликация:

    • Данные копируются на несколько серверов.
    • Основной сервер (мастер) обрабатывает записи, а реплики (слейвы) обрабатывают чтение.
    • Это увеличивает доступность и отказоустойчивость, так как данные доступны на нескольких серверах.
  • Преимущества:

    • Легкость добавления новых серверов для увеличения мощности.
    • Повышенная отказоустойчивость и доступность данных.
    • Возможность обработки большего количества запросов одновременно.
  • Недостатки:

    • Сложность управления и конфигурации.
    • Необходимость изменения архитектуры приложения для работы с распределенными данными.
    • Потенциальные проблемы с согласованностью данных.

Пример кода для репликации:

-- Создание мастера
CREATE TABLE users (
    id INT PRIMARY KEY,
    name VARCHAR(100)
);
​
-- Включение репликации
-- На мастере
CHANGE MASTER TO
    MASTER_HOST='slave_host',
    MASTER_USER='replication_user',
    MASTER_PASSWORD='password';
​
-- На слейве
START SLAVE;
  • CREATE TABLE users: Создает таблицу users на мастере.
  • CHANGE MASTER TO: Настраивает слейв для подключения к мастеру, указывая хост, пользователя и пароль для репликации.
  • START SLAVE: Запускает процесс репликации на слейве, позволяя ему получать обновления от мастера.

Масштабирование реляционных баз данных позволяет справляться с увеличением объема данных и нагрузки, обеспечивая высокую производительность и доступность системы.

Тема: БД и транзакции
Стадия: Tech

🔒 Подпишись на бусти автора и стань Алигатором, чтобы получить полный доступ к функционалу сайта и отслеживать свой прогресс!

Твои заметки