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.

  • ๐Ÿงฉ Kjernekonsept: Sharding partisjonerer รฉn logisk samling pรฅ tvers av mange shards, men spรธrringer behandler fortsatt dataene som รฉn enkelt samling.
  • ๐Ÿ—๏ธ Cluster Komponenter: En sharded-klynge trenger shards for data, en konfigurasjonsserver for metadata og en ruter for รฅ dirigere klientkommandoer.
  • โš™๏ธ Implementeringsflyt: Start konfigurasjonsserveren, start mongos-ruteren, legg til shards, og aktiver deretter sharding pรฅ databasen og samlingen.
  • ๐Ÿ”‘ Shard-nรธkkel: Shard-nรธkkelen bestemmer hvordan dokumenter distribueres, sรฅ hรธy kardinalitet og jevne tilgangsmรธnstre er avgjรธrende.
  • ๐Ÿ“ˆ Primรฆr fordel: Sharding gir horisontal skalerbarhet, og sprer lagring og arbeidsmengde i stedet for รฅ oppgradere en enkelt server.

MongoDB Sharding: Trinnvis veiledning med eksempel

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:

  1. 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.
  2. 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.
  3. 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.

Spรธrsmรฅl og svar

Ja. AI-verktรธy kan analysere spรธrremรธnstre og feltkardinalitet for รฅ foreslรฅ mulige shard-nรธkler og advare om monotone felt. Fordi nรธkkelen er vanskelig รฅ endre senere, bรธr du validere enhver anbefaling mot reelle arbeidsbelastninger fรธr du bruker den.

Ja. AI-basert overvรฅking kan track-datavekst, CPU-belastning og spรธrreforsinkelse for รฅ forutsi nรฅr en enkelt server vil bli overbelastet. Den markerer det rette tidspunktet for sharding, men ingeniรธrer bรธr bekrefte kapasitetsplaner fรธr de handler.

Avstandsbasert sharding deler data inn i sammenhengende verdiomrรฅder, noe som passer for omrรฅdespรธrringer, men risikerer ujevne deler. Hashet sharding er nรธkkelen til รฅ spre skrivinger jevnt over shards, noe som forbedrer skrivefordelingen pรฅ bekostning av effektive omrรฅdeskanninger.

Ja. Aktiver sharding pรฅ databasen, sรธrg for at det finnes en indeks pรฅ den valgte shard-nรธkkelen, og kjรธr deretter sh.shardCollection() pรฅ navneomrรฅdet. MongoDB begynner automatisk รฅ distribuere eksisterende dokumenter i deler pรฅ tvers av de tilgjengelige shardene.

Oppsummer dette innlegget med: