Что такое шардирование баз данных и зачем оно нужно
Что проверяют
Понимаете ли вы, что это горизонтальное разделение данных, и знаете ли, чем за него платят.
Как отвечать
Шардирование это разделение данных по нескольким независимым узлам, каждый из которых хранит свою часть. В отличие от реплик, где у всех полная копия, здесь у каждого шарда только своя доля.
Зачем: когда данные или нагрузка на запись не помещаются в одну машину. Реплики решают проблему чтения, но не записи и не объёма.
Способы разделения:
- по диапазону: например по дате. Просто и удобно для отчётов, но даёт горячий шард (свежие данные пишутся в один);
- по хешу ключа: равномерно, но диапазонные запросы задевают все шарды;
- по справочнику: отдельный сервис хранит соответствие ключа и шарда. Гибко, но добавляет точку отказа;
- по клиенту в многоарендных системах: данные одного клиента целиком на одном шарде.
Чем платят, и это главная часть ответа: соединения между шардами практически невозможны; уникальность в пределах всей базы не гарантируется, поэтому идентификаторы генерируются глобально; транзакция, задевающая два шарда, требует распределённого протокола или саги; изменение схемы применяется ко всем узлам; перебалансировка при добавлении шарда это отдельная операция, и её планируют заранее.
Правильный вывод: шардирование это последнее средство. Сначала индексы, кэш, реплики для чтения, секционирование внутри одной базы, архивация старых данных.
Где спотыкаются
Путают шардирование с репликацией.
Выбирают ключ, дающий перекос, и получают один перегруженный шард.
Не думают про уникальность идентификаторов и запросы поперёк шардов.
Шардируют раньше, чем упёрлись в реальный предел одной машины.