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.
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:
- 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.
- 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.
- 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.

