Open-Source-Datenbanken

Datenbanksysteme im Vergleich: MySQL vs. MongoDB

15.11.2011 von Diego Wyllie
Die nicht-relationale Datenbank MongoDB macht der etablierten MySQL-Lösung zunehmend Konkurrenz. Insbesondere für Entwickler von Web-Anwendungen kann die nicht-relationale Datenbank MongoDB eine interessante Lösung sein. Grund genug, sich die Open-Source-Lösung mal etwas näher anzusehen.

MySQL gilt als die populärste Open-Source-Datenbank der Welt. Vor allem in der Web-Entwicklung hat sich dieses relationale Datenbanksystem, das ursprünglich vom Schwedischen Unternehmen MySQL AB im Jahr 1994 entwickelt wurde, als Quasi-Standard etabliert. Nach offiziellen Angaben soll MySQL aktuell über sechs Millionen Installationen weltweit und mehr als 65.000 Downloads am Tag verzeichnen. Zu den prominenten Unternehmen, die auf diese Lösung setzen, zählen Internetriesen wie Google, Twitter, Wordpress, YouTube und Wikipedia, um nur einige Beispiele zu nennen.

MySQL bietet mittlerweile zahlreiche Features und bewährte Administrations-Tools und kann vor allem durch Kostenvorteile, herausragende Stabilität und hohe Sicherheit überzeugen. Doch seit einigen Jahren wird das Konzept relationaler Datenbanken zunehmend in Frage gestellt. Damit bekommt MySQL immer mehr Konkurrenz von neuen, innovativen Datenbanklösungen, die ebenfalls als Open-Source bereitgestellt werden, und einen vollkommen neuen Ansatz verfolgen.

Nicht-relationale Datenbanken stark im Kommen

Das Stichwort lautet hier "NoSQL". Der Begriff steht, anders als zunächst von den meisten erwartet, nicht für "kein SQL", sondern für "nicht nur SQL" (Not only SQL). Die unklare Bezeichnung sollte also nicht als Kampfansage gegen traditionelle Datenbanken verstanden werden. Ziel des neuen Ansatzes ist es vielmehr, relationale Datenbanken sinnvoll zu ergänzen wo sie Defizite aufzeigen. Entstanden ist dieses Konzept in erster Linie als Antwort zur Unflexibilität, sowie zur relativ schwierigen Skalierbarkeit von klassischen Datenbanksystemen, bei denen die Daten nach einem stark strukturierten Modell gespeichert werden müssen.

Bildergalerie:
mongoDB
MongoDB kommt vom englischen Begriff "humongous", der auf Deutsch mit "gigantisch" beziehungsweise "riesig" übersetzt wird.
mongoDB
Die nicht-relationale Datenbank MongoDB speichert Datensätze in Form von Dokumenten im JSON-Format. Diese sind JavaScript-Objekten sehr ähnlich
mongoDB
MongoDB verzichtet auf eine Abfragesprache wie SQL. Stattdessen erfolgen die Datenmanipulation und -Abfrage anhand von Objektspezifischen Methoden, die für alle gängigen Programmiersprachen verfügbar sind.
mongoDB
MySQL kann gegenüber MongoDB mit zahlreichen bewährten Administrations-Tools punkten. Doch mit dem in September 2011 veröffentlichten Online-Werkzeug “MongoDB Monitoring Service” holt Mongo auf.

In Zeiten von Web 2.0, Cloud-Computing und Sozialen Netzwerken wachsen die Datenmengen bei Web-Anwendungen dramatisch. Damit steigen die Anforderungen an Datendurchsatz und Skalierbarkeit der darunter liegenden Datenbanken immer weiter an. Ein Paradebeispiel für diese Problematik ist Twitter. Wie der US-Blog TechCrunch im Juni 2011 berichtete, muss die IT-Landschaft des populären Informations-Netzwerks mittlerweile rund 200 Millionen Tweets am Tag bewältigen. Ein Jahr zuvor waren es "nur" 65 Millionen. Bei solchen datenintensiven Applikationen leiden relationale Datenbanken üblicherweise unter Leistungsproblemen und stoßen oft an ihre Grenzen. Aus diesem Grund setzt Twitter neben MySQL mittlerweile auch auf NoSQL-Lösungen, um die Verfügbarkeit und Performance seines Dienstes zu verbessern.

Was ist MongoDB überhaupt?

Mittlerweile sind aus dem Open-Source-Lager zahlreiche NoSQL-Lösungen hervorgegangen. Die Seite http://www.nosql-datebase.org, betreut von Stefan Edlich, Professor an der Beuth Hochschule für Technik Berlin, bietet einen guten Überblick. Zu den bekanntesten Vertretern dieser neuen Datenbanksorte zählt neben "Redis", "Apache Cassandra" und "CouchDB" auch MongoDB.

Namensgebung: MongoDB kommt vom englischen Begriff "humongous", der auf Deutsch mit "gigantisch" beziehungsweise "riesig" übersetzt wird.
Foto: Diego Wyllie

Das System wurde 2009 vom US-Startup 10gen nach rund zwei Jahren Entwicklung der Öffentlichkeit als Open-Source-Lösung vorgestellt. Der etwas gewöhnungsbedürftige Name stammt aus dem englischen Begriff "humongous", der auf Deutsch mit "gigantisch" beziehungsweise "riesig" übersetzt wird. Die Lösung ist in der Programmiersprache C++ implementiert und für die Betriebssysteme Windows, Mac OS X und Linux erhältlich. Sowohl 32-Bit- als auch 64-Bit-Systeme werden unterstützt. MongoDB wurde 2011 unter anderem bei den renommierten "Bossie Awards" unserer Schwesterpublikation Infoworld als eine der besten Open-Source-Lösungen prämiert. Wie der Hersteller erklärt, ist die Lösung auf hohe Leistung, große Datenmengen, hohe Flexibilität, sowie einfache Skalierbarkeit ausgelegt.

In nur drei Jahren konnte MongoDB, die heute kostenlos in der Version 2.0 zur Verfügung steht, bereits namhafte Unternehmen von seinen Vorteilen überzeugen. So setzen erfolgreiche Web-Anwendungen, die von Millionen Anwendern weltweit verwendet werden, die junge Lösung in kritischen Produktionsumgebungen ein. Dazu zählen unter anderem das Standortbezogene Soziale Netzwerk "Foursquare", das Online-Netzwerk für städtische Kleinanzeigen "Craigslist", der URL-Verkürzungs-Service "Bit.ly", sowie der Musik-Streaming-Dienst "Grooveshark".

Dokumente als Datensätze

Der entscheidende Unterschied zu MySQL besteht darin, dass MongoDB Dokument-orientiert arbeitet. Dokumenten-basierende Datenbanken sind auf eine schemafreie Struktur ausgelegt.

Bei MongoDB gibt es also kein festes Tabellenschema und dadurch beispielsweise auch keine zwingenden Relationstabellen und Joins, die mit der Weiterentwicklung und dem Ausbau der Datenbank immer komplexer werden. Stattdessen lassen sich Relationen entweder direkt im Datensatz speichern oder bei Bedarf individuell bei der Datenabfrage erstellen. Dadurch ist die Datenstruktur wesentlich flexibler als bei MySQL und lässt sich auf einfache Weise horizontal skalieren (Auto-Sharding).

Objektdarstellung: Die nicht-relationale Datenbank MongoDB speichert Datensätze in Form von Dokumenten im JSON-Format. Diese sind JavaScript-Objekten sehr ähnlich.
Foto: Diego Wyllie

Statt von Tabellen wird bei MongoDB von Kollektionen (Collections) gesprochen. Jede Kollektion kann Dokumente beinhalten analog zu Zeilen beziehungsweise Datensätzen in einer MySQL-Tabelle. Dokumente werden im so genannten BSON-Format gespeichert und ausgegeben und sind JavaScript-Objekten sehr ähnlich (siehe Grafik). Dieses Format stammt von dem kompakten, immer beliebteren JSON-Format (JavaScript Object Notation) ab und ist, wie das Präfix "Binary" andeutet, für eine overhead-arme Darstellung von binären Datenobjekten ausgelegt. Jedes Dokument kann dabei eine beliebige Anzahl an Feldern besitzen, während eine verschachtelte Array-Struktur ebenfalls möglich ist. Zudem dürfen Dokumente auch innerhalb eines Dokuments gespeichert werden.

Doch bei all diesen Unterschieden weisen MongoDB und MySQL auch einige wesentliche Gemeinsamkeiten auf. So wird bei beiden Datenbanklösungen eine eindeutige ID pro Datensatz als Primärschlüßel verwendet, während in beiden Fällen Select-relevante Spalten indiziert werden können, um die Performance bei der Abfrage dieser Felder zu erhöhen. Diese Gemeinsamkeiten tragen nicht zuletzt dazu bei, erfahrenen MySQL-Entwicklern den Einsteig in MongoDB zu erleichtern.

MongoDB verzichtet auf Abfragesprache

Einer der Hauptvorteile von MongoDB in den Augen von Entwicklern stellt das zugrunde liegende Objektorientierte Datenmodell dar, das besser zu den gängigen Programmiersprachen passt als relationale Datenbanken wie MySQL. Im Laufe der Jahre haben sich nämlich zahlreiche Lösungen im Bereich ORM ("Object Relational Mapping") etabliert, die Daten aus einer relationalen Datenbank in Objekte abbilden, die dann im Programmcode leichter zu verarbeiten sind. In der Java-Welt stellt "Hibernate" eine solche Lösung dar, die sehr beliebt ist. Aber auch für jede weitere gängige Sprache finden Entwickler ein entsprechendes Tool.

Anders: MongoDB verzichtet auf eine Abfragesprache wie SQL. Stattdessen erfolgen die Datenmanipulation und -Abfrage anhand von Objektspezifischen Methoden, die für alle gängigen Programmiersprachen verfügbar sind.
Foto: Diego Wyllie

Bei MongoDB gibt es für CRUD-Operationen (Create, Read, Update, Delete) und Datenabfragen keine Abfragesprache wie SQL. Stattdessen werden sie durch objektspezifische Methoden der jeweiligen Programmiersprache realisiert, die in verschiedenen Client-APIs, "Drivers" gennant, zusammengefasst sind. Damit profitieren Entwickler von den typischen Vorteilen von ORM-Werkzeugen ohne zusätzliche Tools verwenden und ohne sich um Kompatibilitätsprobleme sorgen zu müssen. MongoDB unterstützt dabei alle im Web häufig verwendete Programmiersprachen, darunter JavaScript, PHP, Perl, Ruby, Python und Java. All die verfügbaren Client-Drivers stehen auf der MongoDB-Website zum kostenlosen Download bereit.

Fazit

Der Vergleich zwischen einem System wie MySQL, das über ein Jahrzehnt erfolgreich in der Praxis eingesetzt wird, und einer Lösung wie MongoDB, die erst seit knapp drei Jahren auf dem Markt erhältlich ist, ist wohl recht unfair. Natürlich kann MySQL in Sachen Funktionalität, Verfügbarkeit an ergänzenden Tools und Entwickler-Dokumentation gegenüber dem Newcomer punkten. Das wäre gar nicht anders zu erwarten.

Tools: MySQL kann gegenüber MongoDB mit zahlreichen bewährten Administrations-Tools punkten. Doch mit dem in September 2011 veröffentlichten Online-Werkzeug "MongoDB Monitoring Service" holt Mongo auf.
Foto: Diego Wyllie

Doch wie der Begriff NoSQL andeutet, stehen beide Datenbanksysteme eigentlich nicht unbedingt in direkter Konkurrenz zueinander, sondern können sich gegenseitig ergänzen. Dennoch, wenn es um die persistente Datenspeicherung bei Web-Anwendungen geht, stellen relationale Datenbanken nicht mehr die einzige Alternative dar. Bei eigenen Projekten wären Entwickler heute also gut beraten, die Vor- und Nachteile der beiden Systeme gegenüber zu stellen und entsprechend den eigenen Anforderungen und Prioritäten zu bewerten.

Muss das System mit großen Datenmengen effizient umgehen können? Werden hohe Anforderungen an Skalierbarkeit und Flexibilität der Datenbank gestellt? Sollen sich die Daten über mehrere Server verteilen lassen? Sind häufige Änderungen an der Datenstruktur in Zukunft zu erwarten? Wenn Sie die meisten dieser Fragen mit "Ja" beantworten, dann sollten Sie sich MongoDB sicherlich näher anschauen. (mje)

Dieser Artikel basiert auf einem Beitrag unserer Schwesterpublikation Computerwoche.