MongoDB

aus Wikipedia, der freien Enzyklopädie
Wechseln zu: Navigation, Suche
MongoDB
Logo von MongoDB
Entwickler MongoDB, Inc.
Erscheinungsjahr 2009
Aktuelle Version 2.6.6
(12. September 2014)
Betriebssystem Cross-platform
Programmier­sprache C++
Kategorie Dokumentenorientierte Datenbank
Lizenz GNU AGPL v3.0 (Treiber: Apache-Lizenz)
http://www.mongodb.org

MongoDB (abgeleitet vom engl. humongous, „gigantisch“) ist eine Schema-freie, dokumentenorientierte Open-Source-Datenbank, die in der Programmiersprache C++ geschrieben ist.[1][2] Da die Datenbank dokumentenorientiert ist, kann sie Sammlungen von JSON-ähnlichen Dokumenten verwalten. So können viele Anwendungen Daten auf natürlichere Weise modellieren, da die Daten zwar in komplexen Hierarchien verschachtelt werden können, dabei aber immer abfragbar und indizierbar bleiben.

Die Entwicklung von MongoDB begann im Oktober 2007 durch das Unternehmen 10gen, welches am 27. August 2013 in MongoDB, Inc. umbenannt wurde. [3] Die Erstveröffentlichung fand im Februar 2009 statt.[4] MongoDB war 2012 die am weitesten verbreitete NoSQL-Datenbank.[5]

Merkmale[Bearbeiten]

Zu den Merkmalen gehören unter anderem:

  • UTF-8-Kodierung der Dokumente. Nicht-UTF-8-Daten können mittels eines speziellen Binärdatentyps gespeichert, angefragt und abgerufen werden.
  • Plattformübergreifende Unterstützung: Die Binärdateien sind verfügbar für Windows, Linux, OS X und Solaris. MongoDB kann auf fast jedem Little-Endian-System kompiliert werden.
  • Unterstützung von Datum, regulären Ausdrücken, Code und binären Daten (allesamt BSON-Kategorien).
  • Ad-hoc-Abfragen: Mongo erlaubt es, jedes Feld jederzeit abzufragen. Mongo unterstützt auch Bereichsabfragen, das Suchen nach regulären Ausdrücken und andere Spezialsuchabfragen zusätzlich zu Suchen anhand von Beispielen. Diese Abfragen schließen auch benutzerdefinierte JavaScript-Funktionen ein. Abfragen können sowohl spezifische Dokumentenfelder wiedergeben (anstelle des gesamten Dokuments) als auch Ergebnisse sortieren, überspringen und einschränken. Abfragen können in eingebettete Objekte und Anordnungen hineinreichen.
  • Cursor für Abfrageergebnisse.
  • Aggregation: Zusätzlich zu Ad-hoc-Abfragen unterstützt die Datenbank auch andere Werkzeuge für die Aggregation einschließlich MapReduce und einer Gruppierungsfunktion ähnlich dem GROUP BY von SQL.
  • Server-seitige JavaScript-Ausführung: JavaScript ist die Verkehrssprache von MongoDB und kann für Abfragen und Aggregationsfunktionen (wie beispielsweise MapReduce) verwendet werden, außerdem kann JavaScript direkt zur Datenbank geschickt und dort ausgeführt werden.

Indizierung[Bearbeiten]

Die Software unterstützt Indexstrukturen, beispielsweise B-Bäume und Geospatial-Indizes.[6] Verschachtelte Felder (so wie oben in der Ad-hoc-Abfrage beschrieben) können gleichfalls indiziert werden. Das Indizieren von Listen ergibt eine Indizierung jedes einzelnen Elements der Liste.

Der Abfrage-Optimierer von MongoDB sucht während eines Abfragelaufs selbständig zwischen verschiedenen Auswertungsplänen aus und wählt den schnellsten; dabei findet periodisch eine Stichprobewiederholung statt. Entwickler können in den verwendeten Index mittels der Funktion explain einsehen und einen anderen Index mit Hilfe der Funktion hint auswählen.

Indizes können jederzeit angelegt und gelöscht werden.

Datei-Speicherung[Bearbeiten]

Die Software implementiert ein GridFS[7] genanntes Protokoll, das verwendet wird, um Dateien aus der Datenbank abzurufen. Dieser Dateien-Speicher-Mechanismus wurde bei Plugins für Apache[8], nginx[9] und lighttpd[10] eingesetzt.

Capped collection[Bearbeiten]

MongoDB unterstützt größenbeschränkte Dokumentensammlungen – auch capped collections genannt.[11] Eine capped collection wird mit einer bestimmten Größe und – je nach Bedarf – einer Anzahl an Elementen angelegt. Eine capped collection ist die einzige Art Dokumenten-Sammlung, die die Ordnung einhält: Sobald die spezifizierte Größe erreicht ist, verhält sich die capped collection wie ein digitaler Ringspeicher.

Eine besondere Art Cursor – genannt tailable cursor[12] – kann bei capped collections verwendet werden. Der Cursor wurde nach dem Unix-Befehl tail -f benannt. Er verschwindet nicht, sobald er die Wiedergabe der Ergebnisse beendet hat, sondern wartet und gibt neue Ergebnisse wieder, sobald neue Dokumente der Sammlung hinzugefügt werden.

Einschränkungen[Bearbeiten]

MongoDB benutzt mmap, wodurch auf 32-Bit-Rechnern die Datengröße auf 2 GB begrenzt ist (64-Bit-Rechner besitzen eine viel größere Datengröße).[13] Der MongoDB-Server kann nur auf Little-Endian-Systemen benutzt werden, obwohl die meisten Treiber sowohl auf Little-Endian- als auch auf Big-Endian-Systemen laufen.

API[Bearbeiten]

MongoDB ist mit offiziellen Treibern ausgestattet für C, C++, C#, Haskell, Java, JavaScript, Lisp, Perl, PHP, Python, Ruby und Scala.[14]

Es gibt auch zu einigen Programmiersprachen offiziell unterstützte ODMs für MongoDB, wie z.B. Mongoose für die Node.js-Plattform[15].

Replikation[Bearbeiten]

MongoDB unterstützt die Master-Slave-Replikation. Ein Master kann Lese- („Reads“) und Schreibzugriffe („Writes“) ausführen. Ein Slave kopiert die Daten vom Master und kann nur für Lesezugriffe oder Backups eingesetzt werden, nicht aber für Schreibzugriffe.

MongoDB gestattet es Entwicklern, zu garantieren, dass auf einer Per-Ablauf-Basis zumindest ein Ablauf auf N Server repliziert wurde.

Replica-Sets[Bearbeiten]

Replica-Sets ähneln dem Master-Slave-Verhältnis, enthalten aber die Möglichkeit für die Slaves, einen neuen Master zu wählen, wenn der derzeitige ausfällt.

Horizontale Fragmentierung (Sharding)[Bearbeiten]

MongoDB skaliert horizontal unter Verwendung eines Systems, welches als horizontale Fragmentierung bezeichnet wird und das dem BigTable- und PNUTS-Skalierungssystem sehr ähnlich ist. Der Entwickler wählt einen Fragmentierungsschlüssel, der festlegt, wie die Daten in einer Ansammlung verteilt werden. Die Daten werden in Bereiche aufgeteilt (unter Zugrundelegung des Fragmentierungsschlüssels) und über mehrere Instanzen verteilt.

Die Anwendung bzw. ihr Entwickler muss wissen, dass die Kommunikation bei bestimmten Abläufen mit einem fragmentierten Cluster erfolgt. So muss eine „findAndModify“-Abfrage den Fragmentierungsschlüssel zum Beispiel beinhalten, wenn die angefragte Sammlung horizontal fragmentiert ist. Die Anwendung kommuniziert mit einem speziellen Routing-Prozess, der „mongos“ genannt wird und der genauso wie ein einzelner MongoDB-Server aussieht. Dieser „mongos“-Prozess weiß, welche Daten auf von welcher Instanz verwaltet werden, und routet die Abfrage dementsprechend. Alle Abfragen fließen durch diesen Prozess: Dieser leitet nicht nur die Abfragen und Antworten weiter, sondern führt auch alle notwendigen, finalen Datenver- und -entflechtungen durch. Jede beliebige Anzahl an „mongos“-Prozessen kann gestartet werden, allerdings wird gewöhnlich nur eine pro Anwendungsserver empfohlen.

Verwaltung[Bearbeiten]

Offizielle Werkzeuge[Bearbeiten]

Die Datenbank-Shell mongo lässt Daten einsehen, einbringen, entfernen und aktualisieren. Darüber hinaus gibt es auch Replikationsinformationen. Unter anderem kann horizontal fragmentiert, die Server heruntergefahren sowie JavaScript ausgeführt werden. mongo baut auf einer JavaScript-Engine auf, was bedeutet, dass es sich dabei um ein vollwertiges JavaScript handelt und gleichzeitig in der Lage ist, sich mit MongoDB-Servern zu verbinden.

Administrative Informationen können über die Admin-Schnittstelle bezogen werden: eine einfache HTML-Seite im Webbrowser, die der Information über den derzeitigen Server-Status dient.

Cloud-basierter Monitoring-Dienst[Bearbeiten]

Grafische Oberflächen[Bearbeiten]

Es gibt einige grafische Oberflächen (GUIs) zur Sichtung und Bearbeitung der Daten. Dazu gehören:

  • 3T MongoChef,[16] eine plattformunabhängige MongoDB GUI
  • BI Studio, Business Intelligence Frontend für MongoDB.
  • Database Master, eine Windows-basierte Datenbank-Client-Software, die auch RDMS unterstützt
  • Fang of Mongo,[17] ein webbasiertes UI, erstellt mit Django und jQuery
  • Futon4Mongo,[18] ein Klon des CouchDB-Futon-Web-Interfaces für MongoDB
  • mms, Mongo Management Studio,[19] sowohl plattformunabhängiges als auch webbasiertes GUI
  • Mongo3,[20] ein Ruby-basiertes Interface
  • MongoHub,[21] eine native OS-X-Anwendung für das Management von MongoDB
  • Opricot,[22] eine browser-basierte MongoDB-Shell, geschrieben mit PHP
  • UMongo (JMongoBrowser),[23] eine plattformunabhängige Management-GUI, geschrieben in Java

Lizenzierung und Support[Bearbeiten]

MongoDB ist frei erhältlich unter der GNU Affero General Public Lizenz. Die Sprachtreiber sind erhältlich unter einer Apache-Lizenz.[24]

Bekannte Anwender[Bearbeiten]

Siehe auch[Bearbeiten]

Literatur[Bearbeiten]

Weblinks[Bearbeiten]

Einzelnachweise und Anmerkungen[Bearbeiten]

  1. MongoDB. Abgerufen am 20. November 2013.
  2. MongoDB-Website. Abgerufen am 22. Juni 2012.
  3. 10gen Announces Company Name Change to MongoDB, Inc.. Artikel vom 27. August 2013, abgerufen am 28. August 2013.
  4. MongoDB Blog - March 2010. Abgerufen am 22. Juni 2012.
  5. DB-Engines Ranking. Abgerufen am 5. November 2012.
  6. Geospatial indexes. Abgerufen am 22. Juni 2012.
  7. GridFS. Abgerufen am 22. Juni 2012.
  8. mod_gridfs. Abgerufen am 19. November 2014.
  9. nginx. Abgerufen am 22. Juni 2012.
  10. lighttpd. Abgerufen am 22. Juni 2012.
  11. Capped collections. Abgerufen am 22. Juni 2012.
  12. Tailable cursors. Abgerufen am 22. Juni 2012.
  13. 32-bit limitations. Abgerufen am 22. Juni 2012.
  14. Drivers. Abgerufen am 22. Juni 2012.
  15. http://docs.mongodb.org/ecosystem/drivers/node-js/
  16. 3T MongoChef. Abgerufen am 1. Oktober 2014.
  17. Fang of Mongo. Abgerufen am 22. Juni 2012.
  18. Futon4Mongo. Abgerufen am 22. Juni 2012.
  19. Mongo Management Studio. Abgerufen am 1. September 2014.
  20. Mongo3. Abgerufen am 22. Juni 2012.
  21. MongoHub. Abgerufen am 22. Juni 2012.
  22. Opricot. Abgerufen am 22. Juni 2012.
  23. UMongo. Abgerufen am 22. Juni 2012.
  24. The AGPL - MongoDB Blog: May 5, 2009. Abgerufen am 22. Juni 2012.
  25. MongoDB Powering MTV's Web Properties. 10. Mai 2011. Abgerufen am 6. Juli 2011.
  26. Disney Central Services Storage: Leveraging Knowledge and skillsets. 24. Mai 2011. Abgerufen am 6. Juli 2011.
  27. MongoDB at foursquare - Presentation at MongoNYC. 21. Mai 2010. Abgerufen am 28. Juni 2010.
  28. bit.ly user history, auto-sharded - Presentation at MongoNYC. 21. Mai 2010. Abgerufen am 28. Juni 2010.
  29. Jacqueline Maher: Building a Better Submission Form, NYTimes Open Blog. 25. Mai 2010. Abgerufen am 28. Juni 2010. 
  30. How Python, TurboGears, and MongoDB are Transforming SourceForge.net. PyCon 2010. 20. Februar 2010. Archiviert vom Original am 19. August 2010. Abgerufen am 22. Juni 2012.
  31. MongoDB at Etsy. Code as Craft: Etsy Developer Blog. 19. Mai 2010. Abgerufen am 28. Juni 2010.
  32. Holy Large Hadron Collider, Batman!. The MongoDB NoSQL Database Blog. 3. Juni 2010. Abgerufen am 3. August 2010.
  33. AppScale - Supported Datastores. Abgerufen am 22. Juni 2012.