Was ist MongoDB? Datenmodell und Einsatz

Autor: Veröffentlicht

Kurz gesagt: MongoDB ist eine dokumentenorientierte Datenbank: Sie speichert Informationen in Strukturen, die JSON-Objekten ähneln, statt sie ausschließlich in Tabellen mit Zeilen und Spalten zu organisieren. Sie eignet sich unter anderem für Anwendungen, deren Daten verschachtelte Strukturen oder unterschiedliche Merkmale aufweisen. Sie ist jedoch nicht automatisch eine schnellere oder einfachere Alternative zu SQL-Datenbanken — die Wahl hängt vor allem davon ab, wie Daten geschrieben und gelesen werden.

Wie MongoDB Daten speichert

MongoDB gehört zu den NoSQL-Datenbanken, also zu einer Gruppe von Systemen, die nicht ausschließlich auf dem traditionellen relationalen Modell beruhen. Die grundlegende Dateneinheit ist ein Dokument: eine Sammlung von Feldern und Werten, die beispielsweise ein Produkt, einen Benutzer oder eine Bestellung beschreibt. Dokumente werden in Collections zusammengefasst. Diese erfüllen eine ähnliche Funktion wie Tabellen, schreiben aber nicht für alle Datensätze dieselbe Feldstruktur vor.

Ein Dokument lässt sich in einer gut lesbaren JSON-Darstellung zeigen:

{
  "_id": "produkt-101",
  "name": "Stadtrucksack",
  "preisGroszy": 18900,
  "farben": ["schwarz", "marineblau"],
  "eigenschaften": {
    "volumenLiter": 20,
    "wasserdicht": true
  }
}

Das Feld _id ist die eindeutige Kennung des Dokuments. Gibt die Anwendung sie nicht vor, wird beim regulären Einfügen eines Dokuments in der Regel eine Kennung vom Typ ObjectId vergeben. Die übrigen Felder können unter anderem Text, Zahlen, Listen und weitere Dokumente enthalten.

Intern verwendet MongoDB BSON, ein binäres Dokumentformat, das auch Datentypen unterstützt, die in JSON nicht direkt vorkommen, beispielsweise Datumswerte. Die Aussage, MongoDB „speichert JSON“, ist daher eine nützliche Vereinfachung, aber keine genaue Beschreibung des Speicherformats.

Wie sich MongoDB von einer SQL-Datenbank unterscheidet

Relationale Datenbanken wie PostgreSQL oder MySQL organisieren Daten in Tabellen und ermöglichen es, sie anhand gemeinsamer Felder zu verknüpfen. Beispielsweise kann eine Bestelltabelle auf eine Kundentabelle verweisen. SQL ist eine Sprache, mit der sich unter anderem Abfragen an solche Datenbanken stellen lassen.

In MongoDB werden zusammengehörige Informationen häufig innerhalb eines einzigen Dokuments gespeichert. Eine Bestellung kann eine Liste der Bestellpositionen und die zum Kaufzeitpunkt geltende Lieferadresse enthalten. Dadurch kann die Anwendung alle benötigten Daten abrufen, ohne sie aus vielen einzelnen Strukturen zusammensetzen zu müssen.

BereichMongoDBRelationale Datenbank
GrundstrukturDokumente in CollectionsZeilen in Tabellen
DatenmodellVerschachtelungen und Listen als natürliche BestandteileExplizit definierte Spalten und Beziehungen
VerknüpfungenEingebettete Daten oder VerweiseFremdschlüssel und Joins
AbfragenDokumentoperationen und AggregationspipelinesSQL-Abfragen

Dieser Vergleich bedeutet nicht, dass die Möglichkeiten strikt voneinander getrennt sind. Relationale Datenbanken können JSON unterstützen, und MongoDB kann Daten aus Collections verknüpfen, unter anderem mit der Operation $lookup. MongoDB unterstützt auch Transaktionen über mehrere Dokumente hinweg. Deren Aufwand und Anforderungen an die Bereitstellung müssen jedoch bei der Planung berücksichtigt werden.

Ein flexibles Schema bedeutet nicht, dass es keine Regeln gibt

Dokumente innerhalb einer Collection können unterschiedliche Felder haben. Im Katalog eines Shops kann ein Rucksack ein Fassungsvermögen in Litern besitzen, während ein Monitor eine Bildschirmdiagonale und eine Auflösung hat. Es ist nicht nötig, für jede Produktart denselben Satz leerer Spalten anzulegen.

Flexibilität macht die Planung des Datenmodells jedoch nicht überflüssig. Speichert ein Teil der Anwendung einen Preis als Zahl und ein anderer als Text, werden Filterung und Berechnungen schwieriger. MongoDB bietet eine Schemavalidierung: Regeln, die unter anderem prüfen, ob erforderliche Felder vorhanden sind und die richtigen Datentypen haben.

Außerdem muss entschieden werden, welche Daten in ein Dokument eingebettet werden und für welche ein Verweis gespeichert wird. Die in einer Bestellung gespeicherte Lieferadresse sollte normalerweise als historische Kopie erhalten bleiben. Das aktuelle Kundenprofil wird besser separat gespeichert, statt seine Kopien in sämtlichen Bestellungen zu aktualisieren.

Ein Dokument sollte nicht unbegrenzt um weitere Daten ergänzt werden. MongoDB begrenzt die Größe eines BSON-Dokuments auf 16 MiB. Eine stetig wachsende Ereignishistorie benötigt daher in der Regel eine eigene Collection.

Wann MongoDB sinnvoll ist und wann PostgreSQL infrage kommt

MongoDB ist eine sinnvolle Option, wenn eine Anwendung mit umfangreichen Objekten arbeitet, deren Inhalte häufig gemeinsam abgerufen werden. Beispiele sind ein Produktkatalog mit unterschiedlichen Attributen, ein Content-Management-System oder Gerätekonfigurationen. Allein die Tatsache, dass eine Anwendung JavaScript verwendet, ist kein ausreichender Grund für diese Wahl.

Eine relationale Datenbank sollte zuerst in Betracht gezogen werden, wenn zahlreiche Beziehungen, Integritätsbedingungen zwischen Tabellen und Berichte, die viele Arten von Daten zusammenführen, im Vordergrund stehen. Das gilt beispielsweise für ein Abrechnungssystem, in dem sich Abhängigkeiten leicht kontrollieren lassen müssen. Dies kann wichtiger sein als eine frei gestaltbare Dokumentstruktur.

Notiere vor der Entscheidung die drei häufigsten Operationen der Anwendung, beispielsweise die Suche nach einem Produkt, das Abrufen eines Warenkorbs und das Speichern einer Bestellung. Erstelle anschließend ein Beispielmodell in beiden Datenbanken. Prüfe, wie viele Lesevorgänge und Aktualisierungen jede Operation benötigt und wo Kopien derselben Informationen entstehen.

Einstieg und wichtige Punkte für den Produktiveinsatz

MongoDB lässt sich auf der eigenen Infrastruktur betreiben oder über MongoDB Atlas nutzen, einen verwalteten Cloud-Dienst. Für die Arbeit mit Daten stehen unter anderem das grafische Werkzeug MongoDB Compass, die Shell mongosh und Treiber für Programmiersprachen zur Verfügung. Aktuelle Preise, Limits und der Umfang der Datensicherungen in Atlas sollten in der offiziellen Dokumentation und der Preisübersicht des gewählten Tarifs geprüft werden.

Erstelle zunächst eine Test-Collection, füge etwa ein Dutzend Dokumente hinzu und führe typische Abfragen aus. Wähle anschließend Indizes, also zusätzliche Strukturen zur Beschleunigung der Suche, passend zu den tatsächlich verwendeten Filtern und Sortierungen. Zu viele Indizes beanspruchen Speicherplatz und erhöhen den Aufwand beim Schreiben.

Konfiguriere vor dem Produktiveinsatz die Authentifizierung, Beschränkungen für den Netzwerkzugriff und Datensicherungen. Teste auch die Wiederherstellung der Daten. Nutze den ersten Prototyp, um das Modell und die Abfragen zu prüfen — erst Messungen mit repräsentativen Daten erlauben eine Einschätzung, ob MongoDB zur konkreten Anwendung passt.

Siehe auch: Was ist 2FA?

Lesen Sie auch

Wie PHP-FPM PHP-Anfragen verarbeitet, sich vom Webserver unterscheidet und wie du Prozesse an Last und Hosting-Ressourcen anpasst.
BIND ist offene DNS-Serversoftware. Erfahre, welche Aufgaben sie übernimmt und wann sich der Betrieb eines eigenen Servers lohnt.
Was Polens REGON-Register und seine Kennnummer bedeuten, wie sie sich von NIP und KRS unterscheiden und wie Sie Unternehmensdaten prüfen.