MongoDB – die flexible und skalierbare NoSQL-Datenbank

Relationale Datenbanken waren jahrzehntelang die unumstrittene Lösung zur Verwaltung elektronischer Daten. Nicht grundlos stellt das 1995 veröffentlichte Datenbank-Managementsystem MySQL auch heute noch die Basis für zahllose Webprojekte dar. Das steigende Volumen und die Vielfalt an Daten, die moderne Webanwendungen ausmachen, haben allerdings Datenbanken mit nichtrelationalem Ansatz zu ernsthaften Konkurrenten des traditionellen Modells gemacht. Diese verteilten Datenspeichersysteme wie das 2009 erschienene MongoDB arbeiten dokumentenorientiert und werden auch als NoSQL-Datenbanken bezeichnet, da sie auf SQL (Structured Query Language), die klassische Abfragesprache der relationalen Datenbanken, verzichten. Das stellt zwar höhere Ansprüche an die Anwendungsschicht, erlaubt aber Datenbestand und Arbeitsprozesse auf mehrere Server zu verteilen, was diese modernen Datenbanken quasi unbegrenzt skalierbar macht.

Was ist MongoDB?

2007 begann das Unternehmen 10gen mit der Entwicklung von MongoDB (abgeleitet von engl. humongous = „gigantisch, riesig“), einer dokumentenorientierten Open-Source-Datenbank, die knapp zwei Jahre später erstmals veröffentlicht und schnell zur beliebtesten NoSQL-Datenbank wurde. Bis heute ist 10gen, mittlerweile unter dem Namen MongoDB Inc., für die Weiterentwicklung der Software sowie den Vertrieb kommerzieller Enterprise-Lösungen verantwortlich.

MongoDB ist in der Programmiersprache C++ geschrieben und speichert Daten im BSON-Format (Binary JSON), das dem JSON-Format (JavaScript Object Notation) nachempfunden ist. Dank dieser Tatsache werden sämtliche JavaScript-Datentypen unterstützt, weshalb MongoDB die optimale Wahl für Node.js-Plattformen ist. MongoDB-Datenbanken enthalten eine oder mehrere Datensammlungen, die verschiedene Dokumente mit beliebig vielen und verschiedenartigen Datenfeldern verwalten.

Die Verbindung zum MongoDB-Datenbank-Server kann auf verschiedene Weisen aufgebaut werden. In den meisten Distributionen standardmäßig enthalten ist die Mongo Shell, ein Client, der den Zugriff via Kommandozeile ermöglicht. Ferner kann eine HTTP-basierte Administrationsoberfläche aktiviert und im Browser aufgerufen werden. Zusätzlich existieren verschiedene Nutzeroberflächen wie MongoChef, Robomongo oder Mongoclient mit deren Hilfe Sie die Daten grafisch anzeigen lassen und bearbeiten können. MongoDB läuft auf nahezu allen gängigen Linux-, Windows- und Mac-Systemen.

MongoDB vs. MySQL: Die beiden Datenbankmodelle im Vergleich

MongoDB arbeitet, anders als MySQL, dokumentenorientiert und verfolgt entsprechend einen komplett anderen Ansatz bei der Speicherung der Daten, wobei die Grundstruktur gewisse Ähnlichkeiten aufweist:

  • Anstatt in Tabellen werden die Daten in Sammelmappen (Collections) gespeichert.
  • Dokumente im BSON-Format ersetzen die Zeilen, in diesen Dokumenten definierte Felder die Spalten der SQL-Tabellen.
  • Ein Feld ist dabei immer ein Paar aus einem Schlüssel, der gleichzeitig den Namen des Feldes darstellt, und einem Wert. Dieser Wert kann für eine Zahl, ein Wort oder einen Text, aber auch für ganze Listen von Wörtern bzw. Zahlen oder eine komplette Datei stehen.
  • Ein MongoDB-Dokument ist also eine Sammlung von Schlüssel-Werte-Paaren, so wie prinzipiell auch die MySQL-Tabellenzeile.

Der entscheidende Unterschied ist, dass die Dokumente keinem festen Schema unterliegen, während alle Zeilen einer MySQL-Tabelle den gleichen Aufbau haben. Sie besitzen die gleiche Anzahl von Werten mit jeweils den gleichen Datentypen. Die einzelnen MongoDB-Dokumente hingegen haben ihre eigene, individuelle Struktur. Auf diese Weise können jederzeit neue Felder mit einem beliebigen Wert angelegt werden, was bei einer relationalen Datenbank wie MySQL eine komplette Umstrukturierung erfordert. Der Schlüssel muss zwar innerhalb eines Dokuments einzigartig sein, kann aber in anderen Dokumenten wieder vorkommen. Letzteres ist mit MySQL-Datenbanken nicht möglich und muss durch Relationen (Joins) zwischen den verschiedenen Tabellen geregelt werden, die bei MongoDB optional in Form von eingebetteten Dokumenten oder Referenzen herzustellen sind.

Ein weiterer elementarer Unterschied, der sich bei der Gegenüberstellung MongoDB vs. MySQL feststellen lässt, ist das unterschiedliche Vorgehen bei der Abfrage von Daten. MongoDB verzichtet als NoSQL-Datenbank logischerweise auf SQL als Abfragesprache und stützt die Verarbeitung der Daten stattdessen auf eine eigene Sprache. Diese ermöglicht die Kommunikation zwischen MongoDB und dem jeweiligen Client. Dazu nutzt die Datenbank die objektspezifischen Methoden der entsprechenden Programmiersprache der Client-Anwendung mithilfe sogenannter Libraries bzw. Driver, die separat auf der offiziellen Homepage heruntergeladen werden können.

Außerdem kann bei komplexen Abfragen auch das Map-Reduce-Verfahren eingesetzt werden, wie es für dokumentenbasierte Datenbanken üblich ist.

Mögliche Einsatzszenarien von MongoDB

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.

Mit der Verteilung der Daten auf mehrere Server geht auch ein entscheidender Unterschied zwischen MongoDB und relationalen Datenbanken einher: Im Anschluss an die Speicherung von Daten in eine MongoDB-Datenbank existiert ein kurzes Zeitfenster, in dem folgende Lesezugriffe nur den alten Datenbestand erhalten, was als Eventual Consistency (frei übersetzt: „letzten Endes konsistent“) bezeichnet wird. Dieses Konsistenzmodell kommt u. a. in der MySQL-Fork MariaDB zum Einsatz und hat beispielsweise den Vorteil, dass Datenbank-Server, die durch Netzwerkpartitionen vom größeren Datenbank-Cluster getrennt sind, nach wie vor Schreibzugriffe von Anwendungen zulassen 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.