MongoDB hanterar datamigrering mellan shards genom balanseringsprocessen. Balanseraren ansvarar för att se till att data är jämnt fördelad över skärvorna i ett fragmenterat kluster. Här är stegen som är involverade i datamigrering mellan skärvor:
1. Balansering
- Automatisk balansering: MongoDB balanserar automatiskt data genom att migrera bitar från en skärva till en annan. Detta säkerställer att data fördelas jämnt över skärvorna.
2. Chunk Migration
- Manuell migrering: MongoDB kan utföra manuell chunkmigrering för specifika samlingar. Detta är användbart för att distribuera data under bulkinfogningar.
3. Räckviddsmigrering
- Automatisk intervallmigrering: MongoDB migrerar data ett intervall i taget. Balanseraren väntar inte på att den aktuella migreringens raderingsfas ska slutföras innan nästa intervallmigrering påbörjas.
4. Omskärning
- Reshard-to-Shard-teknik: MongoDB använder resharding för att snabbt sprida data över skärvorna i klustret. Detta innebär att avsiktligt skära till en temporär skärvnyckel som skiljer sig från den önskade skärningsnyckeln och sedan skära om till den önskade skärnyckeln.
5. Chunk Migration Procedur
- Source Shard: Källsharden startar flytten när den tar emot ett internt kommando. Under migreringsprocessen skickas operationer till chunken till källfragmentet.
- Destination Shard: Destination Shard bygger alla index som krävs av källan som inte finns på destinationen. Destinationsbiten börjar begära dokument i biten och börjar ta emot kopior av data.
- Synkronisering: Efter att ha mottagit det slutliga dokumentet i biten, startar destinationsfragmentet en synkroniseringsprocess för att säkerställa att den har ändringarna av de migrerade dokumenten som inträffade under migreringen.
- Metadatauppdatering: Källfragmentet ansluter till konfigurationsdatabasen och uppdaterar klustermetadata med den nya platsen för biten.
- Ta bort fas: Efter att källfragmentet har slutfört uppdateringen av metadata, och när det inte finns några öppna markörer på biten, tar källfragmentet bort sin kopia av dokumenten[3][5].
6. Jumbo Chunks
- Jumbo Chunks: Om en bit överskrider den maximala storleken eller antalet dokument i biten överstiger det maximalt tillåtna, migrerar MongoDB inte biten. Istället försöker MongoDB dela upp biten. Om uppdelningen misslyckas, märker MongoDB biten som jumbo för att undvika upprepade försök att migrera biten[3].
7. Övervakning och underhåll
- Övervakning: MongoDB tillhandahåller verktyg för att övervaka balanseringsprocessen och säkerställa att data är jämnt fördelad över skärvorna.
- Underhåll: MongoDB tillhandahåller kommandon för att hantera balanseringen och säkerställa att datamigreringen är effektiv och skalbar.
Slutsats
MongoDB hanterar datamigrering mellan shards genom balanseringsprocessen, vilket säkerställer att data är jämnt fördelad över shards i ett sharded kluster. Balanseraren migrerar data ett intervall i taget, och MongoDB tillhandahåller verktyg för att övervaka och hantera balanseringsprocessen.
Citat:[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/