MongoDB обробляє міграцію даних між фрагментами через процес балансування. Балансувальник відповідає за те, щоб дані рівномірно розподілялися між фрагментами в сегментованому кластері. Ось кроки, пов’язані з міграцією даних між шардами:
1. Балансування
- Автоматичне балансування: MongoDB автоматично балансує дані, переміщуючи фрагменти з одного фрагмента в інший. Це забезпечує рівномірний розподіл даних між шардами.
2. Міграція фрагментів
- Ручна міграція: MongoDB може виконувати ручну міграцію фрагментів для певних колекцій. Це корисно для розподілу даних під час групових вставок.
3. Міграція діапазону
- Автоматична міграція діапазонів: MongoDB переносить дані по одному діапазону за раз. Балансувальник не чекає завершення фази видалення поточної міграції перед початком наступної міграції діапазону.
4. Решардинг
- Техніка повторного шардування: MongoDB використовує повторне шардування для швидкого розподілу даних між шардами в кластері. Це передбачає навмисне шардинг у тимчасовий шард-ключ, який відрізняється від бажаного шард-ключа, а потім повторне шардування в потрібний шард-ключ.
5. Процедура міграції фрагментів
- Source Shard: вихідний сегмент починає рух, коли отримує внутрішню команду. Під час процесу міграції операції над фрагментом надсилаються на вихідний шард.
- Цільовий шард: цільовий сегмент створює будь-які індекси, необхідні джерелу, які не існують на місці призначення. Цільовий шард починає запитувати документи у фрагменті та починає отримувати копії даних.
- Синхронізація: після отримання остаточного документа у фрагменті цільовий шард починає процес синхронізації, щоб переконатися, що він має зміни в перенесених документах, які відбулися під час міграції.
- Оновлення метаданих: вихідний шард підключається до бази даних конфігурації та оновлює метадані кластера новим розташуванням фрагмента.
- Фаза видалення: після завершення оновлення метаданих у вихідному сегменті та коли на фрагменті немає відкритих курсорів, вихідний фрагмент видаляє свою копію документів[3][5].
6. Джамбо Чанки
- Jumbo Chunks: якщо блок перевищує максимальний розмір або кількість документів у блоку перевищує максимально допустиму, MongoDB не переносить фрагмент. Натомість MongoDB намагається розділити фрагмент. Якщо розділення невдале, MongoDB позначає фрагмент як jumbo, щоб уникнути повторних спроб перенести фрагмент[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/