MongoDB Sharding: Trinnvis veiledning med eksempel
โก Smart oppsummering
MongoDB Sharding deler store datasett inn i mindre delsett fordelt pรฅ flere MongoDB instanser, noe som reduserer CPU-belastningen pรฅ en enkelt server. En sharded-klynge kombinerer shards, en konfigurasjonsserver og en ruter for รฅ skalere lagring og spรธrregjennomstrรธmning horisontalt.
Hva er Sharding i MongoDB?
Sharding er et konsept i MongoDB, som deler store datasett i smรฅ datasett pรฅ tvers av flere MongoDB tilfeller.
Noen ganger dataene innenfor MongoDB vil vรฆre sรฅ enorme at spรธrringer mot slike store datasett kan fรธre til mye CPU-bruk pรฅ serveren. For รฅ hรฅndtere denne situasjonen, MongoDB har et konsept med Sharding, som i utgangspunktet er deling av datasett pรฅ tvers av flere MongoDB tilfeller.
Samlingen, som kan vรฆre stor i stรธrrelse, er faktisk delt pรฅ tvers av flere samlinger, eller Shards som de kalles. Logisk sett fungerer alle shards som รฉn samling.
Fordeler med sharding i MongoDB
Fรธr man implementerer en sharded-klynge, er det nyttig รฅ forstรฅ hvorfor team bruker sharding. De viktigste fordelene er:
- Horisontal skalerbarhet: Data distribueres pรฅ tvers av mange standardservere i stedet for รฅ tvinge รฉn enkelt maskin til รฅ vokse seg stadig stรธrre.
- Hรธyere gjennomstrรธmning: Lese- og skriveoperasjoner kjรธrer parallelt pรฅ tvers av shards, slik at klyngen hรฅndterer flere forespรธrsler per sekund.
- Stรธrre lagringskapasitet: Den kombinerte disken med alle shards kan inneholde datasett som er langt stรธrre enn det รฉn server kan lagre.
- Hรธy tilgjengelighet: Nรฅr hver shard distribueres som et replikasett, fรธrer ikke feilen i en enkelt node til at klyngen slรฅs av.
- Balansert last: Ocuco MongoDB Balancer omfordeler databiter automatisk for รฅ forhindre at รฉn shard blir et hotspot.
Sammen gjรธr disse fordelene sharding til standardmetoden for skalering MongoDB utover grensene til รฉn enkelt server.
Hvordan implementere Sharding
Shards implementeres ved hjelp av klynger, som ikke er annet enn en gruppe av MongoDB tilfeller.
Komponentene i en Shard inkluderer:
- En Shard โ Dette er det grunnleggende, og dette er ikke annet enn en MongoDB instans som inneholder delsettet av dataene. I produksjonsmiljรธer mรฅ alle shards vรฆre en del av replikasett.
- Konfigurer server - Dette er en MongoDB instans som inneholder metadata om klyngen, i utgangspunktet informasjon om de forskjellige MongoDB forekomster som vil inneholde shard-dataene.
- En ruter - Dette er en MongoDB instans som i utgangspunktet er ansvarlig for รฅ omdirigere kommandoene som sendes av klienten til de riktige serverne.
Trinn for trinn skjรฆring Cluster Eksempel
Trinn 1) Opprett en egen database for konfigurasjonsserveren.
mkdir /data/configdb
Trinn 2) Start MongoDB instans i konfigurasjonsmodus. Anta at vi har en server som heter Server D, som ville vรฆre konfigurasjonsserveren vรฅr. Vi mรฅ kjรธre kommandoen nedenfor for รฅ konfigurere serveren som en konfigurasjonsserver.
mongod --configdb ServerD:27019
Trinn 3) Start mongos-instansen ved รฅ spesifisere konfigurasjonsserveren.
mongos --configdb ServerD:27019
Trinn 4) Fra mongo-skallet, koble til mongos-instansen.
mongo --host ServerD --port 27017
Trinn 5) Hvis du har Server A og Server B som mรฅ legges til i klyngen, kan du utstede kommandoene nedenfor.
sh.addShard("ServerA:27017") sh.addShard("ServerB:27017")
Trinn 6) Aktiver sharding for databasen. Sรฅ hvis vi trenger รฅ shardere Employeedb-databasen, kan du kjรธre kommandoen nedenfor.
sh.enableSharding("Employeedb")
Trinn 7) Aktiver sharding for samlingen. Sรฅ hvis vi trenger รฅ shardere Employee-samlingen, utfรธr kommandoen nedenfor.
sh.shardCollection("Employeedb.Employee", { "Employeeid": 1, "EmployeeName": 1 })
Slik velger du en Shard-nรธkkel i MongoDB
Shard-nรธkkelen er det indekserte feltet, eller settet med felt, som MongoDB bruker til รฅ bestemme hvilken shard som lagrer hvert dokument. Fordi nรธkkelen styrer datadistribusjonen, er det รฅ velge den riktig den viktigste avgjรธrelsen i en shard-distribusjon. En dรฅrlig nรธkkel konsentrerer data og trafikk pรฅ รฉn shard, noe som opphever fordelene med sharding.
En sterk shard-nรธkkel har vanligvis fรธlgende egenskaper:
- Hรธy kardinalitet: Feltet bรธr ha mange mulige verdier, slik at dataene kan deles inn i mange finkornede deler.
- Lav frekvens: Ingen enkeltverdi bรธr dominere, ellers hoper dokumentene som deler den verdien seg opp pรฅ รฉn shard.
- Ikke-monoton endring: Nรธkler som alltid รธker, for eksempel tidsstempler, sender hver nye skriving til den samme sharden, og oppretter et hotspot.
MongoDB stรธtter to sharding-strategier basert pรฅ nรธkkelen. Avstandsbasert sharding deler data inn i sammenhengende omrรฅder og passer til omrรฅdespรธrringer, mens hashet sharding bruker en hash-funksjon for รฅ spre skrivinger jevnt over shards. Team starter ofte med hashet sharding nรฅr skrivingen er stor og bytter til avstandsbasert sharding nรฅr omrรฅdebaserte lesninger dominerer. Uansett hvilken strategi du velger, test nรธkkelen mot realistiske spรธrremรธnstre fรธr du forplikter, fordi shard-nรธkkelen ikke kan endres enkelt nรฅr dataene er lastet inn.
Sharding vs. Replikering i MongoDB
Sharding og replikering er komplementรฆre, men forskjellige funksjoner. Tabellen nedenfor fremhever forskjellene, slik at du kan bruke hver av dem riktig, og i praksis bruker produksjonsklynger begge sammen.
| Aspekt | Sharding | Replication |
|---|---|---|
| Formรฅl | Skaler horisontalt ved รฅ dele data | Beskytt data og hold dem tilgjengelige |
| Data pรฅ hver node | Et delsett (รฉn shard) av dataene | En fullstendig kopi av dataene |
| Primรฆr fordel | Mer lagringsplass og gjennomstrรธmning | Feiltoleranse og leseskalering |
| Nรธkkelkomponenter | Shards, konfigurasjonsserver, mongos-ruter | Primรฆr- og sekundรฆrmedlemmer |
Kort sagt, sharding svarer pรฅ behovet for skalering, mens replikering svarer pรฅ behovet for tilgjengelighet, og en robust distribusjon kombinerer begge deler.

