Ответ
Репликация и шардирование — это две разные стратегии масштабирования баз данных, решающие разные проблемы.
Репликация — это стратегия доступности и отказоустойчивости. Данные копируются (реплицируются) с одного сервера (мастера) на один или несколько других (реплик).
- Цель: Обеспечить резервные копии данных, распределить нагрузку операций чтения, повысить доступность.
- Как работает: Все операции записи (
INSERT,UPDATE,DELETE) идут на мастер, который асинхронно или синхронно передает изменения репликам. Чтение можно выполнять с реплик. - Ограничение: Пропускная способность записи не увеличивается, так как запись все еще идет в одну точку (мастер).
Шардирование (партиционирование) — это стратегия масштабируемости производительности. Единый набор данных разбивается (шардируется) на меньшие части (шарды), которые распределяются по разным серверам.
- Цель: Распределить нагрузку как на запись, так и на чтение, обрабатывая большие объемы данных, которые не помещаются на один сервер.
- Как работает: Данные распределяются по шардам на основе ключа шардирования (например,
user_id). Каждый шард независим и содержит свою часть данных. - Сложность: Усложняются операции, затрагивающие несколько шардов (например,
JOIN), и требуется механизм маршрутизации запросов.
Практический пример:
-- Репликация в PostgreSQL: Настройка реплики.
-- На реплике выполняется:
$ pg_basebackup -h master-host -D /var/lib/postgresql/data -U replicator -P
-- Шардирование (концептуально): Пользователи разбиты по шардам.
-- Шард A (user_id от 1 до 1000): SELECT * FROM users WHERE user_id = 123;
-- Шард B (user_id от 1001 до 2000): SELECT * FROM users WHERE user_id = 1500;
-- Запрос должен знать, на какой шард идти.
Итог: Часто эти стратегии используют вместе. Например, каждый шард может быть отреплицирован для повышения своей отказоустойчивости.