FOM - Hochschule für Oekonomie & Management Essen in Kooperation mit der FH Dortmund Studienfach: IT-Management 2. Semester Wintersemester 2011 Betreuer: Prof. Dr. Gregor Sandhaus Analyse und Bewertung von relationalen Datenbanken gegenüber NoSQL Datenbanken - Ein Vergleich von mySQL und mongoDB Hausarbeit vorgelegt von: Peyman Pouryekta Matrikelnummer: 198124 Essen, den 03. Januar 2012 Inhaltsverzeichnis Abkürzungsverzeichnis...................................................................................................... 3 Abbildungsverzeichnis....................................................................................................... 4 Tabellenverzeichnis............................................................................................................ 5 1 Einleitung........................................................................................................................ 6 2 Grundlagen...................................................................................................................... 7 2.1 Datenbank.............................................................................................................. 7 2.1.1 Relationale Datenbanken............................................................................. 8 2.1.1.1 Relation.............................................................................................. 8 2.1.1.2 Tabelle................................................................................................ 8 2.1.1.3 Normalisierung.................................................................................. 9 2.1.1.4 Transaktion......................................................................................... 9 2.1.2 NoSQL Datenbanken................................................................................. 10 2.1.2.1 JSON................................................................................................ 10 2.1.2.2. Horizontale Skalierung................................................................... 11 2.1.2.3 CAP Theorem.................................................................................. 11 2.1.2.4 Eventually Consistency.................................................................... 12 2.2 Qualitätsanforderungen....................................................................................... 13 3 Untersuchung................................................................................................................ 14 3.1 MySQL................................................................................................................ 14 3.1.1 MySQL Tools............................................................................................ 14 3.1.2 SQL............................................................................................................ 15 3.2 MongoDB............................................................................................................ 16 3.2.1 MongoHub................................................................................................. 16 3.2.2 Object-Based Query Language.................................................................. 17 3.2.3 Sharding..................................................................................................... 17 3.3 Vergleich.............................................................................................................. 19 3.3.1 Kriterien..................................................................................................... 19 3.3.2 Gegenüberstellung ................................................................................... 20 3.3.3 Bewertung.................................................................................................. 20 6 Schlussbetrachtung....................................................................................................... 22 Literaturverzeichnis......................................................................................................... 23 2 Abkürzungsverzeichnis Abkürzung DBMS SQL NoSQL JSON CAP BSON Beschreibung Database Management System Structured Query Language Not only SQL JavaScript Object Notation Consistency, High Availability, Partition Tolerance Binary JSON 3 Abbildungsverzeichnis Nummer 1. 2. Beschreibung JavaScript Object Notation Forfeit Consistency 4. MySQL Query Browser 3. 5. 6. 7. MySQL Administrator MongoHub Administration MongoHub Query Sharding Seite 11 12 14 15 16 17 18 4 Tabellenverzeichnis Nummer 1. Beschreibung MongoDB vs MySQL Seite 20 5 1 Einleitung In der heutigen Zeit von Social Media Applikationen ist es notwendig eine sehr große Anzahl an Anfragen und User in einer Applikation zu behandeln. Mit herkömmlichen relationalen Datenbanken ist dies nicht immer möglich, da die Systeme früher oder später Performanceeinbußen in Kauf nehmen müssen. Relationale Datenbanken sind grundsätzlich nicht für hohe Skalierbarkeit ausgelegt. Hier setzen NoSQL Datenbanken wie MongoDB an. Die Arbeit befasst sich mit den beiden Datenbanken MySQL und MongoDB. Die Grundfunktionen beider Datenbanken werden beschrieben und einander gegenübergestellt. Der Autor möchte zeigen welche Vor- und Nachteile die jeweilige Datenbank hat und für welchen Bereich sie somit eingesetzt werden kann. Im ersten Teil dieser Arbeit geht es um die beiden Datenbank Formen relationale Datenbanken und NoSQL Datenbanken. Außerdem werden kurz die Qualitätsanforderungen an eine Datenbank bestimmt. Im Hauptteil der Arbeit befasst sich der Autor mit der MySQL Datenbank und der MongoDB. Dabei sollen Besonderheiten der jeweiligen Systeme herausgestellten werden. Anschließend werden die beiden Datenbanken anhand fester Kriterien gegenübergestellt und Vor- und Nachteile des jeweiligen Systems betrachtet. Zum Schluss wird auf das Ergebnis eingegangen und eine Bewertung vorgenommen. 6 2 Grundlagen In diesem Kapitel beschäftigt sich der Autor mit den Grundlagen von Datenbanken. Speziell relationale- und hierachischen-Datenbanken werden hier betrachtet und deren Anforderungen in der heutigen Zeit. 2.1 Datenbank In fast jeder Applikation wird eine Datenbank eingesetzt. Die Aufgabe einer Datenbank ist die Speicherung, Verwaltung und Manipulation von Informationen. Sascha Kersken definiert den Begriff wie folgt:1 „Der Begriff bezeichnet nämlich zwei verschiedene Dinge: zum einen die Datensammlung selbst, zum anderen das Programm, das diese Daten verwaltet. [...] Das Anwendungsprogramm, mit dem diese Daten verwaltet werden können, enthält mehr oder weniger mächtige Funktionen zum Suchen, Sortieren, Filtern und formatierten Ausgeben dieser Daten. Ein solches Programm wird als Database Management System (DBMS), also Datenbankverwaltungssystem, bezeichnet.“ In dieser Arbeit wird der Begriff Datenbank im Sinne von DBMS verwendet. Je nach Art und Anforderung an eine Applikation können unterschiedliche Formen von Datenbanksystemen verwendet werden:2 • „hierachisch: Die Datenobjekte können ausschließlich in einer Eltern-Kind-Beziehung zueinander stehen. • netzwerkartig: Die Datenobjekte werden miteinander in Netzen verbunden. • relational: Die Daten werden zeilenweise in Tabellen verwaltet. Es kann beliebige Beziehungen zwischen Daten geben. Sie werden durch Werte bestimmter Tabellenspalten festgelegt. • objektorientiert: Die Beziehungen zwischen Datenobjekten werden 1 2 Kersken, Handbuch für Fachinformatiker, S.355 Wikipedia, Datenbanken: Verschiedene Formen von Datenbanken 7 vom Datenbanksystem selbst verwaltet. Objekte können Eigenschaften und Daten von anderen Objekten erben. Es existiert eine Vielzahl von Misch- und Nebenformen, wie zum Beispiel das objektrelationale Modell.“ Der Autor beschäftigt sich in dieser Arbeit mit einer relationalen- und einer dokumentenbasierter-Datenbanken (Mischform aus hierarchisch und relational). 2.1.1 Relationale Datenbanken Eine relationale Datenbank besteht, wie der Name schon sagt aus Relationen. Die Daten werden in Tabellen gehalten die untereinander dann Relationen beinhalten können. 2.1.1.1 Relation Nach Klug ist der Begriff der Relation im Bezug auf relationalen Datenbanken wie folgt zu erklären:3 „Relationale Datenbanken basieren auf dem mathematischen Konzept der Relation. Eine Relation ist eine Teilmenge des kartesischen Produktes der Elemente einer Menge. Letzteres ist die Menge, die aus der Kombination aller ihrer Elemente entsteht.“ Bei der Speicherung von Daten in einer relationalen Datenbank, werden Objekte aus der realen Welt mit ihren Eigenschaften in der Datenbank abgebildet. Solche Objekte werden in der Datenbank als Enitäten bezeichnet. Die Eigenschaften einer Entität werden als Attribute bezeichnet. Entitäten mit gleichen Attributen sind vom gleichen Entitätstyp und können somit zu Entitätsmengen zusammengefasst werden.4 2.1.1.2 Tabelle Die Daten in einer relationalen Datenbank werden in Tabellen organisiert. Durch Verwendung von Primärschlüsseln in einer Tabelle sind die Elemente einer Relation eindeutig von einander unterscheidbar. Dieser Primärschlüssel sorgt für die Enitäts-Integrität einer Tabelle. Durch den Einsatz von Fremdschlüsseln aus einer anderen Tabelle kann so 3 4 Klug, Datenbankanwendungen entwerfen & programmieren, S.55 Vgl. Klug, Datenbankanwendungen etnwerfen & programmieren, S.56 8 eine Relation erzeugt werden. Das durch Relation erzeugte konkretisierte konzeptionelle Schema wird Relationsschema genannt.5 2.1.1.3 Normalisierung Bei der Normalisierung geht es darum, die Daten in eine neue Form zu bringen, so dass sie optimiert verwendet werden können. Es kann zu konsistenter Datenhaltung führen und eliminiert Redundanzen. Es gibt mehrere Formen von Normalisierung: 1. Normalform: Verlangt, dass die Information in einem Datenbankfeld atomar ist. 2. Normalform: Fordert zusätzlich, dass alle Felder in einer Tabelle nur vom Primärschlüssel abhängen. 3. Normalform: Fordert zusätzlich, dass alle Felder funktional unabhängig von einander sind.6 2.1.1.4 Transaktion Eines der wichtigsten Eigenschaften von relationalen Datenbanken sind Transaktionen. Sie betrachten eine Folge von Programmschritten als eine logische Einheit und gewährleisten einen fehlerfreie Ausführung und somit den konsistenten Zustand der Datenbank. Transaktionen besitzen ACID-Eigenschaften:7 • „Atomicity bedeutet, dass eine Transaktion in ihrer Ausführung nicht weiter unterteilbar ist, also ganz oder gar nicht ausgeführt wird. Die kleinste Transaktion enthält eine einzige SQL-Anweisung. • Consistency bedeutet, dass ein vor Transaktionsbeginn konsistenter Datenbestand durch die Ausführung der Transaktion wieder in einen konsistenten Datenbestand überführt wird. • Isolation bedeutet, dass gleichzeitig arbeitende Transaktionen sich nicht gegenseitig beeinflussen, sie in einer Art von simuliertem EinProgramm- und Ein-Benutzer-Modus ablaufen. • Duration bedeutet, dass nach einem commit die Wirkung einer Trans5 6 7 Vgl. Klug, Datenbankanwendungen etnwerfen & programmieren, S.58 Vgl. Kersken, Handbuch für Fachinformatiker, S.362 Klug, Datenbankanwendungen etnwerfen & programmieren, S.331 9 aktion dauerhaft ist.“ 2.1.2 NoSQL Datenbanken Not only SQL (NoSQL) Datenbanken verfolgen einen nicht-relationalen Ansatz. Die Daten werden hier bei nicht in einer Tabelle organisiert, sondern meist in der JavaScript Object Notation (JSON) abgelegt. Es findet generell keine Normalisierung statt. Die abzulegenden Objekte werden als Dokument behandelt und ganzheitlich abgelegt. Ziel der NoSQL Datenbanken ist es performanter, sklaierbarer und flexibler als relationale Datenbanken zu sein. 2.1.2.1 JSON JSON ist eine sehr kompaktes Dateiformat, das menschenlesbar und maschinenlesbar ist. Es kennt folgende Datentypen:8 • Nullwert: Wird dargestellt als null • boolescher Wert: Wird dargestellt durch die Schlüsselworte true und false • Zahl: Wird dargestellt durch eine Folge von Ziffern 0-9 die durch ein negatives Vorzeichen - eingeleitet und durch einen Dezimalpunkt . unterbrochen werden kann. Exponenten e oder E können mit den gleichen Regeln ergänzt werden. • Zeichenkette: Wird durch doppelte Anführungszeichen “ gekennzeichnet. • Array: Beginnt mit [ endet mit ] und enthält Werte, die durch ein Komma , getrennt werden. • Objekt: Beginnt mit { endet mit } und enthält Eigenschaften, die durch ein Komma , getrennt werden. • Objekt Eigenschaften: Besteht aus einem Key/Value Pair, die durch einen Doppelpunkt : getrennt werden. Der Key ist eine Zeichenkette und muss immer in einem Objekt eindeutig sein. Der Value kann ein Objekt, Array, Zeichenkette, Zahl, boolescher Wert oder ein Nullwert sein. 8 Vgl. Wikipedia, JavaScript Object Notation: Datenstruktur und Formatdefinition 10 1. JavaScript Object Notation 9 2.1.2.2. Horizontale Skalierung Horizontale Skalierung kommt immer dann zum Einsatz, wenn man ein schreibintensives, hochperformates System hat, das mit großen Datenmengen arbeiten muss. Dabei werden mehrere Server verwendet, die sich die Arbeit teilen. Das hat zusätzlich positive Auswirkungen auf Zuverlässigkeit und Verfügbarkeit. ACID-Eigenschaften von Transkationen lassen sich damit auch anwenden, jedoch tritt dann bei großen verteilten Systemen das CAP Theorem auf.10 2.1.2.3 CAP Theorem Das Theorem von Eric Brewer besagt,11 „dass ein verteiltes System nicht gleichzeitig alle drei Anforderungen erfüllen kann sondern höchstens zwei: • Starke Konsistenz bedeutet, dass alle Knoten zur selben Zeit die gleiche Sicht auf die Daten haben, auch wenn die Daten verändert wurden 9 10 11 Wikipedia, JavaScript Object Notation: Datenstruktur und Formatdefinition Vgl. Spichale, JavaMagazin 8.2011, Cassandra und Hector, S.50 Spichale, JavaMagazin 8.2011, Cassandra und Hector, S.50 11 • Hochverfügbarkeit bedeutet, dass der Ausfall von einem Knoten durch die verbleibenden kompensiert werden kann • Partitionstoleranz bedeutet, dass die Funktionsfähigkeit des Systems erhalten bleibt, auch wenn Nachrichten verloren gehen“ Bei den meisten NoSQL Datenbanken wird die Konsistenz vernachlässigt, da die beiden anderen Punkte wichtiger sind für hochperformante Systeme. Forfeit Consistency These Examples Coda Consistency Availability Web cachinge DNS Traits Tolerance to network Partitions expirations/leases conflict resolution The Real ACI – W But Sym data over optimistic PODC Keynote, July 19, 2000 2. Forfeit Consistency 12 2.1.2.4 Eventually Consistency Eventually Consistency ist eine Form der schwachen Konsistenz, bei der die Daten innerhalb einer Zeit inkonsistent sein können. Durch diese Toleranz lassen sich erhebliche Verbesserungen bei der Performace von Lese- und Schreibeoperationen feststellen. Auch die Partitionstoleranz wird verbessert, da das System auf Anfragen reagieren kann, auch wenn die Mehrheit der Servern nicht erreichbar ist.13 12 13 Brewer, PODC Keynote Slides, S.5 CAP Take Homes Vgl. Spichale, JavaMagazin 8.2011, Cassandra und Hector, S.50 Can have consistency & availability within a cluster (foundation of Ninja), but it is still hard in 12 2.2 Qualitätsanforderungen Anforderungen und Ziele, die eine Datenbank verfolgt sind nach Alfred Moos folgende:14 „Datenbanken sind heute der Kern betriebswirtschaftlicher Anwendungssysteme und nicht nur dieser. Mit ihrem Einsatz werden viele Ziele verfolgt. Die wichtigsten sind: • Datenunabhängigkeit der Anwendungsprogramme • Verlässliche Richtigkeit der Daten - Integrität • Zentrale Verwaltung der Daten • Datensicherheit und Datenschutz“ Im Laufe der Zeit werden Applikationen immer größer und komplexer. Demnach lassen sich noch zusätzlich folgende Anforderungen nennen, die bereits jetzt aber auch in Zukunft relevant sind: • Flexibilität • Skalierbarkeit • Performance 14 Moos, Datenbank-Engineering, S.121 13 3 Untersuchung In der folgenden Untersuchung betrachtet der Autor die beiden Datenbanken MySQL und MongoDB. Zum Ende werden diese beiden Datenbanken nach bestimmten Kriterien gegenübergestellt. 3.1 MySQL MySQL ist eine relationale Datenbank Software. Es gibt eine große Community und sie wird oft für dynamische Webseiten verwendet. Die Software ist als Open Source und als kommerzielle Enterpriseversion verfügbar. Die Software unterstützt die Betriebssysteme Unix, Linux, Windows, Mac OS, i5/OS und OpenVMS und ist in C++ geschrieben. 3.1.1 MySQL Tools Über die MySQL GUI-Tools lässt sich die Datenbank verwalten. Dabei gibt es einmal den MySQL Administrator, der eine Reihe an Funktionen liefert, um die Datenbank zu administrieren. 3. MySQL Administrator 14 Das zweite Tool ist der MySQL Query Browser. Er kann über SQL Queries die Inhalte der Tabellen darstellen. 4. MySQL Query Browser 3.1.2 SQL SQL ist die Sprache, die Abfragen bei der relationalen Datenbanken ermöglicht. Die Grundfunktionen lauten: • CREATE: Mit dieser Funktion ist es möglich neue Tabellen anzulegen • INSERT: Mit dieser Funktion ist es möglich neue Datensätze einzufügen • SELECT: Mit dieser Funktion können die Daten abgefragt werden • UPDATE: Mit dieser Funktion können Daten aktualisiert werden • DELETE: Mit dieser Funktion können Daten entfernt werden Mit diesen Funktionen lassen sich alle einfachen Datenbank Abfragen realisieren. 15 3.2 MongoDB MongoDB ist eine schemalose dokumentenorientierte Datenbank Software. Sie wird vorallem in großen Systemen eingesetzt bei denen es wichtig ist, horizontal zu skalieren. Die Software ist als Open Source verfügbar und plattformunabhängig. 3.2.1 MongoHub Über das Tool MongoHub kann man die MongoDB administrieren. Es stellt ähnlich wie bei MySQL umfangreiche Funktionen bereit. 5. MongoHub Administration Um Inhalte aus der Datenbank betrachten zu können gibt es unter MongoHub eine Query View. Hier können die Werte gelesen und verändert werden. 16 6. MongoHub Query 3.2.2 Object-Based Query Language MongoDB hat eine dynamische, objektbasierende Abfragesprache. Die Grundfunktionen lauten: • find(); zum selektieren und filtern von Daten • insert(); zum hinzufügen von Daten • remove(); zum entfernen von Daten • save(); zum speichern von Daten Die Daten werden dabei in BSON gehalten. BSON ist eine JSON ähnliches Format. 3.2.3 Sharding Sharding befasst sich mit der horizontallen Fragmentierung. MongoDB bietet dabei eine 17 Auto-Sharding Funktion. Die Gründe für Sharding sind Vermeidung vom Single Point of Failure, Hochverfügbarkeit, Skalierbarkeit und somit auch Performance Verbesserung. 7. Sharding 15 In MongoDB werden die Daten aufgeteilt, somit liegen die Daten in verschiedenen Replica Sets. Diese Replica Sets beinhalten eine Anzahl an Shards in denen die Daten organisiert sind. Die Shards in einem Replica Set teilen sich die Daten und sind so organisiert, dass bei einem Ausfall eines Shards die Daten von einem der anderen Shards zur Verfügung gestellt werden kann. Der Mongo Router ist dafür zuständig auf die jeweiligen Replica Sets zu routen. Auch hier kann ein Replica Set ausfallen, ohne dass der Betrieb der Applikation gestört wird, da es noch weitere Replica Sets gibt die dann einspringen. 15 Vgl. Banker, MongoDB in Action, S.217 18 3.3 Vergleich In diesem Kapitel werden die beiden Datenbanken miteinander verglichen. Es werden Kriterien gewählt anhand dessen dann eine Gegenüberstellung durchgeführt wird. Anschließend wird das Ergebnis vom Autor bewertet. 3.3.1 Kriterien Folgende Kriterien wurden festgelegt an denen die beiden Datenbanken gegenübergestellt werden: 16 • Data Model • Data Types • Large Objects (Files) • Horizontal partitioning scheme • Replication • Object(row) Storage • Query Method • Secondary Indexes • Atomicity • Interface • Server-side batch data manipulation • Written in • Concurrency Control • Geospatial Indexes • Distributed Consistency Model 16 Vgl. mongodb.org: MongoDB, CouchDB, MySQL Compare Grid 19 3.3.2 Gegenüberstellung 17 18 Data Model Data Types MongoDB Document-Oriented (BSON) string, int, double, boolean, MySQL Relational link date, bytearray, object, array, Large Objects (Files) Horizontal partitio- others Yes (GridFS) Auto-sharding Blobs Partitioning ning scheme Replication Master-slave and replica sets Master-slave, multi-master, Object(row) Storage Query Method and circular replication Collection-based Table-based Dynamic; object-based query Dynamic; SQL language Secondary Indexes Yes Atomicity Single document Interface Native drivers ; REST add-on Server-side batch data Map/Reduce, server-side manipulation Written in Concurrency Control Geospatial Indexes Geospatial Indexes javascript C++ Update in Place Yes Strong consistency. Even- Yes Yes - advanced Native drivers Yes (SQL) C++ Spatial extensions Strong consistency. Even- tually consistent reads from tually consistent reads from secondaries are available. secondaries are available. 1. MongoDB vs. MySQL 3.3.3 Bewertung Anhand der Gegenüberstellung erkennt man die Vor- und Nachteile der jeweiligen Datenbank. MySQL verwendet ein relationales Datenmodel, das eine starke Konsistenz ermöglicht. Dadurch müssen die Daten zuerst in Tabellenform gebracht werden, um das Ablegen zu ermöglichen. Zum horizontalen Partitionieren wird die Partitionierung eingesetzt, bei dem die Daten kategorisiert werden und somit in einem bestimmten Bereich abgelegt werden. Die Größten Vorteile bei MySQL liegen in der starken Konsistenz und 17 mongodb.org: MongoDB, CouchDB, MySQL Compare Grid 18 MySQL: MySQL 5.0 Manual 20 der großen Community von relationalen Datenbanken. Bei MongoDB wird auf hohe Verfügbarkeit und hohe Performanz gesetzt. Die Daten werden als Dokumente abgelegt und sind durch das BSON Format stark minimalisiert. Zum horizontalen patritionieren wird Auto-Sharding verwendet. Hierbei werden die Daten in Fragmenten auf mehrere Shards verteilt die dann untereinander organisiert sind und die Daten ausliefern können. Die größten Vorteile bei Mongo DB liegen bei der Ausfallsicherheit, Performance und der Skalierung der Datenbank. Alle weiteren Punkte sind bei beiden Datenbanken sehr ähnlich oder liefern sehr ähnliche Ergebnisse die keine gravierenden Vorteile verschaffen. 21 6 Schlussbetrachtung Zusammenfassend kann man sagen, das beide Datenbanken ihr Existenzrecht besitzen. MySQL hat eine große Community und wird sehr häufig eingesetzt. Die starke Konsistenz ist oft notwendig bei kleinen bis mittelgroßen Software Lösungen. Das Tooling und die Abfragesprache ist sehr ausgereift und ermöglich fast jede erdenkliche Abfrage. Bei MongoDB liegt der Schwerpunkt auf Skalierung und Performance. Die Datenbank ist sehr schnell und kann ohne großen Aufwand skaliert werden. Das Tooling ist vergleichbar mit den MySQL Tools und die Abfragesprache ermöglicht ähnliche Funktionen wie bei SQL, ist aber nicht so ausgereift, da es auch nicht notwendig ist. Da MongoDB nicht relational ist, wird in Kauf genommen, dass Daten teilweise redundant gehalten werden. Es liegt im Vordergrund die schnelle Erreichbarkeit der Daten. Die Datenbank wird vorallem im Enterprise Bereich eingesetzt, in dem es sehr viele User und Anfragen gibt die bedient werden müssen. 22 Literaturverzeichnis Banker, Kyle: MongoDB in Action, Manning Publications, 2011 Brewer, Eric: PODC Keynote Slides, 2000 Kersken, Sascha: Handbuch für Fachinformatiker, Galileo Computing, 2005 Klug, Uwe: Datenbankanwendungen entwerfen & programmieren - Von der objektorientierten Analyse bis hin zur SQL-Implementierung, W2L GmbH 2008 MongoDB: MongoDB, CouchDB, MySQL Compare Grid http://www.mongodb.org/ display/DOCS/MongoDB%2C+CouchDB%2C+MySQL+Compare+Grid (28.12.2011, 12:14 Uhr) Moos, Alfred: Datenbank-Engineering, Vieweg Verlag 2004 MySQL: Chapter 10. Data Types http://dev.mysql.com/doc/refman/5.0/en/data-types. html (28.12.2011, 12:30 Uhr) Spichale, Kai: JavaMagazin 8.2011, Cassandra und Hector, S.50 Wikipedia: Datenbanken: Verschiedene Formen von Datenbanksystemen http:// de.wikipedia.org/wiki/Datenbank#Verschiedene_Formen_von_Datenbanksystemen (19. Dez. 2011, 16:58 Uhr) Wikipedia: JavaScript Object Notation: Datenstruktur und Formatdefinition http:// de.wikipedia.org/wiki/JavaScript_Object_Notation (20. Dez. 2011, 19:36 Uhr) 23