© Excellent backgrounds/Shutterstock.com
Riesige Datenmengen schemafrei verwalten

MongoDB


Der Name MongoDB leitet sich vom englischen Begriff humongous ab, was so viel wie „gigantisch“ oder „wahnsinnig groß“ bedeutet. Dahinter verbirgt sich eine quell­offene, dokumentenorientierte NoSQL-Datenbank mit Ausfallsicherheit und horizontaler Skalierung [1]. Was das im Einzelnen bedeutet, werde ich in diesem Artikel näher beleuchten.

Die Einstiegshürde bei MongoDB ist sehr niedrig. Einfach die Distribution für Ihre Plattform runterladen [2], entpacken und los geht’s. Das in C++ implementierte [3] Executable mongod (bzw. mongod.exe) für den Datenbankserver liegt im Unterverzeichnis bin. Vor dem Start legen wir noch schnell das Default-Verzeichnis an, in dem MongoDB seine Dateien ablegt:

$ mkdir /data/db $ mongod

Danach horcht der Serverprozess bereits auf dem Default-Port 27017, 1 000 Ports höher können wir unter http://localhost:28017 auf ein rudimentäres Admin-GUI zugreifen. Auf der Kommandozeile verwenden wir das Administrationswerkzeug unserer Wahl, die sog. Mongo Shell, mit der wir uns zum Serverprozess verbinden:

$ mongo MongoDB shell version: 2.4.8 connecting to: test

Wir sind jetzt mit einer leeren Datenbank test verbunden und können dort unser erstes Dokument persistieren:

> db.foo.insert( {hello: "MongoDB"} )

Beim Einfügen dieses einen Datensatzes haben wir bereits viele Konzepte verwendet, die wir uns im Folgenden im Detail ansehen werden.

Storage

MongoDB verwaltet Nutzdaten und Indexe grundsätzlich im RAM und synchronisiert den Arbeitsspeicher mittels des Betriebssystemdiensts mmap [4] periodisch mit dem Dateisystem. Nach dem transparenten Anlegen der Datenbank test und der Collection foo im obigen Beispiel sind im Datenbankverzeichnis /data/db folgende Dateien angelegt worden:

 16M test.ns 64M test.0 128M test.1 ...

Pro Datenbank gibt es eine .ns-Datei mit Metainformationen sowie eine Reihe von Dateien mit Nutzdaten, die bei einer Größe 64 MB starten und sich jeweils verdoppeln bis zu 2 GB. Da der mmap-Mechanismus per Default nur alle sechzig Sekunden (!) eine Synchronisation vom RAM und Platte anstößt, gibt es zusätzlich ein Journaling aller schreibenden Operationen, das bei Abstürzen einen gewissen Grad an Durabilität sicherstellt. Dieses Journal ist ebenfalls dateibasiert, synchronisiert sich mit im Abstand von 100 ms allerdings wesentlich öfter. Nach einem Servercrash werden alle im Journal befindlichen Schreiboperationen angewandt, bevor der Server für weitere Anfragen zur Verfügung steht. Sie verlieren im Fehlerfall also maximal die...

Neugierig geworden?

Angebote für Teams

Für Firmen haben wir individuelle Teamlizenzen. Wir erstellen Ihnen gerne ein passendes Angebot.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang