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/