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