Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Hvordan håndterer MongoDB datamigrering mellem shards


Hvordan håndterer MongoDB datamigrering mellem shards


MongoDB håndterer datamigrering mellem shards gennem balancer-processen. Balanceren er ansvarlig for at sikre, at data er jævnt fordelt på tværs af shards i en sharded klynge. Her er de trin, der er involveret i datamigrering mellem shards:

1. Balancering

- Automatisk balancering: MongoDB balancerer automatisk data ved at migrere bidder fra et shard til et andet. Dette sikrer, at data er jævnt fordelt på tværs af shards.

2. Chunk Migration

- Manuel migrering: MongoDB kan udføre manuel chunk-migrering for specifikke samlinger. Dette er nyttigt til at distribuere data under bulkinserts.

3. Områdemigrering

- Automatisk områdemigrering: MongoDB migrerer data ét område ad gangen. Balanceren venter ikke på, at den aktuelle migrations slettefase er fuldført, før den starter den næste områdemigrering.

4. Omskæring

- Reshard-to-Shard-teknik: MongoDB bruger resharding til hurtigt at sprede data på tværs af shards i klyngen. Dette involverer bevidst sharding til en midlertidig shard-nøgle, der er forskellig fra den ønskede shard-nøgle, og derefter omskæring til den ønskede shard-nøgle.

5. Chunk Migration Procedure

- Source Shard: Kilde-shard starter flytningen, når den modtager en intern kommando. Under migreringsprocessen sendes operationer til chunken til kilden shard.

- Destination Shard: Destinationsshard opbygger alle indekser, der kræves af kilden, og som ikke findes på destinationen. Destinationsfragmentet begynder at anmode om dokumenter i stykket og begynder at modtage kopier af dataene.

- Synkronisering: Efter at have modtaget det endelige dokument i chunken, starter destinationssharden en synkroniseringsproces for at sikre, at den har de ændringer af de migrerede dokumenter, der skete under migreringen.

- Metadataopdatering: Kildefragmentet forbinder til konfigurationsdatabasen og opdaterer klyngemetadataene med den nye placering for chunken.

- Slet fase: Når kildefragmentet har fuldført opdateringen af ​​metadataene, og når der ikke er nogen åbne markører på klumpen, sletter kildefragmentet sin kopi af dokumenterne[3][5].

6. Jumbo Chunks

- Jumbo Chunks: Hvis en chunk overskrider den maksimale størrelse, eller antallet af dokumenter i chunken overstiger det maksimalt tilladte, migrerer MongoDB ikke chunken. I stedet forsøger MongoDB at opdele klumpen. Hvis opdelingen ikke lykkes, mærker MongoDB stykket som jumbo for at undgå gentagne forsøg på at migrere stykket[3].

7. Overvågning og vedligeholdelse

- Overvågning: MongoDB giver værktøjer til at overvåge balancer-processen og sikre, at data er jævnt fordelt på tværs af shards.

- Vedligeholdelse: MongoDB giver kommandoer til at styre balanceren og sikre, at datamigrering er effektiv og skalerbar.

Konklusion

MongoDB håndterer datamigrering mellem shards gennem balancer-processen, som sikrer, at data er jævnt fordelt på tværs af shards i en sharded cluster. Balanceren migrerer data ét område ad gangen, og MongoDB leverer værktøjer til at overvåge og styre balancerprocessen.

Citater:
[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/