Ответ
Шардинг (или шардирование) — это техника горизонтального масштабирования баз данных, при которой одна большая таблица или коллекция логически разделяется на несколько меньших частей, называемых шардами. Эти шарды распределяются по разным серверам (узлам).
Основные цели шардинга:
- Масштабируемость записи и чтения: Нагрузка распределяется между несколькими серверами, что позволяет системе обрабатывать гораздо больше одновременных запросов, чем один мощный сервер.
- Повышение производительности: Запросы к меньшему набору данных (в пределах одного шарда) выполняются быстрее, так как индексы меньше и помещаются в оперативную память.
- Отказоустойчивость и доступность: Если один шард (сервер) выходит из строя, остальные продолжают работать. Это изолирует сбой и сохраняет доступность большей части данных.
Пример шардинга по ключу (хешу) в Go:
Основные сложности и недостатки:
- Сложность JOIN-операций: Выполнение JOIN между таблицами, находящимися на разных шардах, становится очень сложной и неэффективной задачей.
- Решардинг: При добавлении новых серверов требуется перераспределение данных (решардинг), что является сложной и ресурсоемкой операцией.
- Неравномерное распределение: Возможна ситуация "горячего шарда", когда один шард получает непропорционально большую нагрузку.
- Сложность обеспечения транзакционности: Гарантировать ACID-транзакции для операций, затрагивающих несколько шардов, очень трудно.