Was ist MongoDB?

Relationale Datenbanken waren jahrzehntelang die bevorzugte Lösung zur Verwaltung von Daten. Doch die Vielfalt an Daten, die moderne Webanwendungen ausmachen, haben Datenbanken mit dokumentenorientiertem Ansatz wie MongoDB zu ernsthaften Konkurrenten des traditionellen Modells gemacht. Wir erklären, wie dieser neue Ansatz funktioniert, und welche Vorteile er bietet.

Was macht MongoDB aus?

MongoDB, abgeleitet aus dem Englischen „humongous“ (Deutsch: gigantisch, riesig), ist ein dokumentenorientiertes Datenbanksystem. Im Gegensatz zu relationalen Datenbanken, wo Daten in einer strukturierten Tabelle gespeichert werden, werden Daten in MongoDB-Datenbanken in sogenannten unstrukturierten Sammelmappen (Collections) gespeichert.

Zudem verzichtet MongoDB auf SQL als Anfragesprache, und wird somit als NoSQL-Datenbanksystem gekennzeichnet. Stattdessen nutzt MongoDB die auf JavaScript basierende MongoDB Query Language (MQL) als Anfragesprache. Dementsprechend werden MongoDB-Datensätze im BSON-Format gespeichert, das dem JSON-Format nachempfunden ist. Dank dieser Tatsache werden sämtliche JavaScript-Datentypen unterstützt, weshalb MongoDB die optimale Wahl für viele JavaScript-basierten Plattformen ist.

Eine weitere Eigenschaft von MongoDB-Datenbanken ist ihre horizontale Skalierbarkeit. Das heißt, dass die Daten einer Datenbank über mehrere Server verteilt sein können, anstatt an einer zentralen Stelle gespeichert zu werden. So kann man die Verfügbarkeit der Daten und die gesamte Performance der Datenbank verbessern. Diese Art von Skalierung ist meistens kostengünstiger als einen einzelnen Server mit performanterer Hardware auszustatten (vertikale Skalierung).

Wie funktioniert MongoDB?

MongoDB arbeitet, anders als MySQL, dokumentenorientiert und verfolgt entsprechend einen komplett anderen Ansatz bei der Speicherung der Daten. Anstatt die Daten tabellarisch zu speichern, wo jede Zeile dieselbe Anzahl an Felder hat, die mit Werten befüllt werden müssen, werden Daten unstrukturiert in BSON-Dokumente gespeichert. Jedes Dokument darf beliebig viele Felder haben, die auch nicht miteinander übereinstimmen müssen. Die Dokumente ersetzen somit praktisch die Zeilen in einer SQL-Tabelle, und die in diesen Dokumenten definierte Felder die Spalten.

Es gibt mehrere Tools, mit denen man an MongoDB-Datenbanken arbeiten kann. Neben der vertrauten MongoDB Shell gibt es auch MongoDB Compass, ein grafisches Tool zur Verwaltung von MongoDB-Datenbanken. Wir werden uns aber auf Shell-Befehle konzentrieren.

Da die MQL auf JavaScript basiert, gibt es schon eine ganze Reihe von vorgefertigten Funktionen, die komplexe Anfragen und Befehle ermöglichen. Aber grundsätzlich haben alle Schreib- und Lesebefehle denselben Aufbau, der im folgenden Beispiel zu sehen ist. Über diesen Befehlen hinaus gibt es zahlreiche weitere Befehle, mit denen man seine MongoDB-Datenbank verwalten kann. Diese werden in der MongoDB-Dokumentation ausführlich beschrieben und erklärt.

db.studierende.find({ Name: "Fritz" })
db.studierende.updateOne({ Name: "Fritz" }, { $set: { Semester: 2 } })
db.studierende.deleteOne({ Name: "Peter" })
db.studierende.insertOne({
  Name: "Else",
  Alter: 18,
  Semester: 1
})

Im obigen Beispiel sind mehrere aufeinanderfolgende Befehle an einer MongoDB-Datenbank zu sehen, wovon jeder gleich aufgebaut ist. „db“ steht für die gesamte Datenbank, und „studierende“ für die Sammelmappe, in der die jeweilige Operation vorgenommen werden soll. Darauf folgt die Methode, die angewandt werden soll.

Die find()-Methode kann man nutzen, um nach einem bestimmten Dokument zu suchen. Lässt man das Parameterfeld leer, werden alle Dokumente in dieser Sammelmappe zurückgegeben. Im obigen Beispiel wird aber nach allen Dokumenten gesucht, wo das Feld „Name“ den Wert „Fritz“ hat. Die updateOne()-Methode kann man nutzen, um Werte in einem Dokument zu überschreiben. Bei der updateOne()-Methode werden zwei Argumente übergeben. Das erste ist das sogenannte Auswahlkriterium, und das zweite ist das Schlüssel-Wert-Paar, das überschrieben werden soll. In diesem Fall wird das Feld „Semester“ bei allen Studierenden, die „Fritz“ heißen, mit einer 2 befüllt.

Die deleteOne()-Methode bekommt nur ein einzelnes Argument, nämlich das Auswahlkriterium, wonach Dokumente entfernt werden sollen. In dem Beispiel werden alle Studierenden, die „Peter“ heißen, aus der Datenbank entfernt. Die insertOne()-Methode bekommt ebenso ein Argument, diesmal aber den kompletten JSON-Inhalt des einzufügenden Dokuments. Beim Einfügen von Dokumenten ist zu beachten, dass jedes Dokument in einer MongoDB-Sammelmappe eine eindeutige 12-Byte Hexadezimalzahl als Objekt-ID haben muss. Falls dieser Parameter beim Einfügen des Dokuments nicht angegeben wird, generiert MongoDB automatisch eine ID.

Vorteile von MongoDB

Der Aufbau von MongoDB hat für Nutzerinnen und Nutzer einige Vorteile, vor allem im Bereich der Flexibilität und Skalierbarkeit. Zum einen bietet die dokumentenbasierte Speicherung von Daten den Vorteil, dass nicht alle Einträge dieselben Attribute haben müssen, wie bei relationalen Datenbanken. Dies erlaubt die Speicherung von unstrukturierten und semistrukturierten Daten. Zudem können individuelle Dokumente umstrukturiert werden (z. B. indem man ein Attribut/Feld hinzufügt oder löscht), ohne dass andere Dokumente in der selben Sammelmappe auch umstrukturiert werden müssen. Da die Dokumente im BSON-Format gespeichert sind, erhält man den zusätzlichen Vorteil, dass MongoDB-Datenbanken einen hohen Grad an Kompatibilität mit vielen gängigen JavaScript-Plattformen bieten.

Zusätzlich zur Speicherung von unstrukturierten Daten bietet MongoDB auch einen hohen Grad an horizontaler Skalierbarkeit, ohne die Prinzipien des ACID-Modells (Atomicity, Consistency, Isolation, Durability) zu verletzen. Bei verteilten Datenbanken ist es oft schwer, Konsistenz zu garantieren, da nicht alle Daten auf demselben Server gespeichert sind. Wenn Änderungen an mehreren Dokumenten gleichzeitig vorgenommen werden, können diese Änderungen nicht sofort von allen beteiligten Servern übernommen werden. Bei einem hohen Anfragenvolumen kann das manchmal zu inkonsistenten Daten führen. Doch seit der Veröffentlichung von MongoDB 4.2 in 2019 lassen sich Änderungen an mehreren Dokumenten auf unterschiedlichen Servern vornehmen, ohne Konsistenz oder Verfügbarkeit zu opfern.

Tipp

Sie brauchen eine dokumentenbasierte Datenbank, die mit den Anforderungen Ihrer Webanwendung wächst? Dann ist MongoDB die perfekte Lösung für Sie!

Für welche Einsatzgebiete ist MongoDB geeignet?

MongoDB ist immer dann eine exzellente Wahl, wenn Sie Webprojekte umsetzen wollen, die auf sehr großen, unstrukturierten Datenmengen basieren. Das dokumentenbasierte Arbeiten, ohne an ein Schema gebunden zu sein, ist prädestiniert für viele unterschiedliche Datentypen, die gespeichert und schnell verarbeitet werden müssen.

Das Datenbanksystem ermöglicht außerdem die horizontale, nahezu unbegrenzte Skalierung, da die Datenbanken problemlos auf mehrere Server verteilt werden können, ohne die Funktionsfähigkeit zu beeinträchtigen. Um Sicherheit und Verfügbarkeit der Daten langfristig zu gewährleisten, können mit MongoDB außerdem unkompliziert Kopien des Datenbestands erstellt und auf verschiedenen Servern zur Verfügung gestellt werden. Auch bei der Zusammenfassung von Datenmengen aus einer oder mehreren Quellen spielt die dokumentenorientierte Datenbank ihre Stärken aus.

Der Einsatz von MongoDB ist dementsprechend für alle Webprojekte zu empfehlen, die sich durch folgende Eigenschaften auszeichnen:

  • Skalierbarkeit: Wächst Ihr Webprojekt, steigt in der Regel die Zahl der Anfragen, was entsprechend höhere Anforderungen an die Datenbank stellt.
  • Verfügbarkeit: Sie sind darauf angewiesen, dass Ihre Webanwendung dauerhaft verfügbar ist, selbst im Falle eines Serverausfalls.
  • Flexibilität: Ihr Projekt soll jederzeit dynamisch angepasst werden können.

Sie wissen nicht, welches Datenbankmodell das passende für Ihr Webprojekt ist? Sie müssen sich nicht entscheiden: Auch eine Kombination verschiedener Typen ist möglich – und kann durchaus die perfekte Lösung für Ihr Anforderungsprofil darstellen.

Tipp

Sie haben sich für MongoDB entschieden und wollen anfangen, Ihre Datenbank aufzusetzen? Unser Artikel zur Installation von MongoDB hilf Ihnen, einzusteigen.