Горизонтальное шардирование — это техника масштабирования базы данных путем разделения данных на части, называемые шардами, и распределения этих шардов по нескольким независимым серверам. Каждый шард содержит подмножество всех строк таблицы, но при этом сохраняет все столбцы.
Преимущества горизонтального шардирования:
- Масштабируемость: Позволяет обрабатывать растущий объем данных и трафика путем добавления новых серверов для хранения шардов.
- Производительность: Уменьшает объем данных, с которыми работает каждый сервер, что ускоряет выполнение запросов.
- Доступность: Если один шард становится недоступным, остальные шарды продолжают работать.
- Уменьшение нагрузки: Распределяет нагрузку на ввод/вывод по нескольким серверам.
Слабые стороны горизонтального шардирования:
- Сложность: Внедрение и управление шардированием требует значительных инженерных усилий.
- Распределенные транзакции: Транзакции, охватывающие несколько шардов, сложны в реализации и могут снизить производительность.
- Ребалансировка: Перераспределение данных между шардами при изменении нагрузки или добавлении новых серверов может быть сложным и ресурсоемким процессом.
- Запросы между шардами: Запросы, требующие объединения данных из разных шардов (запросы с
JOIN), могут быть неэффективными.
Методы шардирования:
- Шардирование по диапазону: Данные распределяются на основе диапазона значений в ключе шардирования.
- Шардирование по хэшу: Данные распределяются на основе хэш-значения ключа шардирования.
- Директорийное шардирование: Таблица сопоставления указывает, на каком шарде находятся определенные данные или диапазоны данных.
Пример концепции шардирования (упрощенно):
Имеется таблица пользователей с большим объемом данных. Вместо хранения всех пользователей на одном сервере, мы можем разделить их на шарды по первой букве фамилии:
- Шард 1: Пользователи с фамилиями от А до Е
- Шард 2: Пользователи с фамилиями от Ж до Л
- Шард 3: Пользователи с фамилиями от М до С
- Шард 4: Пользователи с фамилиями от Т до Я
Каждый шард хранится на отдельном сервере.
php