Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Як MongoDB обробляє міграцію даних між сегментами


Як MongoDB обробляє міграцію даних між сегментами


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/