Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Как MongoDB обрабатывает миграцию данных между шардами


Как MongoDB обрабатывает миграцию данных между шардами


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/