MongoDB обеспечивает миграцию данных между шардами посредством процесса балансировки. Балансировщик отвечает за обеспечение равномерного распределения данных по шардам в шардированном кластере. Вот шаги, необходимые для миграции данных между сегментами:
1. Балансировка
- Автоматическая балансировка: MongoDB автоматически балансирует данные, перенося фрагменты из одного сегмента в другой. Это гарантирует равномерное распределение данных по сегментам.
2. Миграция блоков
- Миграция вручную: MongoDB может выполнять миграцию фрагментов вручную для определенных коллекций. Это полезно для распределения данных во время массовой вставки.
3. Миграция диапазона
- Автоматическая миграция диапазона: MongoDB переносит данные по одному диапазону за раз. Балансировщик не ждет завершения фазы удаления текущей миграции, прежде чем начать миграцию следующего диапазона.
4. Перешардинг
- Техника перераспределения данных: MongoDB использует перераспределение для быстрого распределения данных по сегментам кластера. Это предполагает намеренное разделение на временный сегментный ключ, который отличается от желаемого сегментного ключа, а затем повторное разделение на желаемый сегментный ключ.
5. Процедура переноса блоков
- Исходный осколок: Исходный осколок начинает движение, когда получает внутреннюю команду. В процессе миграции операции с чанком передаются в исходный сегмент.
- Целевой сегмент: целевой сегмент создает любые индексы, необходимые источнику, которые не существуют в целевом объекте. Целевой шард начинает запрашивать документы в чане и получать копии данных.
- Синхронизация: после получения окончательного документа в фрагменте целевой сегмент запускает процесс синхронизации, чтобы убедиться в наличии изменений в перенесенных документах, произошедших во время миграции.
- Обновление метаданных: исходный осколок подключается к базе данных конфигурации и обновляет метаданные кластера, указывая новое местоположение фрагмента.
- Фаза удаления: после того, как исходный осколок завершает обновление метаданных и когда на чанк не остается открытых курсоров, исходный осколок удаляет свою копию документов[3][5].
6. Большие куски
- Большие фрагменты: если размер фрагмента превышает максимальный размер или количество документов в фрагменте превышает максимально допустимое, MongoDB не переносит этот фрагмент. Вместо этого MongoDB пытается разделить фрагмент. Если разделение не удалось, MongoDB помечает чанк как большой, чтобы избежать повторных попыток перенести чанк[3].
7. Мониторинг и обслуживание
- Мониторинг: MongoDB предоставляет инструменты для мониторинга процесса балансировки и обеспечения равномерного распределения данных по сегментам.
- Обслуживание: MongoDB предоставляет команды для управления балансировщиком и обеспечения эффективности и масштабируемости миграции данных.
Заключение
MongoDB обрабатывает миграцию данных между сегментами посредством процесса балансировки, который гарантирует равномерное распределение данных по сегментам в сегментированном кластере. Балансировщик переносит данные по одному диапазону за раз, а MongoDB предоставляет инструменты для мониторинга и управления процессом балансировки.
Цитаты:[1] https://stackoverflow.com/questions/48438644/migration-data-between-shards-with-mongodb
[2] https://hackernoon.com/optimize-data-migration-in-mongodb-resharding-techniques-for-speed-and-scalability.
[3] https://www.mongodb.com/docs/v3.0/core/sharding-chunk-migration/
[4] https://www.mongodb.com/community/forums/t/shard-migration-leads-to-service-disruption/247228
[5] https://www.mongodb.com/docs/v6.2/core/sharding-balancer-administration/