MongoDB Sharding: Schritt-für-Schritt-Anleitung mit Beispiel

⚡ Intelligente Zusammenfassung

MongoDB Sharding zerlegt große Datensätze in kleinere Teilmengen, die auf mehrere Rechner verteilt werden. MongoDB Durch die Aufteilung in Instanzen wird die CPU-Last auf einzelne Server reduziert. Ein Sharded Cluster kombiniert Shards, einen Konfigurationsserver und einen Router, um Speicher und Abfragedurchsatz horizontal zu skalieren.

  • 🧩 Kernkonzept: Sharding partitioniert eine logische Sammlung auf viele Shards, dennoch behandeln Abfragen die Daten weiterhin als eine einzige Sammlung.
  • ???? ️ Cluster Komponenten: Ein Sharded Cluster benötigt Shards für die Daten, einen Konfigurationsserver für Metadaten und einen Router zur Weiterleitung von Client-Befehlen.
  • ⚙️ Implementierungsablauf: Starten Sie den Konfigurationsserver, starten Sie den Mongos-Router, fügen Sie Shards hinzu und aktivieren Sie dann das Sharding für die Datenbank und die Collection.
  • 🔑 Shard-Schlüssel: Der Shard-Schlüssel bestimmt, wie Dokumente verteilt werden, daher sind eine hohe Kardinalität und gleichmäßige Zugriffsmuster unerlässlich.
  • 📈 Hauptnutzen: Sharding ermöglicht horizontale Skalierbarkeit, indem Speicher und Arbeitslast verteilt werden, anstatt einen einzelnen Server aufzurüsten.

MongoDB Sharding: Schritt-für-Schritt-Anleitung mit Beispiel

Was ist Sharding? MongoDB?

Sharding ist ein Konzept in MongoDB, das große Datensätze in mehrere kleine Datensätze aufteilt MongoDB Instanzen.

Manchmal sind die Daten darin MongoDB Die Datenmengen werden so umfangreich sein, dass Abfragen an solch große Datensätze eine hohe CPU-Auslastung des Servers verursachen können. Um diesem Problem zu begegnen, MongoDB verfügt über ein Sharding-Konzept, bei dem es sich im Wesentlichen um die Aufteilung von Datensätzen auf mehrere handelt MongoDB Instanzen.

Die Sammlung, die durchaus groß sein kann, ist tatsächlich auf mehrere Sammlungen, sogenannte Shards, aufgeteilt. Logisch betrachtet funktionieren alle Shards wie eine einzige Sammlung.

Vorteile des Sharding in MongoDB

Vor der Implementierung eines Sharded Clusters ist es hilfreich zu verstehen, warum Teams Sharding einsetzen. Die wichtigsten Vorteile sind:

  • Horizontale Skalierbarkeit: Die Daten werden auf viele Standardserver verteilt, anstatt eine einzelne Maschine immer größer werden zu lassen.
  • Höherer Durchsatz: Lese- und Schreibvorgänge werden parallel über die Shards hinweg ausgeführt, sodass der Cluster mehr Anfragen pro Sekunde bearbeiten kann.
  • Größere Speicherkapazität: Die kombinierte Festplatte aller Shards kann Datensätze speichern, die weitaus größer sind, als ein einzelner Server speichern könnte.
  • Hohe Verfügbarkeit: Wenn jeder Shard als Replikatset bereitgestellt wird, führt der Ausfall eines einzelnen Knotens nicht zum Ausfall des gesamten Clusters.
  • Ausgeglichene Last: Das MongoDB Der Balancer verteilt Datenblöcke automatisch neu, um zu verhindern, dass ein einzelner Shard zu einem Hotspot wird.

Zusammengenommen machen diese Vorteile Sharding zum Standardansatz für die Skalierung. MongoDB über die Grenzen eines einzelnen Servers hinaus.

So implementieren Sie Sharding

Shards werden mithilfe von Clustern implementiert, die nichts anderes sind als eine Gruppe von MongoDB Instanzen.

Die Bestandteile eines Splitters umfassen:

  1. Eine Scherbe – Das ist das Grundlegende, und das ist nichts anderes als ein MongoDB Instanz, die die Teilmenge der Daten enthält. In Produktionsumgebungen müssen alle Shards Teil von Replikatsätzen sein.
  2. Konfigurationsserver - Dies ist ein MongoDB Instanz, die Metadaten über den Cluster enthält, im Grunde Informationen über die verschiedenen MongoDB Instanzen, die die Shard-Daten enthalten werden.
  3. Ein Router - Dies ist ein MongoDB Die Instanz, die im Wesentlichen dafür zuständig ist, die vom Client gesendeten Befehle an die richtigen Server weiterzuleiten.

Schritt für Schritt Sharding Cluster Beispiel

Schritt 1) Erstellen Sie eine separate Datenbank für den Konfigurationsserver.

mkdir /data/configdb

Schritt 2) Starte das MongoDB Instanz im Konfigurationsmodus. Angenommen, wir haben einen Server namens Server D, der unser Konfigurationsserver sein soll. Wir müssten den folgenden Befehl ausführen, um den Server als Konfigurationsserver zu konfigurieren.

mongod --configdb ServerD:27019

Schritt 3) Starten Sie die Mongos-Instanz, indem Sie den Konfigurationsserver angeben.

mongos --configdb ServerD:27019

Schritt 4) Stellen Sie über die Mongo-Shell eine Verbindung zur Mongos-Instanz her.

mongo --host ServerD --port 27017

Schritt 5) Falls Sie Server A und Server B haben, die dem Cluster hinzugefügt werden müssen, führen Sie die folgenden Befehle aus.

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

Schritt 6) Aktivieren Sie Sharding für die Datenbank. Wenn Sie die Employeedb-Datenbank sharden möchten, führen Sie den folgenden Befehl aus.

sh.enableSharding("Employeedb")

Schritt 7) Aktivieren Sie Sharding für die Sammlung. Wenn Sie also die Mitarbeitersammlung sharden möchten, führen Sie den folgenden Befehl aus.

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

Wie man einen Shard Key auswählt MongoDB

Der Shard-Schlüssel ist das indizierte Feld oder die indizierte Feldgruppe, die MongoDB Der Schlüssel bestimmt, welcher Shard welches Dokument speichert. Da der Schlüssel die Datenverteilung steuert, ist seine Wahl die wichtigste Entscheidung bei einer Sharded-Bereitstellung. Ein ungeeigneter Schlüssel konzentriert Daten und Datenverkehr auf einen einzigen Shard und macht so die Vorteile des Shardings zunichte.

Ein starker Shard-Schlüssel weist im Allgemeinen folgende Eigenschaften auf:

  • Hohe Kardinalität: Das Feld sollte viele mögliche Werte haben, damit die Daten in viele fein abgestufte Einheiten unterteilt werden können.
  • Niedrige Frequenz: Kein einzelner Wert sollte dominieren, da sonst die Dokumente, die diesen Wert teilen, auf einem einzigen Splitter zusammenlaufen.
  • Nicht-monotone Veränderung: Schlüssel, die sich ständig erhöhen, wie z. B. Zeitstempel, senden jeden neuen Schreibvorgang an denselben Shard und erzeugen so einen Hotspot.

MongoDB Unterstützt werden zwei Sharding-Strategien basierend auf dem Schlüssel. Ranged Sharding teilt Daten in zusammenhängende Bereiche auf und eignet sich für Bereichsabfragen, während Hashed Sharding eine Hash-Funktion anwendet, um Schreibvorgänge gleichmäßig auf die Shards zu verteilen. Teams beginnen oft mit Hashed Sharding, wenn viele Schreibvorgänge anfallen, und wechseln zu Ranged Sharding, wenn bereichsbasierte Lesevorgänge überwiegen. Unabhängig von der gewählten Strategie sollte der Schlüssel vor der endgültigen Festlegung anhand realistischer Abfragemuster getestet werden, da der Shard-Schlüssel nach dem Laden der Daten nicht mehr ohne Weiteres geändert werden kann.

Sharding vs Replikation in MongoDB

Sharding und Replikation sind komplementäre, aber unterschiedliche Funktionen. Die folgende Tabelle verdeutlicht die Unterschiede, damit Sie die jeweilige Funktion korrekt anwenden können. In der Praxis werden in Produktionsclustern beide Verfahren gemeinsam eingesetzt.

Aspekt Schärfen Replikation
Zweck Skalieren Sie horizontal durch Aufteilung der Daten Schützen Sie Ihre Daten und halten Sie sie verfügbar
Daten zu jedem Knoten Eine Teilmenge (ein Splitter) der Daten Eine vollständige Kopie der Daten
Primärer Nutzen Mehr Speicherplatz und Durchsatz Fehlertoleranz und Leseskalierung
Schlüsselkomponenten Shards, Konfigurationsserver, MongoDB-Router Primär- und Sekundärmitglieder

Kurz gesagt, Sharding erfüllt das Bedürfnis nach Skalierbarkeit, während Replikation das Bedürfnis nach Verfügbarkeit erfüllt, und eine robuste Bereitstellung kombiniert beides.

Häufig gestellte Fragen

Ja. KI-Tools können Abfragemuster und Feldkardinalität analysieren, um Kandidaten für Shard-Schlüssel vorzuschlagen und vor monotonen Feldern zu warnen. Da der Schlüssel später nur schwer geändert werden kann, sollten Sie jede Empfehlung anhand realer Workloads validieren, bevor Sie sie anwenden.

Ja. KI-basierte Überwachung kann tracAnhand des Datenwachstums, der CPU-Auslastung und der Abfragelatenz wird prognostiziert, wann ein einzelner Server überlastet sein wird. Das System erkennt den optimalen Zeitpunkt für Sharding, wobei die Entwickler die Kapazitätsplanung jedoch vorab überprüfen sollten.

Ranged Sharding teilt Daten in zusammenhängende Wertebereiche auf, was zwar für Bereichsabfragen geeignet ist, aber das Risiko ungleichmäßiger Datenblöcke birgt. Hashed Sharding hingegen verwendet einen Hashwert für den Schlüssel, um Schreibvorgänge gleichmäßig auf die Shards zu verteilen. Dies verbessert die Schreibverteilung, geht aber auf Kosten effizienter Bereichsabfragen.

Ja. Aktivieren Sie Sharding in der Datenbank, stellen Sie sicher, dass ein Index für den gewählten Shard-Schlüssel existiert, und führen Sie dann sh.shardCollection() im Namespace aus. MongoDB beginnt automatisch damit, bestehende Dokumente in Teile auf die verfügbaren Shards zu verteilen.

Fassen Sie diesen Beitrag mit folgenden Worten zusammen: