- MongoDB
-
MongoDB Entwickler 10gen Erscheinungsjahr 2009 Betriebssystem Cross-platform Programmiersprache C++ Kategorie Dokumentenorientierte Datenbank Lizenz GNU AGPL v3.0 (Treiber: Apache-Lizenz) http://www.mongodb.org/ MongoDB (abgeleitet vom engl. "humongous" [gigantisch]) ist eine hochperformante, schema-freie, dokumentenorientierte Open-Source-Datenbank, die in der C++-Programmiersprache geschrieben ist.[1]. 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 10gen. Die Erstveröffentlichung fand im Februar 2009 statt.[2]
Inhaltsverzeichnis
Merkmale
Zu den Merkmalen gehören unter anderem:
- UTF-8-Kodierung der Dokumente. Nicht-UTF-8-Daten können gespeichert, angefragt und abgerufen werden mittels eines speziellen Binär-Daten-Typs.
- 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ützt Datum, reguläre Ausdrücke, Code, binäre Daten und mehr (allesamt BSON-Kategorien).
- Ad-hoc-Abfragen: Mongo erlaubt es, jedes Feld jederzeit anzufragen. Mongo unterstützt auch Bereichs-Abfragen, 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 Gruppierungs-Funktion ähnlich der GROUP BY von SQL.
- Server-seitige JavaScript-Ausführung: JavaScript ist MongoDBs Lingua franca und kann verwendet werden für Abfragen, Aggregations-Funktionen (wie beispielsweise MapReduce) und kann direkt zur Datenbank geschickt werden, um dort ausgeführt zu werden.
Indizierung
Die Software unterstützt Indexstrukturen, beispielsweise B-Bäume und Geospatial-Indizes[3]. 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 Abfrageplänen aus und wählt den schnellsten; dabei findet periodisch ein Resampling 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
Die Software implementiert ein GridFS[4] genanntes Protokoll, das verwendet wird, um Dateien aus der Datenbank abzurufen. Dieser Dateien-Speicher-Mechanismus wurde bei Plugins für NGINX[5] und lighttpd[6] eingesetzt.
Gedeckelte Sammlungen
MongoDB unterstützt größen-beschränkte Dokumenten-Sammlungen – auch Capped Collections genannt[7]. Eine gedeckelte Sammlung wird angelegt mit einer bestimmten Größe und – nach Bedarf – einer Anzahl an Elementen. Eine gedeckelte Sammlung ist die einzige Art Dokumenten-Sammlung, die die Ordnung einhält: Sobald die spezifizierte Größe erreicht ist, verhält sich die gedeckelte Sammlung wie ein digitaler Ringspeicher.
Eine besondere Art Cursor – genannt Tailable Cursor,[8] – kann bei gedeckelten Sammlungen verwendet werden. Der Cursor wurde nach dem `tail -f`-Befehl benannt. Er verschwindet nicht, sobald er die Wiedergabe der Ergebnisse beendet hat, sondern wartet und gibt neue Ergebnisse wieder, sobald neue Dokument der Sammlung hinzugefügt werden.
Einschränkungen
MongoDB benutzt mmap, wodurch die Datengröße auf 2 GB auf 32-Bit-Rechnern begrenzt ist (64-Bit-Rechner besitzen eine viel größere Datengröße)[9]. Der MongoDB-Server kann nur auf Little-Endian-Systemen benutzt werden, obwohl die meisten Treiber sowohl auf Little-Endian- und Big-Endian-Systemen laufen.
API
MongoDB ist mit offiziellen Treibern ausgestattet für C[10], C++[11], C#[12], Haskell[13], Java[14], JavaScript[15], Lisp[16], Perl[17], PHP[18], Python[19], Ruby[20] und Scala[21]. Es gibt auch eine große Zahl nicht offiziell gepflegter Treiber für viele weitere Programmiersprachen.
Replikation
MongoDB unterstützt die Master-Slave-Replication. Ein Master kann Reads und Writes ausführen. Ein Slave kopiert die Daten vom Master und kann nur für Reads oder Backups eingesetzt werden, nicht aber für Writes.
MongoDB gestattet es Entwicklern zu garantieren, dass auf einer Per-Ablauf-Basis zumindest ein Ablauf auf N Server repliziert wurde.
Replica-Sets
Replica-Sets ähneln dem Master-Slave-Verhältnis, beinhalten aber die Möglichkeit für die Slaves, einen neuen Master zu wählen, wenn der derzeitige ausfällt.
Horizontale Fragmentierung (Sharding)
MongoDB skaliert horizontal unter Verwendung eines Systems, welches als horizontale Fragmentierung bezeichnet wird und das dem BigTable- und PNUTS-Skalierungs-System 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 aufgesplittert (unter Zugrundelegung des Fragmentierung-Schlüssels) und über mehrere Instanzen verteilt.
Die Anwendung bzw. der Entwickler muss wissen, dass sie mit einem fragmentieren Cluster kommuniziert, wenn sie bestimmte Abläufe durchführt. So zum Beispiel muss eine „findAndModify“-Abfrage den Fragmentierungsschlüssel 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 jeder Instanz gespeichert sind, 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 Anwendungs-Server empfohlen.
Management
Offizielle Werkzeuge
Das mächtigste und nützlichste Management-Werkzeug ist die Datenbank-Shell: mongo. Die Shell lässt Entwickler Daten in ihren Datenbanken einsehen, einbringen, entfernen und aktualisieren. Darüber hinaus erhalten die Entwickler auch Replikations-Informationen, sie können die Horizontalen Fragmentierung vornehmen, Server herunterfahren, JavaScript ausführen und anderes mehr. 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 das Admin-Interface bezogen werden: eine einfache html-Webseite, die der Information über den derzeitigen Server-Status dient.
Graphische Frontends
Es sind einige Graphische Oberflächen (GUI) auf den Markt gekommen, die den Entwicklern bei der Arbeit helfen, ihre Daten zu sichten und zu bearbeiten. Einige der beliebtesten sind:
- Fang of Mongo[22] – ein webbasiertes UI, erstellt mit Django und jQuery.
- Futon4Mongo[23] – ein Klon des CouchDB-Futon-Web-Interfaces für MongoDB.
- Mongo3[24] – ein Ruby-basiertes Interface.
- MongoHub[25] – eine native OS X-Anwendung für das Management von MongoDB.
- Opricot[26] – eine browser-basierte MongoDB-Shell, geschrieben mit PHP.
- Database Master[27] – Windows-basierte Datenbank-Client-Software, unterstützt auch RDBMS.
Lizenzierung und Support
MongoDB ist frei erhältlich unter der GNU Affero General Public Lizenz. Die Sprachtreiber sind erhältlich unter einer Apache-Lizenz.[28]
Bekannte Anwender
- Die Internetpräsenz von MTV Networks[29]
- Disney Interactive Media Group[30]
- Foursquare[31]
- bit.ly[32]
- The New York Times[33]
- SourceForge[34]
- Die E-Commerce Website Etsy[35]
- Large Hadron Collider am CERN[36]
- Die Cloud-computing-Plattform AppScale[37]
Einzelnachweise und Anmerkungen
- ↑ MongoDB website
- ↑ MongoDB Blog - March 2010
- ↑ Geospatial indexes
- ↑ GridFS
- ↑ NGINX
- ↑ lighttpd
- ↑ capped collections
- ↑ [1]
- ↑ [2]
- ↑ C driver
- ↑ C++ driver
- ↑ C# driver
- ↑ Haskell driver
- ↑ Java driver
- ↑ JavaScript driver
- ↑ [3]
- ↑ Perl driver
- ↑ PHP driver
- ↑ Python driver
- ↑ Ruby driver
- ↑ Casbah, the officially supported Scala Driver for MongoDB
- ↑ Fang of Mongo
- ↑ Futon4Mongo
- ↑ Mongo3
- ↑ MongoHub
- ↑ Opricot
- ↑ Database Master von Nucleon Software
- ↑ The AGPL - MongoDB Blog: May 5, 2009
- ↑ MongoDB Powering MTV's Web Properties (10. Mai 2011). Abgerufen am 6. Juli 2011.
- ↑ Disney Central Services Storage: Leveraging Knowledge and skillsets (24. Mai 2011). Abgerufen am 6. Juli 2011.
- ↑ MongoDB at foursquare - Presentation at MongoNYC (21. Mai 2010). Abgerufen am 28. Juni 2010.
- ↑ bit.ly user history, auto-sharded - Presentation at MongoNYC (21. Mai 2010). Abgerufen am 28. Juni 2010.
- ↑ Jacqueline Maher: Building a Better Submission Form, NYTimes Open Blog. 25. Mai 2010. Abgerufen am 28. Juni 2010.
- ↑ How Python, TurboGears, and MongoDB are Transforming SourceForge.net. PyCon 2010 (20. Februar 2010). Abgerufen am 28. Juni 2010.
- ↑ MongoDB at Etsy. Code as Craft: Etsy Developer Blog (19. Mai 2010). Abgerufen am 28. Juni 2010. (Link nicht mehr abrufbar)
- ↑ Holy Large Hadron Collider, Batman!. The MongoDB NoSQL Database Blog (3. Juni 2010). Abgerufen am 3. August 2010.
- ↑ http://appscale.cs.ucsb.edu/datastores.html#mongodb
Wikimedia Foundation.