MongoDB


MongoDB
MongoDB
logo
Entwickler 10gen
Erscheinungsjahr 2009
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 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

Einzelnachweise und Anmerkungen

  1. MongoDB website
  2. MongoDB Blog - March 2010
  3. Geospatial indexes
  4. GridFS
  5. NGINX
  6. lighttpd
  7. capped collections
  8. [1]
  9. [2]
  10. C driver
  11. C++ driver
  12. C# driver
  13. Haskell driver
  14. Java driver
  15. JavaScript driver
  16. [3]
  17. Perl driver
  18. PHP driver
  19. Python driver
  20. Ruby driver
  21. Casbah, the officially supported Scala Driver for MongoDB
  22. Fang of Mongo
  23. Futon4Mongo
  24. Mongo3
  25. MongoHub
  26. Opricot
  27. Database Master von Nucleon Software
  28. The AGPL - MongoDB Blog: May 5, 2009
  29. MongoDB Powering MTV's Web Properties (10. Mai 2011). Abgerufen am 6. Juli 2011.
  30. Disney Central Services Storage: Leveraging Knowledge and skillsets (24. Mai 2011). Abgerufen am 6. Juli 2011.
  31. MongoDB at foursquare - Presentation at MongoNYC (21. Mai 2010). Abgerufen am 28. Juni 2010.
  32. bit.ly user history, auto-sharded - Presentation at MongoNYC (21. Mai 2010). Abgerufen am 28. Juni 2010.
  33. Jacqueline Maher: Building a Better Submission Form, NYTimes Open Blog. 25. Mai 2010. Abgerufen am 28. Juni 2010. 
  34. How Python, TurboGears, and MongoDB are Transforming SourceForge.net. PyCon 2010 (20. Februar 2010). Abgerufen am 28. Juni 2010.
  35. MongoDB at Etsy. Code as Craft: Etsy Developer Blog (19. Mai 2010). Abgerufen am 28. Juni 2010. (Link nicht mehr abrufbar)
  36. Holy Large Hadron Collider, Batman!. The MongoDB NoSQL Database Blog (3. Juni 2010). Abgerufen am 3. August 2010.
  37. http://appscale.cs.ucsb.edu/datastores.html#mongodb

Wikimedia Foundation.

Schlagen Sie auch in anderen Wörterbüchern nach:

  • MongoDB — Developer(s) 10gen Initial release 2009 Stable release 2.0.1 / October 22, 2011; 31 days ago ( …   Wikipedia

  • MongoDB — Логотип MongoDB Тип Документо ориентированная СУБД Разработчик MongoDB Написа …   Википедия

  • MongoDB — Développeurs 10gen Première version 2009 Dernière version …   Wikipédia en Français

  • Список версий MongoDB — Значимость предмета статьи поставлена под сомнение. Пожалуйста, покажите в статье значимость её предмета, добавив в неё доказательства значимости по частным критериям значимости или, в случае если частные критерии значимости для… …   Википедия

  • Cloud database — A cloud database is a database running on Cloud Computing platform, such as Amazon EC2, GoGrid and Rackspace. There are two common deployment models: Users can run databases on the cloud independently, using a Virtual Machine image, or they can… …   Wikipedia

  • CouchDB — Apache CouchDB Тип Документо ориентированная СУБД Автор …   Википедия

  • NoSQL — En informatique, NoSQL est un buzzword pour désigner une catégorie de système de gestion de base de données (abr. SGBD) destinés à manipuler des bases de données géantes pour des sites web de très grande audience tels que Google, Amazon.com,… …   Wikipédia en Français

  • Document-oriented database — A document oriented database is a computer program designed for storing, retrieving, and managing document oriented, or semi structured data, information. Document oriented databases are one of the main categories of so called NoSQL databases and …   Wikipedia

  • Firebird — У этого термина существуют и другие значения, см. Firebird (значения). Firebird Логотип Firebird Тип Реляционная СУБД Разработчик Сообщество Firebird Напис …   Википедия

  • MongoHQ — Type Private Founder Ben Wyrosdick Jason McCay Headquarters Mountain View, California, United States …   Wikipedia