MongoDB Sharding: stapsgewijze zelfstudie met voorbeeld

โšก Slimme samenvatting

MongoDB Sharding verdeelt grote datasets in kleinere subsets die over meerdere datasets worden verdeeld. MongoDB instanties, waardoor de CPU-belasting op elke individuele server wordt verminderd. Een sharded cluster combineert shards, een configuratieserver en een router om de opslag- en querydoorvoer horizontaal te schalen.

  • ๐Ÿงฉ Kernbegrip: Sharding verdeelt รฉรฉn logische verzameling over meerdere shards, maar query's behandelen de gegevens nog steeds als รฉรฉn enkele verzameling.
  • ???? ๏ธ Cluster Componenten: Een sharded cluster heeft shards nodig voor data, een configuratieserver voor metadata en een router om clientopdrachten door te sturen.
  • โš™๏ธ Implementatiestroom: Start de configuratieserver, start de mongos-router, voeg shards toe en schakel vervolgens sharding in voor de database en de collectie.
  • ๐Ÿ”‘ Shard-sleutel: De shard-sleutel bepaalt hoe documenten worden verdeeld, dus een hoge cardinaliteit en zelfs toegangspatronen zijn essentieel.
  • ๐Ÿ“ˆ Primair voordeel: Sharding biedt horizontale schaalbaarheid, waarbij opslag en werklast worden verdeeld in plaats van dat รฉรฉn server moet worden geรผpgraded.

MongoDB Sharding: stapsgewijze zelfstudie met voorbeeld

Wat is Sharding in MongoDB?

Sharding is een begrip in MongoDB, dat grote datasets opsplitst in kleine datasets over meerdere MongoDB instanties.

Soms de gegevens erin MongoDB De hoeveelheid data zal zo enorm zijn dat query's op zulke grote datasets een hoge CPU-belasting op de server kunnen veroorzaken. Om dit probleem aan te pakken, MongoDB heeft een concept van Sharding, wat in feite het splitsen van datasets over meerdere is MongoDB instanties.

De verzameling, die groot kan zijn, is in feite verdeeld over meerdere verzamelingen, ofwel 'shards'. Logischerwijs vormen al deze shards samen รฉรฉn verzameling.

Voordelen van sharding in MongoDB

Voordat je een sharded cluster implementeert, is het handig om te begrijpen waarom teams voor sharding kiezen. De belangrijkste voordelen zijn:

  • Horizontale schaalbaarheid: De data wordt verdeeld over meerdere standaardservers in plaats van dat รฉรฉn machine steeds groter wordt.
  • Hogere doorvoer: Lees- en schrijfbewerkingen worden parallel uitgevoerd over de shards, waardoor het cluster meer verzoeken per seconde kan verwerken.
  • Grotere opslagcapaciteit: De gecombineerde schijf van alle shards kan datasets bevatten die veel groter zijn dan wat รฉรฉn server kan opslaan.
  • Hoge beschikbaarheid: Wanneer elke shard als replicaset wordt ingezet, zorgt het uitvallen van รฉรฉn enkele node er niet voor dat het cluster uitvalt.
  • Evenwichtige belasting: De MongoDB De balancer herverdeelt datablokken automatisch om te voorkomen dat รฉรฉn shard een knelpunt wordt.

Al deze voordelen samen maken sharding de standaardaanpak voor schaalvergroting. MongoDB buiten de mogelijkheden van รฉรฉn enkele server.

Sharding implementeren

Sharding wordt geรฏmplementeerd met behulp van clusters, wat niets anders is dan een groep van MongoDB instanties.

De componenten van een Shard omvatten:

  1. Zo moeilijk โ€“ Dit is het fundamentele, en dit is niets anders dan een MongoDB instantie die de subset van de gegevens bevat. In productieomgevingen moeten alle shards deel uitmaken van replicasets.
  2. Configuratieserver - Dit is een MongoDB instantie die metadata over het cluster bevat, in principe informatie over de verschillende MongoDB instanties die de shard-gegevens zullen bevatten.
  3. Een router - Dit is een MongoDB Een instantie die in principe verantwoordelijk is voor het doorsturen van de commando's die door de client worden verzonden naar de juiste servers.

Stap voor stap delen Cluster Voorbeeld

Stap 1) Maak een aparte database voor de configuratieserver.

mkdir /data/configdb

Stap 2) Start de MongoDB instantie in configuratiemodus. Stel dat we een server hebben met de naam Server D, die onze configuratieserver zou zijn. We zouden de onderstaande opdracht moeten uitvoeren om de server als configuratieserver te configureren.

mongod --configdb ServerD:27019

Stap 3) Start de mongos-instantie door de configuratieserver op te geven.

mongos --configdb ServerD:27019

Stap 4) Maak vanuit de mongo shell verbinding met de mongos-instantie.

mongo --host ServerD --port 27017

Stap 5) Als u server A en server B hebt die aan het cluster moeten worden toegevoegd, voert u de onderstaande opdrachten uit.

sh.addShard("ServerA:27017")
sh.addShard("ServerB:27017")

Stap 6) Schakel sharding in voor de database. Als we de Employeedb-database willen sharden, gebruiken we de onderstaande opdracht.

sh.enableSharding("Employeedb")

Stap 7) Schakel sharding in voor de collectie. Als we de Employee-collectie willen sharden, gebruiken we de onderstaande opdracht.

sh.shardCollection("Employeedb.Employee", { "Employeeid": 1, "EmployeeName": 1 })

Hoe kies je een shard-sleutel in MongoDB

De shard-sleutel is het geรฏndexeerde veld, of de set velden, die MongoDB De sleutel wordt gebruikt om te bepalen welke shard elk document opslaat. Omdat de sleutel de gegevensdistributie bepaalt, is een goede keuze van de sleutel de allerbelangrijkste beslissing in een sharded implementatie. Een slechte sleutel concentreert gegevens en verkeer op รฉรฉn shard, waardoor de voordelen van sharding teniet worden gedaan.

Een sterke shard-sleutel heeft over het algemeen de volgende kenmerken:

  • Hoge cardinaliteit: Het veld moet veel mogelijke waarden hebben, zodat de gegevens in veel kleinere delen kunnen worden opgesplitst.
  • Lage frequentie: Geen enkele waarde mag domineren, anders hopen de documenten met dezelfde waarde zich op in รฉรฉn shard.
  • Niet-monotone verandering: Sleutels die altijd oplopen, zoals tijdstempels, sturen elke nieuwe schrijfbewerking naar dezelfde shard, waardoor een hotspot ontstaat.

MongoDB Het systeem ondersteunt twee shardingstrategieรซn op basis van de sleutel. Ranged sharding verdeelt data in aaneengesloten bereiken en is geschikt voor bereikquery's, terwijl hashed sharding een hashfunctie toepast om schrijfbewerkingen gelijkmatig over de shards te verdelen. Teams beginnen vaak met hashed sharding wanneer er veel schrijfbewerkingen zijn en schakelen over naar ranged sharding wanneer leesbewerkingen op basis van bereiken de overhand hebben. Welke strategie u ook kiest, test de sleutel aan de hand van realistische querypatronen voordat u deze definitief vastlegt, omdat de shard-sleutel niet eenvoudig kan worden gewijzigd zodra de data is geladen.

Sharding versus replicatie in MongoDB

Sharding en replicatie zijn complementaire maar onderscheidende functies. De onderstaande tabel laat de verschillen zien, zodat u ze correct kunt toepassen. In de praktijk gebruiken productieclusters beide functies samen.

Aspect sharding kopiรซren
Doel Horizontaal schalen door gegevens te splitsen Bescherm uw gegevens en zorg dat ze beschikbaar blijven.
Gegevens op elk knooppunt Een deelverzameling (รฉรฉn deel) van de gegevens Een volledige kopie van de gegevens
Primair voordeel Meer opslagcapaciteit en doorvoer. Fouttolerantie en leesschaling
Belangrijke onderdelen Shards, configuratieserver, MongoDB-router Primaire en secundaire leden

Kort gezegd biedt sharding een oplossing voor de behoefte aan schaalbaarheid, terwijl replicatie de behoefte aan beschikbaarheid waarborgt. Een robuuste implementatie combineert beide.

Veelgestelde vragen

Ja. AI-tools kunnen querypatronen en veldcardinaliteit analyseren om kandidaat-shard-sleutels voor te stellen en te waarschuwen voor monotone velden. Omdat de sleutel later moeilijk te wijzigen is, is het belangrijk om elke aanbeveling te valideren aan de hand van daadwerkelijke workloads voordat u deze toepast.

Ja. Monitoring op basis van AI kan tracHet systeem analyseert de datagroei, de CPU-belasting en de querylatentie om te voorspellen wanneer een enkele server overbelast raakt. Het geeft het juiste moment aan om servers te sharden, hoewel engineers de capaciteitsplannen moeten bevestigen voordat ze actie ondernemen.

Ranged sharding verdeelt gegevens in aaneengesloten waardebereiken, wat geschikt is voor bereikquery's, maar het risico op ongelijkmatige verdeling van de gegevensblokken met zich meebrengt. Hashed sharding hasht de sleutel om schrijfbewerkingen gelijkmatig over de shards te verdelen, waardoor de schrijfdistributie verbetert ten koste van efficiรซnte bereikscans.

Ja. Schakel sharding in op de database, zorg ervoor dat er een index bestaat op de gekozen shard-sleutel en voer vervolgens sh.shardCollection() uit op de namespace. MongoDB Het systeem begint automatisch met het verdelen van bestaande documenten in stukken over de beschikbare shards.

Vat dit bericht samen met: