MySQL vs. MongoDB: Datenbanksysteme im Vergleich

19.10.2011
Die nichtrelationale Datenbank MongoDB macht dem bewährten MySQL-System Konkurrenz. Sie punktet mit einfacher Skalierbarkeit, hoher Flexibilität und Dokumentenorientierung.

MySQL bietet mittlerweile zahlreiche Features sowie bewährte Adminis-trations-Tools und kann vor allem durch Kostenvorteile, Stabilität und hohe Sicherheit überzeugen. Doch seit einigen Jahren stellen Experten das Konzept relatio-naler Datenbanken zunehmend in Frage. Damit bekommt MySQL immer mehr Konkurrenz von innovativen Datenbanklösungen, die ebenfalls als Open Source bereitgestellt werden und einen völlig neuen Ansatz verfolgen.

Das Stichwort lautet "NoSQL". Der Begriff steht, anders als zunächst naheliegend, nicht für "kein SQL", sondern für "nicht nur SQL" (Not only SQL). Die unklare Bezeichnung sollte also nicht als Kampfansage an traditionelle Datenbanken verstanden werden. Ziel ist es vielmehr, relationale Datenbanken dort sinnvoll zu ergänzen, wo sie Defizite aufweisen. Entstanden ist das NoSQL-Konzept als Antwort auf die Unflexibilität sowie relativ schwierige Skalierbarkeit von klassischen Datenbanksystemen. In diesen müssen die Daten nach einem stark strukturierten Modell gespeichert werden.

In Zeiten von Web 2.0, Cloud Computing und sozialen Netzen 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 Informationsnetzes 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 NoSQLLösungen, um die Verfügbarkeit und Performance seines Dienstes zu verbessern.

Der Herausforderer: Was ist MongoDB überhaupt?

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

Das System wurde 2009 vom amerikanischen Startup 10gen nach rund zwei Jahren Entwicklung der Öffentlichkeit als Open-Source-Lösung vorgestellt. Der etwas gewöhnungsbedürftige Name stammt von dem englischen Begriff "humongous", der sich ins Deutsche mit "gigantisch" beziehungsweise "riesig" übersetzen lässt. Die Lösung basiert auf der Programmiersprache C++ und ist 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 dieses Jahr im Rahmen des renommierten "Bossie Awards" der US-amerikanischen CW-Schwesterpublikation "Infoworld" als eine der besten Open-Source-Lösungen prämiert. Wie der Hersteller erklärt, ist die Lösung auf starke Leis-tung, große Datenmengen, hohe Flexibilität sowie einfache Skalierbarkeit ausgelegt.

In den drei Jahren seines Marktauftritts konnte MongoDB, das 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 das standortbezogene soziale Netz Foursquare, das Online-Netzwerk für städtische Kleinanzeigen Craigslist, der URL-Verkürzungs-Service Bit.ly sowie der Musik-Streaming-Dienst Grooveshark.

Tabellen haben ausgedient - Dokumente als Datensätze

Die nichtrelationale Datenbank MongoDB speichert Datensätze in Form von Dokumenten im JSON-Format. Diese sind Javascript-Objekten sehr ähnlich. Der entscheidende Unterschied zu MySQL besteht darin, dass MongoDB dokumentenorientiert arbeitet. Dokumentenbasierende 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 einfach horizontal skalieren.

Statt von Tabellen spricht man bei MongoDB von Kollektionen (Collections). 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. Sie sind dann Javascript-Objekten sehr ähnlich. Das Format stammt von dem kompakten JSON-Format (Javascript Object Notation) ab und ist, wie das Präfix "Binary" (Binary JSON = BSON) 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 verwenden beide Datenbanklösungen eine eindeutige ID pro Datensatz als Primärschlüssel, 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 dazu bei, erfahrenen MySQL-Entwicklern den Einstieg in MongoDB zu erleichtern. MongoDB verzichtet jedoch 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. Einer der Hauptvorteile von MongoDB in den Augen von Entwicklern stellt das zugrunde liegende objektorientierte Datenmodell dar, das besser zu den herkömmlichen Programmiersprachen passt, als es bei relationalen Datenbanken wie MySQL der Fall ist. Im Lauf der Jahre haben sich zahlreiche Lösungen im Bereich ORM ("Object Relational Mapping") etabliert, die Daten aus einer relationalen Datenbank in Objekten abbilden, die dann im Programmcode leichter zu verarbeiten sind.

MongoDB verzichtet auf eine Abfragesprache

Bei MongoDB gibt es für CRUD-Operationen (Create, Read, Update, Delete) und Datenabfragen keine Abfragesprache wie SQL. Stattdessen werden diese Operationen durch objektspezifische Methoden der jeweiligen Programmiersprache betrieben, die in verschiedenen Client-APIs, "Drivers" genannt, 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 verwendeten Programmiersprachen, darunter Javascript, PHP, Perl, Ruby, Python und Java. Alle verfügbaren Client-Driver stehen auf der MongoDB-Website zum kos-tenlosen Download bereit. (ba)

Diego Wyllie ist freier Journalist in München.

Fazit

MySQL kann gegenüber MongoDB mit zahlreichen bewährten Administrations-Tools punkten. Doch mit dem im September 2011 veröffentlichten Online-Werkzeug "MongoDB Monitoring Service‚Äù hat Mongo an dieser Stelle aufgeholt. Der Vergleich zwischen einem System wie MySQL, das seit über einem Jahrzehnt erfolgreich eingesetzt wird, und einer Lösung wie MongoDB, die erst seit knapp drei Jahren auf dem Markt ist, mag auf den ersten Blick unfair erscheinen. Natürlich kann MySQL in Sachen Funktionalität, Verfügbarkeit von ergänzenden Tools und Entwicklerdokumentation gegenüber dem Newcomer punkten. Das wäre gar nicht anders zu erwarten.

Doch wie der Begriff Not only SQL (NoSQL) andeutet, stehen beide Datenbanksysteme 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überzustellen 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 zumindest näher anschauen.