MongoDB – Ein Überblick

5. Juli 2012Andreas Hartmann

MongoDB ist eine dokumentorientierte und schemalose NoSQL-Datenbank, die von dem Unternehmen 10gen entwickelt wird. Sie ist in C++ implementiert und unter der Open Source AGPL 2.0 Lizenz verfügbar. Alternativ gibt es auch eine kommerzielle Lizenz von 10gen. Die Dokumente selbst werden im Binary JSON Format abgelegt. Bei Binary JSON handelt es sich um eine Erweiterung von JSON (JavaScript Object Notation) mit Datentypen wie beispielsweise Date oder Binary Data.

Von den drei Eigenschaften Consistency, Availability  und Partition Tolerance, gemäß des CAP Theorems von Brewer [siehe hierzu http://de.wikipedia.org/wiki/CAP-Theorem], setzt MongoDB Consistency und Partition Tolerance um [siehe hierzu http://blog.nahurst.com/visual-guide-to-nosql-systems]. MongoDB arbeitet, wie die meisten NoSQL-Vertreter dabei nach dem BASE-Prinzip [siehe hierzu http://stackoverflow.com/questions/3342497/explanation-of-base-terminology]

Wenn man die direkte Sprachwelt von RDMS und MongoDB gegenüberstellt, kann man beim jeweiligen Wording folgende Parallelen ziehen:

MongoDB bringt von Hause aus eine JavaScript Shell mit, um z.B. Querys zu testen oder administrative Tätigkeiten vorzunehmen. So gestaltet sich das Anlegen eines Dokumentes in der JavaScript Notation wie folgt:

db.crud.insert( {„name“: „Name 1“, „forename“: „forename 1“, „email“: „email1@adesso.de“ } )

Hierbei wird zunächst die Datenbank und die entsprechende Collection, gefolgt von der jeweiligen Aktion, angegeben und abschließend das anzulegende Dokument im BJSON-Format angegeben.

Die Suche db.crud.find( {„name“: „Name 1“ } ), das Aktualisieren db.crud.update( {„name“: „Name 1“}, {„name“: „Name 2“} ) und das Löschen db.crud.remove( {„name“: „Name 1“ } ) von Dokumenten hat dabei den gleichen Aufbau.

In MongoDB können einzelne Dokumente durchaus andere Dokumente enthalten oder aber auch auf andere Dokumente verweisen, siehe nachfolgende Abbildung:

An dieser Stelle ist beispielsweise im Rahmen des Schemadesign der Architekt gefragt, um zu entscheiden, ob Dokumente in andere Dokumente einzubetten sind oder aber referenziert werden sollten. Dies hängt u.a. von den Transaktionseigenschaften ab. So gibt es  unter MongoDB keine Transaktionen, es wird lediglich die Atomarität einer Aktion bezogen auf ein Dokument garantiert.

Aus der Security-Perspektive betrachtet, bietet MongoDB nur eine rudimentäre Funktionalität. So kennt MongoDB lediglich die zwei Berechtigungen „lesender und schreibender“ oder nur „lesender“ Zugriff auf eine Datenbank. Darüber hinaus wird nur noch das Passwort verschlüsselt übertragen.

Was die Ausfallsicherheit und Skalierbarkeit betrifft, ist MongoDB mit den Replication- und Sharding-Mechanismen bestens aufgestellt. So bietet z.B. die slaveOK Methode die Möglichkeit, lesende Anfragen auf allen laufenden Instanzen parallel auszuführen. Durch die Unterstützung von Map/Reduce besteht mit MongoDB darüber hinaus die Möglichkeit, Batches ebenfalls parallel auszuführen.

Des Weiteren können mit MongoDB, mittels Binary Data Sets, beliebig große Dateien verwaltet werden. Ferner legt im Kontext des Schemadesigns und der Vergabe von Indizes der Architekt die Grundsteine für einen performaten und reibungslosen Betrieb. MongoDB bietet mit seinen Monitoring und Backup Features ein in sich schlüssiges Konzept für einen sicheren und reibungslosen Betrieb. Bezüglich des Connectivity-Aspekts kann MongoDB sicherlich als multilingual betrachtet werden. So wird neben den Mainstream-Sprachen wie Java und C++ beispielsweise auch Erlang unterstützt, aber auch viele weitere Sprachen.

Fazit: MongoDB eine sehr ausgereifte dokumentorientierte Datenbank, die in vielen Kontexten deutliche Vorteile gegenüber den herkömmlichen RDMS-Lösungen bietet. Da das dokumentenorientierte Modell auf sehr viele Anwendungen passt, kann MongoDB breit genutzt werden. Gleichzeitig ist durch Replikation und Sharding gewährleistet, dass auch große Systeme mit eine kostengünstigen Server-Infrastruktur betrieben werden können. MongoDB stellt daher im NoSQL-Bereich einen sehr gelungenen Kompromiss dar.

Aus diesem Grund hat sich adesso dazu entschieden, mit 10gen – dem Unternehmen hinter MongoDB – eine Partnerschaft einzugehen, um Kunden beim Einsatz dieser Technologie noch besser unterstützen zu können. Haben Sie Fragen zu MongoDB, arbeiten Sie damit oder überlegen Sie,  diese NoSQL-Datenbank einzusetzen? Ich freue mich darauf, Erfahrungen mit Ihnen auszutauschen.

Andreas Hartmann Andreas Hartmann ist Principal Software Architect bei der adesso AG sowie Vortragender auf Konferenzen und Autor verschiedener Fachartikel. Sein Tätigkeitsschwerpunkt liegt in der Konzeption und Implementierung von leichtgewichtigen Software-Architekturen auf Basis der JEE-Plattform. Aktuelle Interessensschwerpunkte von Andreas Hartmann sind Cloud Computing und NoSQL.
Artikel bewerten:
1 Star2 Stars3 Stars4 Stars5 Stars
Loading...

Kommentare

Ada 4. April 2016

hallo schönen guten Morgen,
ich bin Student und beschäftige mich aktuell mit dem Themen Datenbanken und der MongoDB. ( In einigen Unternehmen werden die Daten mit Oracle SQL Developer hochgeladen (csv datein) in deren Server und dann über MongoDB weiterverarbeitet und letztendlich Reports erstellt). Es wird also zwischen 2 Datenbanken umgeswitched. Hierbei ist von Wichtigkeit: Die Performance, Skalierbarkeit, Indexierung, Datenvolumen (Big Data), Datenschema etc.
Da ich mich gerne im Bereich MongoDB vertiefen möchte, bräuchte ich eine kleine Hilfestellung von Ihnen als Experte.

1.
a) Kann man oder wie wäre es möglich/machbar das Sternschema aus Oracle in die Mongo DB zu überführen?
Und b) mit Hinblick auf die Struktur
c) wenn das Sternschema möglich sei im MongoDB (normalerweise geht es ja nicht!), welche weiteren Schritte sind oder wären notwendig für die Enwickler?
2. Kann man Mongo DB automatisieren geht das überhaupt?
3. Was für Fehler können auftreten oder muss man rechnen beim Übertragen der Daten von Oracle zu MongoDB? Eventuell welche Datentypen mit ein paar Bsp.
4. Macht es Sinn wenn wir MongoDB nehmen und hierdrauf weiterentwickeln und dafür Oracle komplett aussen vor also weglassen? Ist dies prinzipiell machbar, wenn ja, worauf sollte man achten wenn nein, aus welchem Grund bitte.
5. Wie ist der Support geregelt bei der PostgreeSQL bitte? Es gibt ja bei kommerziellen, also kostenpflichtigen Lizenzen einen Technischen Support. PostgreSQL ist ja in unserem Fall Open Source. Was haben wir hier für Möglichkeiten für den Support?
6. Zusammenhang zwischen Hadoop/MapReduce/Big Data und die Definition dieser?
7. Was für Vorteile bringt die MongoDB gegenüber der Oracle Datenbank in Bezug auf die Daten (egal welche Art von Daten) ?
Ich bin ja relativ frisch unterwegs und möchte mehr an Hintergrund wissen und kennenlernen bezüglich MongoDB und Oracle und deren Bezug..
Über eine Rückmeldung freue ich mich und danke ich sehr.
Mfg
Ada

Kommentar hinzufügen:

Ihr Kommentar: