Datenbanken Online Lexikon TH Köln, Campus Gummersbach
Aktuelle Änderungen - Suchen:

MongoDB

MongoDB benannt nach "humongous" (gigantisch) ist eine skalierbare, hochperformante, schemafreie, dokumentenorientierte Open-Source-Datenbank, die die Dokumente im BSON-Format verwaltet. MongoDB bietet eine integrierte Query Language f�r einfache Abfragen, Replikation und Sharding?. Durch Sharding? und Replikation (Replica Sets) k�nnen viele nicht so leistungsstarke Rechner verwendet werden. Unterst�tzt werden virtuelle Umgebungen, Cloud Computing und alle g�ngigen Betriebssysteme (Linux, Mac OS, Windows). MongoDB bietet unterschiedliche Backup? M�glichkeiten an.

Zus�tzlich ist ein kommerzieller Support verf�gbar. Die Vorteile von MongoDB sind ein flexibles Datenbank Schema (Schema Design), das dynamisch angepasst werden kann. Es erm�glicht die Speicherung unterschiedlicher Dokumente, die durch die Verwendung von Indizes schnell wiedergefunden werden k�nnen, inklusive des geospatial - Indexes, der Abfragen von Geodaten wie z.B. Umgebungssuche erm�glicht.

Der gr��te Nachteil dieser Datenbank ist die Sicherheit beim Zugriff, die faktisch nur mit Einstellung der IP-Tables erfolgt. Ferner sind Transaktionen und Query-Operationen gegen�ber einem RDBMS nur verschlankt einsetzbar.

Steckbrief

Webadressehttp://www.mongodb.org
KategorieDocument Store
APIC++, C#, Java, Java Script, PHP, Ruby , Perl, Phyton, Node.js und vieles mehr
ProtokollBSON-basiertes Protokoll
Entwicklungssprache:C++
ReplikationMaster Slave
Skalierungautomatisches Sharding?
Lizenz:GNU AGPL v3.0

Steckbrief von MongoDB, entnommen aus Boeker (2010)

Einsatzbereich

Der Einsatzbereich ist sehr vielf�lltig. Hier nun ein Paar bekannte Nutzer:

  • Springer speichert Artikel und B�cherkapitel f�r realtime download und Anzeige in verschiedener Form
  • Disney speichert verschiedener APIs f�r Spiele
  • SAP nutzt MongoDB f�r CMS (Content Management System)
  • MTV benutzt es f�r CMS mit weiteren geplanten CMS f�r die Tochterfirmen ( Nick oder comedycentral)

Weitere Einsatzm�glichkeiten sind vor allem speichern und verarbeiten von Geodaten oder gro�er Datenmengen, au�erdem in Bereichen, in denen schnelle Zugriffszeiten (wie z.B. realtime download) ben�tigt werden.

Datenbankvergleich
Datenbankvergleich: relationale vs. dokumentenorientierte

Datenbankaufbau

MongoDB speichert die Dokumente intern, h�lt sie im Speicher und tauscht sie mit dem Client Driver in BSON-Format. Die Vorraussetztung ist dass die Client Driver BSON-f�hig sind.

Wie das Bild zeigt, ist die Struktur der Datenbank in MongoDB anders als in relationalen Datenbanken. Die Datenbank besteht aus beliebig vielen Collections in denen sich wiederum beliebig viele Dokumente befinden.

Datenbank

MongoDB Server l��t mehrere Datenbanken nebeneinader zu. Jede Datenbank wird einzeln behandelt und kann individuell eigestellt werden.

Die Datenbank besteht aus Datafiles ("Datenbankname.0, Datenbankname.1") und Namespace-File ("Datenbankname.ns"). Die Datafiles enthalten die Dokumente in BSON-Format. Namespace-File enth�lt die Liste aller Collections und die Metadaten.

Collection

Collections entsprechen den Tabellen eines RDBMS's. Sie werden nicht wie Tabellen bereits vorher erstellt, sondern erst bei Bedarf. Sprich wenn ein Dokument in eine neue Collection gesteckt werden soll wird dabei die neue Collection erstellt. Gruppen und Hierarchien werden durch die Punkt-Notation erstellt.

Bsp.:

users.student.informatik --> 1. Collection
users.student.maschinenbau --> 2. Collection

Dieses Beispiel zeigt, dass trotz der �hnlicher Benennung es sich um zwei verschiedene und nicht um eine Collection handelt. Die "users.student" dient lediglich der �bersicht und Zuordnung zu einer Gruppe. Die Namensgebung kann beliebig gew�hlt werden solange sie die Gr��e von max. 128 Zeichen nicht �berschreitet.

Es gibt zwei spezielle Formen einer Collection: Die system Collections und die Capped Collection.

Die System Collections beinhalten die Informationen (Metainformationen, aktuelle Konfiguration) des Systems (der Datenbank).

<dbname>.system.namespaces--> speichert alle Namespaces(einsehbar)
<dbname>.system.indexes,--> speichert Indizes(einsehbar)
<dbname>.system.profile,--> verwaltet Datenbank Profile(einsehbar und l�schbar)
<dbname>.system.users--> enth�lt alle Benutzer, die auf die Datenbank zugreifen d�rfen(einsehbar und modifizierbar)
Erstellen einer Capped Collection

Die Capped Collection ist eine Collection mit einer festen Gr��e oder Dokumentenanzahl, die nach dem Verfahren"Least Recently Used"(LRU) arbeitet. Das bedeutet, wenn das Limit der Collection ( Gr��e oder Dokumentenanzahl) erreicht ist, werden alte Dukumente automatisch entfernt. Dabei ist wichtig, dass die neuen Dokumente exakt so gro� oder kleiner sind, als die alten zu l�schenden Dokumente. Diese Collection Form kommt zum Einsatz bei Speicherung vieler Daten, die nach einer begrenzten Zeit als veraltet gelten und automatisch gel�scht werden k�nnen, wie beispielweise bei Logging, Caching oder Archivierung.

Dokument

Ein Dokument entspricht einer Zeile (ROW) in einer Tabelle in RDBMS und enth�lt eine beliebige Anzahl an Feldern (Key) mit einem Wert (Value). Die Dokumente einer Collection k�nnen, m�ssen aber nicht ein identisches Schema aufweisen. Dokumentenorientierte Datenbanken zeichnet ja ein schemafreies Design aus. MongoDB bietet allerdings ein rudimenter�res Schema Design an. MongoDB kennt folgende Datentypen:

Eine Besonderheit der Dokumente ist die logische Gr��enbeschr�nkung auf Momentan 16 MB. Diese Beschr�nkung m�chte verhindern, dass die Anfragezeiten zu lang werden. Gr��ere Dokumente w�rden den RAM und/oder das Netztwerk bei vielen Anfragen zu sehr auslasten. F�r gr��ere Dokumente bietet MongoDB die Alternative GridFS.

Referenzieren

MongoDB bietet keine Joins an. Mit Referenzen k�nnen Zugeh�rigkeiten von Dokumeten im Vorfeld gesetzt werden. An dieser Stelle muss entschieden werden, welche Form der Verweise f�r die Dokumente, in Bezug auf die Abfragegeschwindigkeit, besser geeignet sind. Es gibt drei Formen der Referenzierung. Am einfachsten ist das Referenzieren �ber ObjectID. Dies geht aber nur innerhalb einer Collection. Soll auf eine andere Collection verwiesen werden, kann der Datentyp DBRef verwendet werden. Au�erdem bietet sich der Datentyp EmbeddectDoc als L�sung an, vor allem bei einer eins zu eins Beziehung. Eine einfache Faustregel besagt:

  • Ein Dokument verweist auf ein anderes einzelnes Dokument --> EmbeddedDoc (Serverseitiges referenzieren)
  • Mehrere Dokumete verweisen auf ein Dokument in der gleichen Collection --> ObjectID
  • Mehrere Dokumete verweisen auf ein Dokument in einer anderen Collection--> DBRef (Clientseitiges referenzieren). In diesem Fall vermeidet DBRef doppelte Datens�tze.

Embedded-Document

Embedded-Doc's sind Teildukumente eines Top-Level-Dokumentes. Es ist eine einfache Methode ohne Joins zu referenzieren. Dadurch werden die Anfragen performanter, ferner wird Speicherplatz, der f�r Referenzen ben�tigt wird, gespart.

Die Gefahr besteht bei unsinnigen oder zu komplexen Verschachtelungen die �bersichtlichkeit zu verlieren. Au�erdem darf die logische Dokumenten Gr��enbeschr�nkung beachtet werden.

DBRef(erence)

DBRef ist ein Datentyp der in etwa dem Fremdschl�ssel in RDBMS entspricht. DBRef verweist auf ein Dokument (ObjectId) in der eigenen oder einer anderern Collection(name) und erwartet zwei Parameter, den Namen der Collection und die ObjectId des Dokuments auf die sich die Referenz bezieht.Referenzieren funktioniert ausschliesslich mit der ObjectId.

ObjectId

Eine ObjectId ist exakt 12 Byte gro� und wird durch den Client Driver oder die Datenbank automatisch generiert. Eine ObjectId kann auch nach eigenem Schema generiert werden. Dabei muss beachtet werden, dass die ObjectID in einer Collection einzigartig ist. Dies gilt auch f�r die eigene Generierung.

Aufbau einer ObjectID

Bei einer Datenbankanfrage muss der Datentyp �ObjectId� immer mitangegeben werden, sonst wird nach einem String gesucht und das Dukument wird nicht gefunden.
Bsp.: >db.users.count(ObjectId(�4c121a2c|a917ba|523e|000002�)

Grundlegender Aufbau eines Beispieldokuments

{

        "_id" : ObjectId("4dcd3ebc9278000000005158"),
        "date" : ISODate("2011-05-13T14:22:46.777Z"),
        "binary" : BinData(0,""),
        �string�: �Willy Wonka�,
	�integer�: 1234, 
	�float�: 1.2, 
	�array�: [1, 2, 3],
	�doc�: {�number�: 1, �name�: charlie}

}

Kommando�bersicht

MongoDB bietet eine Reihe von Kommandos an, die vom Anlegen eines Dokumentes, �ber Ver�nderungen in diesem bis hin zum L�schen von Dokumenten gehen. Eine Kommandouebersicht findet sich hier.

Map and Reduce
Map and Reduce

Map and Reduce

Map and Reduce entspricht dem Group Operator. Map and Reduce wird im Bereich Sharding verwendet. Map geht alle Server durch, sucht nach den Ergebnissen und verarbeitet sie in einzelnen Tasks. Reduce gruppiert die Ergebnisse und fasst sie zu einem Ergebnis zusammen.

Sicherheit

Bzgl. Sicherheit bietet MongoDB drei M�glichkeiten an, die am besten alle genutzt werden. Standardm�ssig horcht der MongoDB-Dienst nicht nur auf localhost, sondern auf allen verf�gbaren Interfaces. Deshalb muss der MongoDB-Server abgesichert werden. Zu Beginn bietet es sich erstmal an MongoDB nur noch auf Anfragen reagieren zu lassen die auf localhost (127.0.0.1) ankommen, somit ist sichergestellt, dass sich kein anderes System au�er der lokale Rechner mit der MongoDB verbinden kann und dies auch ohne gro�es Authentifizierungssystem. Gleichzeitig hat dies den Nachteil, dass kein anderes externes System mehr mit dem MongoDB verbinden kann, dies kann aber durch einen VPN-Tunnel umgangen werden.

Zus�tzlich bietet es sich an, die MongoDB �ber iptables abzusichern, somit kann das Problem behoben werden, dass mehrere Applikationsserver sich mit dem MongoDB-Server nicht verbinden k�nnen, da diese sich untereinander nicht finden k�nnen. Bei iptables werden alle evtl. alten schon vorhandenen Regeln entfernt und neue angelegt, die jeglichen Zugriff �ber die Ports 27017 (MongoDB-Standardport) und 28017 (REST-Interface) untersagen. Damit einzelne gezielte Systeme nun auf den MongoDB-Server zugreifen k�nnen, werden diese der Reihe nach �ber Ihre IP-Adresse freigeschaltet.

Zum Schluss kann das MongoDB interne Authentifizierungssystem genutzt werden, welches �ber einen Parameter beim Start des MongoDB-Servers mit gestartet werden kann. Die Kommunikation ist zwar leider nicht verschl�sselt, deckt aber die grundlegensten Funktionen ab. Hierbei ist es wissenswert, dass Sharding? und Replica Sets in der momentanen MongoDB-Version nicht mit aktivierter Authentifizierung funktionieren.

Fazit

MongoDB ist vielf�lltig einsetzbar, einfach zu konfigurieren und schnell einsatzf�hig. Die Datenbank bietet sich sowohl f�r kleinere Projekte (Web/Mobile Apps) wie auch f�r gro�e Unternehmen ( gro�e Datenmengen verarbeiten und Auswerten, replizieren und skalieren). Diese Datenbank kann vor allem f�r neue noch nicht ausgereifte oder wachsende und dadurch oft �ndernde Datenstruktur (Schema) gut genutzt werden, da �nderungen an der Datenstruktur/Schema kein Problem darstellen. Auf der anderen Seite bietet MongoDB auch einiges aus dem RDBMS Bereich an. Die Verwendung von vielen Operationen und Referenzen erm�glichen eine vereinfachte Suche, die Indizes schnelleren Zugriff. Durch den geospatial - Index k�nnen auch die Geodaten promblemlos verarbeitet werden.

MongoDB hat noch vereinzelte Nachteile, vor allem im Bereich der Zugriffssicherheit, an dieser wird aber bereits f�r die n�chsten Versionen aktiv gearbeitet. Transaktionen und Query-Operationen sind im vergleich zu RDBMS nur eingeschr�nkt m�glich. Desweiteren gibt es keine Trigger, Constraints und Volltextsuche (nur regex). Die Datenkonsistenz wird zugunsten von schnellen Zugriffs- und Bearbeitungszeiten und der Ausfallsicherheit nachrangig behandelt.

Quellen

  • Edlich et. Al.(2011), 2.Aufl.: �NoSQL � Einstieg in die Welt nichtrelationaler Web 2.0 Datenbanken � Carl Hanser Verlag, M�nchen
  • Marc Boeker (2010), "MongoDB - Sag ja zu NoSQL", entwickler.press, Frankfurt
  • Peter Membrey und Tim Hawkins (2010), "The definitive Guide to MongoDB, Eelco Plugge", Springer Verlag
  • Internet: 10gen: MongoDB URL: http://www.mongodb.org (Stand: 20.08.2012)

Weiterf�hrende Links

http://www.mongodb.orgallgemeine Infos zu MongoDB
http://www.bsonspec.orgInfos zur BSON-Spezifikation
http://www.mongodb.org/display/DOCS/TutorialTutorials
http://www.mongodb.org/display/DOCS/QuickstartQuickstart
http://www.mongodb.org/display/DOCS/dbshell+ReferenceShellkommandos
http://www.mongodb.org/display/DOCS/DBA+Operations+from+the+Shellnoch mehr Shellkommandos
https://github.com/Fiedzia/Fang-of-MongoWebfrontend Fang-of-Mongo
http://www.10gen.com/mongodb-monitoring-serviceMongoDB Monitoringservice
http://de.wikipedia.org/wiki/MongoDB

Kategorie: Neue DB-Entwicklungen, Dokument-DB, NoSQL, M