MongoDB - Sharding: Ein Anfängerleitfaden

Hallo da draußen, zukünftige Datenbank-Zauberer! Heute machen wir uns auf eine aufregende Reise in die Welt des MongoDB-Shardings. Keine Sorge, wenn du neu im Programmieren bist – ich werde dein freundlicher Guide sein, und wir werden dieses Thema Schritt für Schritt erkunden. Bis zum Ende dieses Tutorials wirst du wie ein Profi sharding! Lass uns eintauchen!

MongoDB - Sharding

Warum Sharding?

Stellen Sie sich vor, Sie betreiben eine belebte Bibliothek. Wenn Ihre Sammlung von Büchern wächst, erkennen Sie, dass das Halten aller Bücher in einem großen Raum problematisch wird. Es wird eng und das Auffinden von Büchern dauert länger. Was tun Sie? Sie könnten in Betracht ziehen, in mehrere Räume zu erweitern, jeder mit unterschiedlichen Buchkategorien. Genau das tut Sharding für Datenbanken!

Sharding ist eine Methode zur Verteilung von Daten über mehrere Maschinen hinweg. Es verleiht Ihrer Datenbank Superkräfte, allowing es mehr Daten zu verwalten und mehr Anfragen zu verarbeiten als ein einzelner Server könnte.

Hier sind die Hauptgründe, warum wir Sharding verwenden:

  1. Skalierbarkeit: Wenn Ihre Daten wachsen, können Sie mehr Server hinzufügen, um sie zu verwalten.
  2. Leistung: Abfragen können parallel über mehrere Server verarbeitet werden.
  3. Hohe Verfügbarkeit: Wenn ein Server ausfällt, können andere weiterhin Anfragen bedienen.

Sharding in MongoDB

Nun, da wir verstehen, warum Sharding wichtig ist, schauen wir uns an, wie MongoDB es implementiert.

Grundlegende Begriffe

Bevor wir uns in den Code ein Tauchen, lassen Sie uns einige Schlüsselbegriffe kennenlernen:

  1. Shard: Ein einzelner Server oder Replica-Set, der einen Teil der Daten speichert.
  2. Shard-Schlüssel: Das/die Felder, die verwendet werden, um Daten über Shards zu verteilen.
  3. Chunk: Ein kontinuierlicher Bereich von Shard-Schlüsselwerten.
  4. Config-Server: Spezielle MongoDB-Instanzen, die Metadaten über den Cluster speichern.
  5. Mongos: EinRouting-Dienst, der Anfragen an die entsprechenden Shards weiterleitet.

Einrichten eines Sharding-Clusters

Lassen Sie uns durch den Prozess des Einrichtens eines grundlegenden Sharding-Clusters gehen. Keine Sorge, wenn das initially komplex erscheint – wir werden es Schritt für Schritt durchbrechen!

Schritt 1: Starten der Config-Server

Zuerst müssen wir unsere Config-Server starten. In einer Produktionsumgebung hätten Sie typischerweise drei, aber für dieses Beispiel verwenden wir einen:

mongod --configsvr --replSet configReplSet --port 27019 --dbpath /data/configdb

Dieser Befehl startet eine MongoDB-Instanz als Config-Server, verwendet Port 27019 und speichert ihre Daten in /data/configdb.

Schritt 2: Initialisieren des Config-Server-Replica-Sets

Nun initialisieren wir unser Config-Server-Replica-Set:

rs.initiate({
_id: "configReplSet",
members: [{ _id: 0, host: "localhost:27019" }]
})

Dies richtet unseren Config-Server als ein einziges Replica-Set ein.

Schritt 3: Starten der Shard-Server

Als nächstes starten wir zwei Shard-Server:

mongod --shardsvr --replSet shard1 --port 27018 --dbpath /data/shard1
mongod --shardsvr --replSet shard2 --port 27020 --dbpath /data/shard2

Diese Befehle starten zwei MongoDB-Instanzen als Shard-Server auf verschiedenen Ports.

Schritt 4: Initialisieren der Shard-Replica-Sets

Für jeden Shard müssen wir sein Replica-Set initialisieren:

// Für shard1
rs.initiate({
_id: "shard1",
members: [{ _id: 0, host: "localhost:27018" }]
})

// Für shard2
rs.initiate({
_id: "shard2",
members: [{ _id: 0, host: "localhost:27020" }]
})

Schritt 5: Starten des Mongos-Routers

Jetzt starten wir unseren Mongos-Router:

mongos --configdb configReplSet/localhost:27019 --port 27017

Dies startet die Mongos-Instanz undweist sie, wo sie die Config-Server finden können.

Schritt 6: Shards zum Cluster hinzufügen

Schließlich fügen wir unsere Shards zum Cluster hinzu:

sh.addShard("shard1/localhost:27018")
sh.addShard("shard2/localhost:27020")

Diese Befehle informieren Mongos über unsere Shards.

Sharding für eine Datenbank und Kollektion aktivieren

Nun, da unser Sharding-Cluster eingerichtet ist, aktivieren wir Sharding für eine Datenbank und Kollektion:

// Sharding für die 'mydb' Datenbank aktivieren
sh.enableSharding("mydb")

// Die 'users' Kollektion sharding, wobei das 'username' Feld als Shard-Schlüssel verwendet wird
sh.shardCollection("mydb.users", { "username": 1 })

Dies aktiviert Sharding für die 'mydb' Datenbank und sharding die 'users' Kollektion basierend auf dem 'username' Feld.

Daten einfügen und abfragen

Nun, da wir unsere Sharding-Konfiguration haben, fügen wir einige Daten ein und sehen, wie es funktioniert:

// Mit Mongos verbinden
mongo --port 27017

// Zur Datenbank wechseln
use mydb

// Einige Benutzer einfügen
for (let i = 0; i < 10000; i++) {
db.users.insertOne({ username: "user" + i, age: Math.floor(Math.random() * 100) })
}

// Nach einem bestimmten Benutzer abfragen
db.users.find({ username: "user5000" })

Wenn wir diese Abfrage ausführen, leitet Mongos die Anfrage an den geeigneten Shard basierend auf dem Shard-Schlüssel (username) weiter.

Sharding-Methoden

MongoDB bietet mehrere Sharding-Methoden zur Verteilung von Daten über Shards:

Methode Beschreibung Anwendungsfall
Range Sharding Teilt Daten in Bereiche basierend auf Shard-Schlüsselwerten Gut für Shard-Schlüssel mit guter Kardinalität und die selten wechseln
Hash Sharding Verwendet einen Hash des Shard-Schlüssels zur Datenverteilung Stellt eine gleichmäßige Datenverteilung sicher, gut für monotonically wechselnde Shard-Schlüssel
Zone Sharding Ermöglicht die Verknüpfung von Shard-Schlüsselbereichen mit bestimmten Shards Nützlich für Datenlokalität oder gestaffelte Speicherung

Schlussfolgerung

Glückwunsch! Sie haben gerade Ihre ersten Schritte in die Welt des MongoDB-Shardings unternommen. Wir haben besprochen, warum Sharding wichtig ist, wie man ein grundlegendes Sharding-Cluster einrichtet und wie man mit sharded Kollektionen arbeitet.

Denken Sie daran, Sharding ist ein leistungsstarkes Werkzeug, aber es fügt auch Komplexität zu Ihrer Datenbankkonfiguration hinzu. Überlegen Sie sorgfältig, ob Sie Sharding für Ihren spezifischen Anwendungsfall benötigen. Während Sie Ihre MongoDB-Reise fortsetzen, werden Sie mehr fortgeschrittene Sharding-Konzepte und Techniken kennenlernen.

Weiters üben, neugierig bleiben, und bald werden Sie ein Sharding-Experte sein! Frohes Coden, zukünftige Datenbank-Architekten!

Credits: Image by storyset