Anwendungsorientierte Evaluation dokumentenorientierter

Werbung
Fachhochschule Aachen
Campus Jülich
Fachbereich Medizintechnik und Technomathematik
Scientific Programming
Anwendungsorientierte Evaluation dokumentenorientierter
Datenbanksysteme
Seminararbeit von Robin Landsmann
Aachen, den 15. Dezember 2013
Inhaltsverzeichnis
1. Einleitung und Motivation...................................................................................................4
1.1 Einleitung.....................................................................................................................4
1.2 Der Istzustand..............................................................................................................4
1.3 Motivation.....................................................................................................................5
1.4 Ziel der Arbeit...............................................................................................................5
2. Einführung in Datenbanken...............................................................................................7
2.1 Eigenschaften einer Datenbanken..............................................................................7
2.2 Datenbankmodelle in der Übersicht............................................................................7
2.2.1 Hierarchische Datenbanken.................................................................................8
2.2.2 Netzwerkdatenbanken..........................................................................................8
2.2.3 Objektorientierte Datenbanken.............................................................................8
2.2.4 Relationale Datenbanken.....................................................................................9
2.2.4.1 Das Konsistenzmodell ACID.......................................................................10
2.2.5 Objektrelationale Datenbanken..........................................................................10
2.3 Normalisierung...........................................................................................................10
2.3.1 Erste Normalform................................................................................................11
2.3.2 Zweite Normalform.............................................................................................11
2.3.3 Dritte Normalform...............................................................................................12
2.4 Folgen der Normalisierung für die antibodies-online GmbH.....................................13
3. Einführung in NoSQL.......................................................................................................14
3.1 NoSQL Grundlagen...................................................................................................15
3.2 Das CAP Theorem.....................................................................................................15
3.2.1 Konsistenzmodelle.............................................................................................16
3.2.2 Map/Reduce.......................................................................................................17
3.2.3 Multiversion Concurrency Control......................................................................18
3.2.4 REST..................................................................................................................19
3.3 NoSQL Systeme........................................................................................................19
3.3.1 Wide Column Stores..........................................................................................19
3.3.2 Key/Value-Systeme............................................................................................20
3.3.3 Graphdatenbanken.............................................................................................20
4. Dokumentenorientierte Datenbanken..............................................................................21
4.1 CouchDB....................................................................................................................21
4.1.1 Datenmodell.......................................................................................................21
4.1.2 Map/Reduce und Views.....................................................................................22
4.1.3 Replikation..........................................................................................................22
4.1.4 Skalierbarkeit......................................................................................................22
4.1.5 Zugriffskontrolle..................................................................................................22
4.2 MongoDB...................................................................................................................23
4.2.1 Datenmodell.......................................................................................................23
4.2.2 Map/Reduce.......................................................................................................24
4.2.3 Replikation..........................................................................................................24
4.2.4 Skalierbarkeit......................................................................................................24
4.2.5 Zugriffskontrolle..................................................................................................25
4.3 Multimodel-Datenbanken...........................................................................................25
4.3.1 OrientDB.............................................................................................................25
4.3.1.1 Datenmodell................................................................................................25
4.3.1.2 Map/Reduce................................................................................................25
4.3.1.3 Replikation...................................................................................................26
4.3.1.4 Zugriffskontrolle...........................................................................................26
5. Fazit..................................................................................................................................27
1. Einleitung und Motivation
Diese Arbeit behandelt das Thema anwendungsorientierte Evaluation dokumentenorientierter Datenbanksysteme am Fallbeispiel der antibodies-online GmbH. Hierzu werden
kurz der Ist-Zustand und die Motivation beschrieben, gefolgt von einer allgemeinen Einführung in Datenbanken und den Begriff NoSQL. Dann werden dokumentenorientierte Datenbanken im Detail behandelt. Zum Abschluss werden mehrere Datenbanksysteme
beschrieben und miteinander verglichen.
1.1 Einleitung
Für einen Onlineshop ist es wichtig Produktdaten stets aktuell, vollständig und für den
Kunden möglichst übersichtlich bereit zu stellen. Die Produktdaten werden in einer Datenbank gespeichert, die das Shopsystem mit allen Informationen versorgt.
Die Daten müssen jedoch zuerst einmal in die Datenbank eingespeist und im Regelfall
vorher noch aufbereitet werden. Hierbei ist es enorm wichtig, dass es nicht zu Ausfällen im
Shop oder für den Kunden spürbaren Ladezeitverzögerungen kommt, wenn Produktdaten
bearbeitet werden, da dies zu Frustration im Einkaufserlebnis des Kunden führt und dieser
den Einkauf abbrechen kann.
Die antibodies-online GmbH ist ein Onlinemarktplatz für Forschungsantikörper mit über
einer Millionen verfügbaren Produkten von mehr als 130 Herstellern. Sie stellt keine eigenen Produkte her, sondern ist ein reiner Reseller im Bereich der biologischen Forschung.
1.2 Der Istzustand
Momentan gibt es eine MySQL-Datenbank in der alle Daten des Onlineshops verwaltet
werden. Es liegen zur Zeit etwa 1,6 Millionen Produkte in acht Produktkategorien vor, die
über 100 Produktattribute beinhalten können. Allen Produkten liegt, ungeachtet der Kategorie das selbe Schema zugrunde. Die Datenbank befindet sich in der dritten Normalform1.
Für ein Update, wenn beispielsweise ein Hersteller aktuellere Informationen liefert, müssen die Produktdaten des betreffenden Herstellers in Dateien exportiert werden, da die
Bearbeitung durch Mitarbeiter mit externen Programmen erfolgt. Die aktuellen Informationen werden mit den Neuen verglichen und bei Bedarf aktualisiert. Danach werden die
aktualisierten Informationen wieder importiert. Sowohl Im- als auch Exporte werden über
1
Nähere Behandlung im Kapitel Normalisierung
4
CSV-Dateien (Comma-seperated value) realisiert. Dies ist nötig, da ein Format benötigt
wird, das sowohl von den Bearbeitungsprogrammen, als auch von den Bearbeitern gelesen werden kann. Durch die hohe Anzahl an Produktattributen kommt es zu langen Ladezeiten beim bereitstellen der Exporte2, die die Bearbeitung verzögern.
1.3 Motivation
Die Kontrolle über die Produktdaten soll künftig in den Händen der Mitarbeiter liegen, die
diese bearbeiten. Die Datenlage soll nicht mehr vom Shopsystem abhängig sein. Das
neue System soll den Mitarbeitern einen schnellen Zugriff auf die Daten ermöglichen. Es
soll nicht zu Verzögerungen im Bearbeitungsprozess kommen, weil Mitarbeiter auf Daten
warten müssen. Durch das separate System soll die Last auf den Live-Server gemindert
werden, da von diesem keine Exporte mehr bereitgestellt werden müssen. Zudem sollen
Metainformationen zu Produkten gespeichert werden können, die für den Kunden nicht
von Bedeutung sind, sondern nur der Klassifizierung für die Mitarbeiter dienen und somit
auch nicht an die Shop-Datenbank ausgeliefert werden müssen.
Zudem soll es eine Versionierungsmöglichkeit geben, um nachvollziehen zu können, wann
und wie ein Produktdatensatz verändert oder gelöscht wurde und dies Rückgängig
gemacht werden kann.
Da die Produktdaten bei der antibodies-online GmbH aus heterogenen Quellen in verschiedenen Dateiformaten geliefert werden, die stellenweise inhaltliche Fehler aufweisen
und diese sich in einer Datei mit 10-Tausenden Datensätzen nicht finden lassen, ist es
kaum zu vermeiden, dass fehlerhafte Daten bereitgestellt werden. Das System muss eine
Möglichkeit bereit stellen, solche Fehler schnell zu finden und zu beheben.
Das System soll ebenfalls eine Möglichkeit für ein Monitoring bieten, mit dem die Qualität
der Daten geprüft werden kann. Die Regeln der Prüfung werden durch Mitarbeiter festgelegt und eingetragen.
Um Mitarbeitern, die nicht am Bearbeitungsprozess beteiligt sind, die Möglichkeit zu bieten, auf Produktdaten zuzugreifen, soll es eine Möglichkeit geben, das System zu replizieren.
1.4 Ziel der Arbeit
Ziel der Arbeit ist es zu evaluieren, ob eine dokumentenorientierte Datenbank die Möglichkeit bietet, den in der Motivation beschriebenen Anforderungen zu genügen. Zusätzlich
2
Siehe Kapitel Normalisierung
5
soll das System benannt werden, das im Fallbeispiel der antibodies-online GmbH das
Beste ist.
6
2. Einführung in Datenbanken
Um die Problemstellung der Arbeit und den Ist-Zustand der anitbodies-online GmbH besser zu verstehen, wird im Folgenden beschrieben, worum es sich bei einer Datenbank
handelt, sowie einige Datenbankmodelle mit ihren Eigenschaften vorgestellt.
2.1 Eigenschaften einer Datenbank
"Eine Datenbank ist eine strukturierte Sammlung von Daten"[KM01 ]. Diese Aussage hat
keinen Hohen Informationsgehalt, beschreibt jedoch hinreichend, um was es sich bei einer
Datenbank handelt. Zudem sagt sie explizit aus, was eine Datenbank nicht ist: Eine
unstrukturierte Datei oder Dateiensammlung. Theoretisch reicht also schon eine strukturierte Textdatei aus, um als Datenbank bezeichnet zu werden. In der Praxis ist dies nicht
der Fall, da es eine der grundlegenden Eigenschaften von Datenbanken ist, dass eine
Umstellung der Anwendung, die mit den Daten arbeitet, keine Änderungen an den Daten
nach sich ziehen soll. Auch der umgekehrte Fall, dass Programme die mit einer Datenbank arbeiten keiner oder nur minimaler Änderungen bedarf, falls sich die Daten ändern.
Bei einer Textdatei als Datengrundlage muss für jede Änderung in der Datei die Zugriffsmethode angepasst werden. Entsprechend widerspricht das dem genannten Grundgedanken.
Eine weitere Möglichkeit Informationen zu speichern bieten XML-Dateien. Hier ist in der
Regel keine Änderung der Zugriffsmethoden nötig, wenn sich der Datenbestand ändert.
Für größere Datenmengen ist das speichern in XML-Dateien jedoch unpraktisch, sodass
eine XML-Datei als Datengrundlage für ein Anwendungsprogramm vorrangig dort eingesetzt werden wo kleine Datenmengen gespeichert werden müssen, und kein komplexes
Datenbanksystem benötigt wird. Ein Anwendungsbeispiel sind hier Apps für Smartphones.
Programme und Anwendungen die mit größeren Datenmengen arbeiten setzen daher auf
SQL-Datenbanken und Datenbanksysteme . SQL steht für Structed Query Language und
ist eine simple Abfragesprache, mit der mit wenigen Befehlen Datensätze gelesen, bearbeitet und gelöscht werden können. Die Informationen können hierbei im DBMS in unterschiedlicher Form gespeichert werden. Baumstrukturen sind hierbei die gängigsten.
2.2 Datenbankmodelle in der Übersicht
Es gibt verschiedene Formen von Datenbanken. Relationale SQL-Datenbanken sind durch
vielfältige Anwendungsmöglichkeiten und einfache Bedienung am weitesten verbreitet.
7
Außerdem gibt es noch einige andere Datenbankformen, die auf spezielle Anforderungen
zugeschnitten sind und daher nur in ihren speziellen Gebieten eingesetzt werden. Zu diesen gehören unter Anderen hierarchische Datenbanken, objektorientierte Datenbanken
und Netzwerkdatenbanken, deren Funktion hier nur kurz erläutert werden.
2.2.1 Hierarchische Datenbanken
Das hierarchische Datenbankmodell ist eines der ältesten Datenbankmodelle. Es bildet die
Datensätze in einer Baumstruktur ab, sodass jeder Datensatz genau einen Vorgänger hat.
Der Nachteil dieser Struktur ist, dass eine Verknüpfung der Daten über mehrere Ebenen
hinweg oder mit anderen Bäumen nicht möglich ist. Das bekannteste hierarchisch organisierte Datenbanksystem ist IMS/DB von IBM.
2.2.2 Netzwerkdatenbanken
Das Netzwerkdatenbankmodell wurde von der selben Organisation wie die Programmiersprache COBOL entwickelt und ist entsprechend stark von ihr geprägt.
Im Modell selber, herrschen keine strengen Hierarchien, Datensätze können mehrere Vorgänger und Nachfolger haben. Es kann, anders als im hierarchischen Datenbankmodell
mehrere Wurzeln geben, dadurch gibt es meist mehrere Suchwege einen bestimmten
Datensatz zu finden.
Zusätzlich zu dieser verzweigten Datenstruktur sieht das Modell drei verschiedene Datenbanksprachen für die verschiedenen Aufgaben vor. Eine Schema Data Description Language, die die Form der Daten beschreibt, eine Subschema Data Description Language,
die Metainformationen über die Daten liefert, und eine Data Manipulation Language, die
das Lesen und Schreiben der Daten übernimmt.
Bekannte Netzwerkdatenbanksysteme sind UDS (Universal Databank System, Siemens)
und DMS(Database Management System, Sperry Univac).
Als aktuellen Nachfolger der Netzwerkdatenbank kann man die Graphdatenbanken 3
bezeichnen.
2.2.3 Objektorientierte Datenbanken
Wie der Name schon sagt, werden die Daten beim Objektorientierten Datenbanksystem in
Form von Objekten, wie sie aus Programmiersprachen wie Java bekannt sind, gespeichert. Nicht zu verwechseln mit serialisierten Objekten! Auch die Methoden des Objekts
3
Siehe Kapitel Graphdatenbanken
8
werden gespeichert. Der Vorteil dieses Modells ist, dass es keiner weiteren Datenbanksprache bedarf, sondern die Anwendung kann direkt mit der Datenbank kommunizieren.
2.2.4 Relationale Datenbanken
In relationalen Datenbanken stehen die Daten in einer Beziehung (Relation) zueinander.
Die Daten selber werden in Form von Tupel von Attributen nach einem festgelegten Schema gespeichert. Die Tupel der einzelnen Datensätze werden wie in Tabelle 1 zu sehen in
Tabellen zusammengefasst.
AutoNr
Hersteller
Modell
Farbe
1337
Ferrari
F-50
Rot
1337
Ferrari
F-50
Schwarz
4711
Mercedes
SLS
Schwarz
42
Ferrari
Enzo
Rot
Tabelle 1: Beispiel Attribute
Die Eigenschaften, die ein Objekt, hier im Beispiel das Auto, hat, sind durch das Relationsschema festgelegt. So auch die Relationen mehrerer Objekte untereinander. Dabei gibt es
mehrere Arten von Beziehungen, 1:n, 1:1 oder auch m:n.
Der Einfachheit halber wird davon ausgegangen, dass jedes Auto nur einen Besitzer hat,
ein Besitzer aber mehrere Autos besitzen kann. Dann sieht die Relation zwischen Auto
und Besitzer wie folgt aus:
Abbildung 1: Beispiel Relation
Man spricht dann bei Auto und Besitzer von Entitätentypen oder Entitäten.
Jedes Objekt im Relationsschema wird durch eine Reihe von Attributen eindeutig
bestimmt. Diese nennt man Primär- oder Schlüsselattribute.
Angesprochen werden relationale Datenbanken meist über eine SQL-Sprache, deren
Grundlage die Relationsalgebra bildet. Neben einfachen Abfragen einzelner Objekte oder
Werte, lassen sich auch Mengen von Objekten zu einer Menge zusammenfassen, Ergebnismengen Filtern oder Maxima und Minima bestimmen. Welche Funktionen zusätzlich
noch bereit gestellt werden hängt vom gewählten Datenbankmanagementsystem ab.
9
2.2.4.1 Das Konsistenzmodell ACID
Relationalen Datenbanken liegt das sogenannte ACID-Konsistenzmodell zugrunde. ACID
steht für Atomicity Consistency Isolation Durability. Das heißt eine Datenbanktransaktion
hat immer diese Eigenschaft. Jede Transaktion ist atomar, das heißt auch wenn eine
Transaktion aus mehreren Befehlen besteht, die nacheinander ausgeführt werden, gilt sie
erst dann als fertig, wenn alle Befehle fehlerfrei abgearbeitet sind. Kommt es während der
Befehlskette zu Fehlern, werden die Daten automatisch in den Zustand zurückversetzt,
der vor den ersten Befehl herrschte. Die Isolation bedeutet, jeder zu bearbeitende Datensatz wird während der Transaktion für andere Zugriffe gesperrt. Die Daten müssen Dauerhaft sein, es muss also gewährleistet sein, dass bei einem Programmabsturz während
einer Transaktion entweder der Ursprungszustand hergestellt wird oder die Transaktion
erneut komplett durchgeführt wird. Eine Änderung der Daten muss konsistent sein, man
kann also nicht zwischen den einzelnen Stadien der Transaktion hin und herwechseln.
2.2.5 Objektrelationale Datenbanken
Das objektrelationale Datenbankmodell versucht das relationale und das objektorientierte
Modell miteinander zu verbinden. Es erweitert das relationale Modell um die Möglichkeit
objektorientierte Methoden und Datentypen zu verwenden. Hierzu wird häufig über eine
bestehende relationale Datenbank eine objektorientierte Zugriffsschicht gesetzt, die es
dem Entwickler ermöglicht seine Daten als Objekte zu behandeln.
2.3 Normalisierung
Normalisierung beschreibt die Aufteilung einzelner Schemata (Tabellen) eines relationalen
Datenbankschemas in mehrere Schemata um Redundanz zu vermeiden. So wird vermieden, dass in einem Datenbestand, beispielsweise eine Adressänderung in einer Kundendatenbank, inkonsistente Daten entstehen wenn ein Datensatz geändert wird, der zweite
aber nicht, etwa wenn es die Tabellen Rechnungs- und Lieferadressen gibt.
Zudem wird bei großen Datenmengen Speicherplatz gespart, da eine Information wie Marke eines Autos nur einmal gespeichert werden muss und nicht für jedes Objekt.
Es gibt mehrere Grade der Normalisierung, die mit aufsteigender Zahl einen immer stärker
werdenden Redundanzschutz bieten.
Um einen kompletten Datensatz zu erhalten werden die Daten aus den einzelnen Tabellen
über einen Zusammenfassungsbefehl (Join), zu einem Objekt gebündelt.
10
2.3.1 Erste Normalform
In der ersten Normalform muss jedes Attribut das in der Relation vorkommt einen atomaren Wertebereich haben und die Relation muss frei von Wiederholungen sein.
In Tabelle 2 beinhaltet die Spalte Modell das Modell und den Hersteller und die Spalte Farbe enthält eine Menge von Farben.
AutoNr
Modell
Farbe
1337
Ferrari F-50
Rot, Schwarz
4711
Mercedes SLS
Schwarz
42
Ferrari Enzo
Rot
Tabelle 2: Negativbeispiel erste Normalform
Das Feld Modell wird, wie in Tabelle 3 zu sehen, in Hersteller und Modell aufgeteilt um die
Informationen zu separieren. Zusätzlich wird der Datensatz mit zwei Farben in zwei eigenständige Datensätze mit jeweils nur einer Farbe aufgeteilt.
AutoNr
Hersteller
Modell
Farbe
1337
Ferrari
F-50
Rot
1337
Ferrari
F-50
Schwarz
4711
Mercedes
SLS
Schwarz
42
Ferrari
Enzo
Rot
Tabelle 3: Positivbeispiel erste Normalform
2.3.2 Zweite Normalform
Eine zweite Normalform liegt dann vor, wenn die Daten in erster Normalform sind und
jedes nicht-Schlüsselattribut von allen Schlüsselattributen abhängig ist.
Der Primärschlüssel dieser Relation in Tabelle 4 setzt sich aus AutoNr und Farbe zusammen, da diese ein Auto im Beispiel eindeutig charakterisieren. Die Eigenschaften Hersteller und Modell sind jedoch nur von der AutoNr abhängig, nicht von der Farbe.
AutoNr
Hersteller
Modell
Farbe
1337
Ferrari
F-50
Rot
1337
Ferrari
F-50
Schwarz
4711
Mercedes
SLS
Schwarz
42
Ferrari
Enzo
Rot
Tabelle 4: Negativbeispiel zweite Normalform
11
In Tabelle 5 sieht man, dass das Attribut AutoNr nun ein Fremdschlüssel ist, der auf eine
weitere Tabelle verweist, die die Farbe enthält.
AutoNr
Hersteller
Modell
AutoNr
Farbe
1337
Ferrari
F-50
1337
Rot
4711
Mercedes
SLS
1337
Schwarz
42
Ferrari
Enzo
4177
Schwarz
42
Rot
Tabelle 5: Positivbeispiel zweite Normalform
2.3.3 Dritte Normalform
Eine dritte Normalform liegt dann vor, wenn die Daten in erster Normalform sind und es
kein nicht-Schlüsselattribut gibt, das von einem Schlüsselattribut transitiv abhängig ist.
Transitive Abhängigkeit bedeutet, dass es eine Unterabhängigkeit gibt, bei der durch einen
nicht-Schlüsselkandidaten eine Abhängigkeit entsteht, sodass der Schlüsselkandidat von
einem anderen Attribut abhängig wird.
Als Formel veranschaulicht, wird die Transitive Abhängigkeit wie folgt dargestellt:
( P 1 → A1)∧( A1 → A2 )⇒(P 1 → A2 )
Im Beispiel aus Tabelle 6 ergibt sich durch die Herstellerangabe eine transitive Abhängigkeit: Die Autonummer ist durch das Modell transitiv vom Hersteller abhängig.
AutoNr
Hersteller
Modell
1337
Ferrari
F-50
4711
Mercedes
SLS
42
Ferrari
Enzo
Tabelle 6: Negativbeispiel dritte Normalform
Diese Abhängigkeit lässt sich durch ein Aufteilen in einzelne Tabellen, wie in Tabelle 7 zu
sehen, wieder lösen.
AutoNr
HerstellerNr
Modell
HerstellerNr
HerstellerName
1337
31415
F-50
31415
Ferrari
4711
27182
SLS
27182
Mercedes
42
31415
Enzo
Tabelle 7: Positivbeispiel dritte Normalform
12
2.4 Folgen der Normalisierung für die antibodies-online GmbH
In den bisherigen Beispielen wurden die Tabellen immer in maximal 2 Tabellen aufgeteilt.
Durch die hohe Anzahl an Produktattributen gibt es in der Datenbank der antibodies-online
GmbH über 100 dieser Tabellen, die alle Informationen zu einem einzelnen Produkt enthalten können. Um alle Informationen für ein Produkt zu erhalten müssen über 100 Tabellen abgefragt und zusammengefasst werden.
Die Abfrage eines Attributes dauert ca. eine Millisekunde. Bei einem Produkt mit 100 Attributen dauert die Abfrage entsprechend ca. 100 Millisekunden. Für die Exporte müssen
mehrere tausend Produktdatensätze gelesen werden, sodass sich die Anzahl der Anfragen und somit auch die Lesedauer um diesen Faktor erhöht. Hinzu kommt noch die Dauer
die das System braucht um die CSV-Datei zu erstellen. Dies sorgt für Verzögerungen bei
der Bearbeitung von Produktdaten, da Mitarbeiter häufig warten müssen, bis alle Datensätze gelesen und in die benötigte Datei geschrieben wurden. Eine Denormalisierung der
Daten ist keine Lösung des Problems, da die Tabelle der verwendeten MySQL-Datenbank
die Dateigrößenrestriktion überschreiten würde.
Um diesem Problem zu entgehen wird eine andere Art von Datenbank benötigt.
13
3. Einführung in NoSQL
Der Begriff NoSQL tauchte erstmals Ende der 1990er Jahre auf[EFHBB11], der große
Schub kam aber erst Anfang der 2000er, mit dem Web 2.0 und dem Versuch große Datenmengen im hohen Gigabyte bzw. Terabyte Bereich zu verwalten[EFHBB11]. Erste Vorreiter
der aktuellen Systeme gab es bereits in den 80ern, jedoch mit wesentlich kleineren Datenmengen. Ein Beispiel aus dieser Zeit ist Lotus Notes. Ab 2006 entstanden dann die heutigen Systeme wie Couch DB, Voldemort, Hypertable, Cassandra, Redis usw. . NoSQL stellt
keine radikale Abwendung zu relationalen Systemen dar, sondern bedeutet Not only SQL.
Das Buch „NoSQL“ bietet folgende Definition für NoSQL, bei der sich die Autoren auch auf
andere Quellen beziehen: „Unter NoSQL wird eine neue Generation von Datenbanken
verstanden, die meistens einige der nachfolgenden Punkte berücksichtigen :“[EFHBB11]
1. Das Datenmodell ist nicht relational
2. Das System ist auf verteilte und horizontale Skalierbarkeit ausgelegt
3. Das System ist Open Source
4. Das System ist nur schwach Schemagebunden oder sogar Schemafrei
5. Das System unterstützt eine einfache Datenreplikation
6. Das System stellt eine einfache API zur Verfügung
7. Das System basiert auf einem andern Konsistenzmodell als ACID
Jeder dieser Punkte kann diskutiert werden, da NoSQL einen Denkansatz in Bezug auf
Datenbanken beschreibt und keine Formel ist.
Zum ersten Punkt lässt sich sagen, dass NoSQL das relationale System nicht als ungültig
oder schlecht beschreibt. Vielmehr ist NoSQL ein alternativer Denkansatz für bestimmte
Problemstellungen, sodass diese nicht umständlich in ein relationales System gebracht
werden müssen, wenn sie mit einem anderen Datenbankmodell einfacher in den Griff zu
bekommen sind.
Punkt zwei bezieht sich auf das Speichern und Verwalten extrem großer Datenmengen im
Tera- oder sogar Petabyte Bereich. Hier reicht normale Hardware nicht mehr aus und die
Daten müssen auf mehrere Systeme verteilt werden. Datenbanksysteme die sich nicht auf
solche Datenmengen spezialisieren können NoSQL Datenbanken sein, ohne sich auf
mehrere Systeme zu verteilen.
Selbst die Autoren sehen den dritten Punkt als umstritten an .Auch Amazon SimpleDB ist
14
ein NoSQL-System obwohl es nicht Open Source ist. Dieser Punkt beruht darauf, dass in
der Industrie oft viel Geld für Datenbanksysteme ausgegeben wird, die dennoch ein gegebenes Problem nicht ideal lösen.
Mit dem vierten Punkt greifen die Autoren eine feste Anforderung an Datenbanken des
Web 2.0 auf. Bei einer Schemaänderung muss nicht die komplette Datenbank an dieses
angepasst werden, sondern der alte Datenbestand kann im laufenden Betrieb in das neue
Format überführt werden.
Punkt fünf ergibt sich aus der Forderung nach horizontaler Skalierbarkeit, um beim Ausfall
eines Systems ein Backup zu haben. NoSQL Systeme die den zweiten Punkt nicht oder
nur teilweise erfüllen, erfüllen meistens auch den fünften nicht. Läuft die Datenbank nicht
auf einem verteilten System schließt dies eine Replikationsmöglichkeit jedoch nicht aus.
Die Forderung nach einer einfachen API aus Punkt 6, sagt nicht aus, dass SQL keine einfache, aber dennoch mächtige Abfragesprache ist. Vielmehr wir hier eine API gefordert,
die zum System passt, für Laien einfach zu bedienen ist, und auch nicht so mächtig sein
muss wie SQL. Je nach Anwendungsgebiet variiert die Komplexität und Mächtigkeit einer
NoSQL-API.
Die Eigenschaften des in Punkt sieben geforderten Konsistenzmodells und die damit verbundenen Folgen werden in den Folgenden Kapiteln näher beschrieben.
3.1 NoSQL Grundlagen
Um das System von NoSQL Datenbanken zu verstehen müssen zuerst einige Begriffe
definiert und erklärt werden. Einige davon gehören zum traditionellen Umgang mit Datenbanken, andere beziehen sich speziell auf nicht relationale Datenbanken.
3.2 Das CAP Theorem
Im Jahr 2000 Stellte Prof. Eric Brewer auf der PODC2000 sein CAP Theorem vor. CAP
steht für:
• Consistency: Die Daten einer Transaktion müssen nach der Durchführung genauso Konsistent sein wie davor. Entweder wird eine Transaktion komplett durchgeführt oder gar
nicht. Auch bei einer Datenbank die auf mehreren Systemen verteilt laufen, muss sichergestellt sein, dass eine Änderung der Daten auf allen Systemen gleichzeitig abläuft.
15
• Availability: Die Verfügbarkeit der Daten muss zu jeder Zeit gegeben sein. Im Bezug auf
eine Datenbank mit verteilten Systemen bedeutet dies, dass die übrigen Systeme weiterhin Daten liefern müsse, wenn eins ausfällt.
• Partition Tolerance: Bei verteilten Datenbanken kann es vorkommen, dass ein Datensatz
auf den Systemen in einem Inkonsistenten Zustand ist. Die kann zum Beispiel an einem
kaputten Datenkabel liegen. Das System muss gewährleisten dass bei einer Anfrage an
die Server beide Systeme den richtigen Datensatz zurückliefern.
Brewers Cap Theorem besagt, dass bei Skalierten Datenbanksystemen immer nur zwei
dieser drei Punkte gewährleistet werden können. 2002 wurde diese Theorie am MIT
bewiesen[OK12]. Es ergeben sich drei mögliche Verteilungen der Punkte:
• Availability und Consistency (AC): „Darunter fallen die meisten Relationalen Datenbanksysteme“[OK12]. Die Daten sind zu jeden Zeitpunkt Verfügbar und Konsistent.
• Availability und Partition Tolerance (AP): Die Daten sind zu jeden Zeitpunkt Verfügbar
und das System arbeitet auch, wenn der Kommunikationsweg zwischen einzelnen
Datenbanken des Systems nicht funktioniert.
• Consistency und Partition Tolerance (CP): Die Daten sind immer Konsistenz und das
System arbeitet auch, wenn der Kommunikationsweg zwischen einzelnen Datenbanken
des Systems nicht funktioniert, jedoch kann es dazu kommen, dass die Datenbank während einer Replikationsphase nicht verfügbar ist.
3.2.1 Konsistenzmodelle
Da zur Zeit der Entstehung relationaler Datenbanken Anwendungsgebiete wie beispielsweise Bank- und Kontodaten im Fokus lagen, hatte die Konsistenz der Daten oberste Priorität . Es kommt also nur eine Datenbank mit den CAP-Eigenschaften AC oder CP in Frage.
Mittlerweile gibt es Clustersysteme, bei denen eine Datenbank als Master fungiert und als
Backup mehrere Klone aufweist, um bei einem Systemausfall weiterhin Daten bereitstellen
zu können. Konsistenz der Daten würde hier heißen, dass zu jedem Zeitpunkt von allen
Systemen die gleichen Daten geliefert werden. Ändert sich also ein Datensatz auf dem
Mastersystem, kann dieser erst von den Klonen gelesen werden, nachdem diese repliziert
16
wurden. Bei Onlineshops reicht schon eine minimale Wartezeit im Bestellprozess aus, um
einen Kunden zu verärgern oder im schlimmsten Fall sogar den Bestellvorgang abbrechen
zu lassen und sich eine Alternative zu suchen. Es muss also Gewährleistet sein, dass die
Daten immer verfügbar sind.[WWW1] Es kommt also nur eine Datenbank mit den CAPEigenschaften AC oder AP in Frage.
Basierend auf den Erkenntnissen des CAP Theorems wird ein Konsistenzmodell entwickelt, dass den Gegensatz zum ACID System darstellt. Es nennt sich BASE (Basically
Available, Soft State, Eventually Consistent). Bei diesem System steht die Verfügbarkeit
der Daten im absoluten Fokus. Konsistenz spielt zwar eine wichtige, aber dennoch untergeordnete Rolle. Es wird davon ausgegangen, dass die Konsistenz durch Replikationszyklen erreicht wird, also nicht unmittelbar nach jeder Transaktion, aber nach einem gewissen Zeitfenster der Inkonsistenz. Die Dauer dieses Zeitfenster kann dabei je nach System,
Konfiguration und Anwendungsbereich variieren.
Dennoch sind nicht alle Datenbanksysteme entweder komplett ACID oder komplett BASE
gebunden, sondern es gibt einen fließenden Übergang zwischen diesen beiden Gegensätzen. Relationale Systeme liegen hierbei sehr nah an der ACID Variante, während die meisten NoSQL Systeme sich eher in Richtung BASE orientieren[EFHBB11].
3.2.2 Map/Reduce
Map/Reduce hat seine Ursprünge in Funktionale Programmiersprachen wie LISP 4 und
ML5, die speziell auf parallelisiertes arbeiten ausgelegt sind. Dadurch dass alle Datensätze
unabhängig von einander betrachtet werden können, ist eine Parallelisierung des Prozesses und somit eine Geschwindigkeitsoptimierung möglich.
Mit der map()-Funktion wird hier eine Funktion auf jedes Element der Liste angewandt und
die dadurch modifizierte Liste zurückgegeben. Das folgende Beispiel orientiert sich wieder
am Beispieldatensatz der Autos aus Kapitel 2. Es sollen alle Autos der Firma Mercedes
ausgegeben werden:
Function(doc){
if(doc.Marke == „Mercedes“){
emit(doc.Modell, doc.Farbe)
}
}
4
5
List Processing
Meta Language
17
Beim Aufruf der Funktion wird diese auf alle Dokumente angewandt. Es wird geprüft ob
das Dokument ein Attribut „Marke“ mit dem Wert „Mercedes“ besitzt. Wenn ja wir ein KeyValue-Objekt mit dem Key Modell und der Farbe als Value ausgegeben
Die Ausgabe sieht entsprechend wie folgt aus:
{SLS, Schwarz}
Die map() Funktion entspricht hier dem SELECT...FROM...WHERE Statement von SQL.
Die reduce()-Funktion filtert die Ausgabeliste und Reduziert somit die Ausgabe. Im folgenden Beispiel wird die Anzahl der Autos, die das Ergebnis der eben angewandte map()Funktion enthält, ausgegeben:
Function(keys, values){
return sum(values)
}
Die Ausgabe ist eine 1, da die Ergebnismenge nur ein Auto enthält. Wäre die map()-Funktion mit Ferrari gelaufen, wäre die Ausgabe eine 3. Die reduce()-Funktion entspricht hier
den Aggregat-Funktionen von SQL.
Durch die Parallelisierbarkeit der Funktionen ist es möglich Ergebnismengen schnell zu
Filtern und die Datenbank zu durchsuchen. Bei einem System, das mit einem Thread läuft,
wird bei einer Suche in 60.000 Datensätzen jeder Datensatz nacheinander geprüft. Ein
System, das für die gleiche Anfrage sechs Threads zur Verfügung hat, ist auch etwa sechs
mal schneller, da jeder Thread nur 10.000 Datensätze prüfen muss.
"Entwickelt wurde das Map/Reduce-Framework 2004 bei Google Inc."[EFHBB11], jedoch
sind mittlerweile eine Vielzahl weiterer Frameworks dieser Art entstanden.
3.2.3 Multiversion Concurrency Control
Die meisten SQL-Systeme verhindern, dass auf einen Datensatz zugegriffen wird, der
gerade Teil einer Transaktion ist, in dem eine Sperre auf den entsprechenden Datensatz
gelegt wird. Bei parallel arbeitenden Systemen kann es durch diese Sperre jedoch zu Verzögerungen kommen. Dadurch greifen einige NoSQL-Systeme auf MVCC (Multiversion
Concurrency Control) zurück. Das heißt Daten werden nicht gesperrt, sondern es wird bei
der Bearbeitung eine Versionierung erstellt, die Konflikte erkennt und im Konfliktfall die
einzelnen, parallel gelaufenen Transaktionen zurückgerollt und erneut gestartet werden
können.
18
3.2.4 REST
Representational State Transfer „gilt als die Basis für die Skalierbarkeit des World Wide
Web von einem einzelnen kleinen Server am CERN im Jahre 1990 zum weltumspannenden Netzdienst mit Milliarden von Nutzern heutzutage"[EFHBB11]. REST hat keine feste
Definition, sondern ist eher ein Entwurfsmuster für eine vertikale Skalierung von Datenverteilung, also der Verteilung auf viele Heterogene Systeme anstatt eines einzelnen überdimensionierten Systems.
Der REST-Ansatz im Bezug auf Datenbanken beschreibt also die Verteilung der Daten auf
verschiedene Server, die zu einem Cluster zusammengefasst werden. Erklärt wird dies im
folgenden am Beispiel von HTTP.
Die Bausteine des Konzeptes sind dabei Ressourcen, Operationen und Links.
Ressourcen sind in diesem Zusammenhang die Endpunkte, die das System adressiert.
Dies kann beispielsweise ein HTML-Dokument sein. Ressourcen werden über einen Uniform Resource Identifier eindeutig adressiert.
Operationen werden immer auf einer Resource ausgeführt. Am Beispiel HTTP wären unter
anderem GET, PUT, POST oder DELETE Operationen die zum Beispiel auf einem HTMLDokument angewendet werden können.
Die letzte Komponente im REST/HTTP-System sind die Links. Erst mit ihnen wird aus
einer Ansammlung von Ressourcen ein Netz. Sie verbinden die einzelnen Ressourcen miteinander und können Operationen enthalten.
3.3 NoSQL Systeme
Es gibt mehrere Kategorien von NoSQL Systemen. Jede Kategorie hat Eigenschaften die
sie von anderen unterscheidet, oft gibt es auch Systeme die Eigenschaften aus mehr als
einer dieser Kategorien aufweisen. Die Kategorien werden hier nur kurz beschrieben. Im
folgenden Kapitel wird gesondert auf dokumentenorientierte Datenbanksysteme eingegangen.
3.3.1 Wide Column Stores
Die Wide Column Systeme erinnern an Exel-Tabellen, haben aber den großen Unterschied, dass beliebig viele Schlüssel auf beliebig viele Key/Value-Paare angewendet werden können. Spalten können mit beliebigen Key/Value-Paaren erweitert werden. Es entsteht also eine Tabelle deren Felder aus verschachtelten Arrays besteht, die selber noch-
19
mal Tabellen dieser Form enthalten können. Die einzelnen Key/Value-Listen können dann
selber nochmal in Clustersysteme unterteilt sein.
3.3.2 Key/Value-Systeme
In Key/Value Systemen oder Key/Value Stores werden die Daten meist durch ein leichtes
Schema aus Schlüsseln und werten definiert. „Ein Wert ist immer einem bestimmten
Schlüssel zugeordnet, der aus einer strukturierten oder willkürlichen Zeichenkette bestehen kann. Diese Schlüssel können in Namensräume sowie in Datenbanken aufgeteilt werden. Die Werte (auch Values genannt) des Systems können neben Strings auch Listen,
Sets oder Hashes enthalten“[WWW2].
3.3.3 Graphdatenbanken
Graphdatenbanken bestehen aus einem Graphen der die Struktur der Daten beschreibt.
Sie sind der moderne Nachfolger der Netzwerkdatenbanken. Einsatz finden sie häufig
dort, wo Informationen unterschiedlichster Art miteinander verknüpft werden müssen: Etwa
im Smartphonebereich bei dem Geodaten via Social Networks an Freunde geknüpft werden[EFHBB11]. Graphdatenbanken implementieren einige Algorithmen, die zur effizienten
Suche von Informationen oder deren Verknüpfung eingesetzt werden können. Bekannte
Pfadsuchalgorithmen wie Dijksta gehören genauso dazu wie Map/Reduce-Algorithmen um
nur bestimmte Teile des Graphen zu betrachteten. In der Regel repräsentieren die Knoten
des Graphen ein Objekt und die Kanten die diese Verbinden verschiedene Arten von Relationen. So lässt sich eine Graphdatenbank mit einem Aufwand, der mit der Anzahl der
Kanten pro Knoten wächst, in ein relationales System überführen.
20
4. Dokumentenorientierte Datenbanken
Dokumentenorientierte Datenbanken speichern Daten nicht in Tabellen, sondern in Dokumenten. Die Dokumente enthalten eine Ansammlung von Schlüsseln mit dazugehörigen
Werten. Das Schema der Daten wird nicht definiert. Es werden in der Regel keine echten
Anwenderdokumente gespeichert. Die Datenbank legt die Dokumente zusammen mit der
zugehörigen ID ab. So können Dokumente durch ändern der Werte oder hinzufügen von
Feldern bearbeitet werden. „Typische Dokumentenstrukturen sind JSON oder
XML“[OK12].
4.1 CouchDB
CouchDB steht für „Cluster of unreliable commodity hardware Data Base“ und wird seit
2005 von Damien Katz entwickelt. Katz war Senior-Entwickler von Lotus Notes (heute IBM
Notes)[WWW3], einem dokumentenorientierten Datenbanksystem mit starker E-MailAnbindung. Von 2008 bis 2009 setzte er seine vorher privat geführte Arbeit, bei IBM fort,
bis er mit einigen anderen Entwicklern das Unternehmen Relaxed Inc. gründete, welches
sich mittlerweile „CouchOne“ nennt. CouchDB ist seit November 2008 offizielles Apache-Projekt.
"CouchDB orientieren sich an Googles BigTable und damit auch an der Zugriffsmöglichkeit
auf Daten mittels Map/Reduce sowie am Dokumentenmanagement-Framework Lotus
Notes."[EFHBB11].
CouchDB bietet zur Konfiguration das Web-Interface Futon. Hiermit lassen sich Berechtigungen verteilen, Dokumente erstellen, oder Abfragen ausführen. CouchDB vefügt über
eine RESTful HTTP API sowie eine Plugin-Architektur für viele Programmiersprachen.
CouchDB ist für viele Plattformen verfügbar. Sowohl Windows Plattformen, als auch Linux
Distributionen und Mac OS werden unterstützt. Zusätzlich werden Systeme für mobile
Geräte entwickelt.
4.1.1 Datenmodell
CouchDB ist eine schemafreie, dokumentenorientierte Datenbank, bei der die Daten in
JSON-Strukturen abgelegt werden. Die Dokumente werden in Form von B-Bäumen abgelegt und über Dokumenten-IDs adressiert. Zudem werden sie mit einer Revisions-ID
gespeichert, die sich bei jeder Änderung des Dokuments erhöht. Dies ermöglicht Konflikterkennung durch MVCC.
21
Gespeichert werden die Daten im JSON-Format. JSON besteht aus einer Liste von kommaseparierten Key/Value Paaren, wobei der Wert wieder auf eine andere Eigenschaft verweisen kann. Mit den JSON-Dokumenten lassen sich durch Verschachtelungen von
Key/Value-Paaren beliebig komplexe Strukturen und Abhängigkeiten erreichen, ohne vorher aufwendig ein Schema definieren zu müssen.
Die Dokumente bilden das Äquivalent zu den Tupeln in relationalen Datenbanken.
[EFHBB11]. JSON besitzt folgende Basistypen: Objekt, Array, Zeichenkette, Zahlen, Boolsche Werte und NULL.
4.1.2 Map/Reduce und Views
Views sind Abbildungen von Daten die ein vom Anwender definiertes Kriterium erfüllen.
Die Daten werden gelesen und gefiltert, sodass nur die Daten angezeigt werden die das
definierte Kriterium erfüllen. Bei CouchDB werden Views dynamisch zur Laufzeit erzeugt.
Views werden in speziellen design documents definiert und können über Datenbankinstanzen wie normale Dokumente repliziert werden. Views werden in den design documents
per JavaSkript-Funktionen und mittels Map/Reduce-Algorithmen erstellt.
4.1.3 Replikation
CouchDB unterstützt das Replizieren auf mehrere Systeme, mit dem Bidirektionalem Konfliktmanagement. CouchDB ist mit dem Gedanken entwickelt worden, dass nicht immer
alle Systeme erreichbar sind. Sollte ein Gerät bei der Replikation nicht erreichbar sein, so
wird die Synchronisation erfolgen, sobald das System wieder erreichbar ist. Hierbei werden auftretende Konflikte vom Konfliktmanagement erkannt und die aktuellere Datenversion ausgewählt. Diese kann durch Anwendung einer gewünschten Revision überschrieben
werden. Zudem bietet CouchDB die Möglichkeit über Filter nur partielle Replikationen vorzunehmen.
4.1.4 Skalierbarkeit
CouchDB bietet keine Möglichkeit zur Skalierung der Daten, jedoch gibt es Open Source
Frameworks mit denen eine Möglichkeit zur Skalierung geschaffen werden kann.
4.1.5 Zugriffskontrolle
CouchDB bietet drei Rechteverteilungen an. Eine für Administratoren, eine lesende, und
eine schreibende. Administratoren können Accounts anlegen und Rechte vergeben.
22
4.2 MongoDB
"MongoDB ist ein Open Source-Project, hinter dem das Unternehmen 10gen Aus New
York steht."[EFHBB11]. Abgeleitet ist der Name vom englischen Wort humongous, dass
übersetzt riesig bedeutet.
Dieser Name ist eine Anspielung auf die großen Datenmengen die mit MongoDB gespeichert und verwaltet werden können. Hauptziel von MongoDB ist der Datendurchsatz, also
möglichst große Datenmengen in möglichst kurzer Zeit. Dabei hilft auch, dass MongoDB in
C++ geschrieben wurde. Eine Stärke von MongoDB ist das Journaling, eine von relationalen Datenbanken entliehene Eigenschaft, die bei einem Absturz des Systems alle nicht
beendeten Transaktionen erneut ausführt. Transaktionen in MongoDB sind immer Atomar.
MongoDB bietet eine API für die meisten Programmiersprachen wie C++, C#, Java, PHP,
Ruby, Perl und weitere Sprachen, sowie eine RESTful HTTP API.
MongoDB ist für alle gängigen Betriebssysteme sowohl in einer 32-Bit- als auch einer 64Bit-Version verfügbar.
4.2.1 Datenmodell
Unter MongoDB werden die Dokumente im BSON Format gespeichert, einen binären
JSON Format, "das um einige Datentypen erweitert wurde"[EFHBB11].
MongoDB ist eine schemafreie Datenbank. Das Schema eines Dokuments wird beim Einfügen zur Laufzeit erzeugt. Die Datenbank unterteilt sich in sogenannte Collections, die mit
den Tabellen in relationalen Datenbanken verglichen werden können. Der Vorteil hierbei
ist, dass nicht alle Dokumente in der Collection das selbe Schema aufweisen müssen.
MongoDB bietet die Möglichkeit, die Größe dieser Collections zu beschränken.
Jedoch weisen diese Capped-Collections genannten Collections zwei wesentliche
Beschränkungen auf: Dokumente in dieser Collection können nicht gelöscht werden und
nur dann verändert werden, wenn sich die Größe des Dokuments nicht ändert. Ist die festgelegte maximale Größe überschritten, werden Dokumente nachdem first-in-first-out Prinzip dem Alter nach entfernt, also das älteste Dokument immer zuerst.
Die Dokumente sind das Äquivalent zu den Tupeln relationaler Datenbank. Sie verhalten
sich wie assoziative Arrays, die beispielsweise aus Skript sprachen wie PHP bekannt sind.
Somit ist es möglich, auf einfache Weise Dokumente ineinander zu verschachteln.
Eine weitere Beschränkung von MongoDB, ist die Begrenzung der Größe eines Doku23
ments im BSON Format auf maximal vier MB. Größere Dateien werden mit dem sogenannten GridFS Algorithmus in mehrere kleinere Dateien aufgeteilt.
4.2.2 Map/Reduce
Da MongoDB über eine sehr mächtige Abfragesyntax verfügt, kann größtenteils auf den
Einsatz von Map/Reduce verzichtet werden, da API bereits mit SQL vergleichbare Befehle
liefert. Auch für dynamische abfragen bietet MongoDB einen vergleichbaren Funktionsumfang im Bereich der Filterung und Selektion wie SQL. Zusätzlich bietet MongoDB eine
eigene Implementierung des Map/Reduce-Algorithmus an. Dies ermöglicht mit MongoDB
abfragen durchzuführen, die in SQL mit einem GROUP BY gelöst würden.[EFHBB11] Die
mit Map/Reduce Aufträge werden mit JavaSkript formuliert.
4.2.3 Replikation
In Sachen Replikationen bietet MongoDB ebenfalls mehrere Lösungen an. Im Allgemeinen
kann von einem Master aus auf beliebig viele Slaves reproduziert werden. Client-Anfragen
werden hierbei grundsätzlich nur an den Master gestellt. Nun bietet MongoDB die Möglichkeit den Master manuell oder automatisch zu bestimmen. Im manuellen Modus muss
jedoch ein Administrator im Falle eines Ausfalls des Masters einen neuen bestimmen.
4.2.4 Skalierbarkeit
Da MongoDB die horizontale Skalierbarkeit nativ unterstützt, ist es "möglich, mit einem
einzelnen Server zu beginnen und diesen später zu einem Cluster auszubauen"
[EFHBB11]. Die Verteilung der Daten erfolgt auf Ebene der Collections, bei dem durch
geeignete Wahl der Schlüssel dafür gesorgt wird, dass alle Dokumente aus einer Collection auch auf dem gleichen Server gespeichert werden. Die aufgeteilten Pakete, deren
maximale Größe konfigurierbar ist, werden als Chunks bezeichnet. Die einzelnen Server
nennt man Shards. Die Verwaltung der einzelnen Server übernehmen ein oder mehrere
Config-Server. Zudem gibt es noch einen Routingserver, der alle Client-Anfragen entgegennimmt und die geforderten Datensätze von den einzelnen Shards holt und diese dann
ausliefert. Natürlich kann ein MongoDB Server auch nur aus einem Rechner bestehen.
Hier werden die Aufgaben der verschiedenen Server von einzelnen Prozessen übernommen.
24
4.2.5 Zugriffskontrolle
MongoDB bietet zwei Rollenmodelle: Vollzugriff und lesenden Zugriff.
4.3 Multimodell-Datenbanken
Multimodelldatenbanken sind Datenbanken die Konzepte mehrerer NoSQL-Systeme in
sich vereinen. Da im Zuge dieser Arbeit mehrere dokumentenorientierte Systeme miteinander verglichen werden sollen, und Multimodel-Datenbanken auch Aspekte der dokumentenorientierten Datenbank Systeme beinhalten, sollten diese nicht vernachlässigt werden. Als Vertreter der Multimodel-Datenbanken wird OrientDB gewählt.
4.3.1 OrientDB
OrientDB ist eine Multimodelldatenbank die sowohl Eigenschaften von Graphdatenbanken, Key/Value Stores, objektorientierten und dokumentenorientierten Datenbanken aufweist. Ursprünglich wurde OrientDB 1999, bzw. sein erster Vorläufer von Luca Garulli in
C++ geschrieben, später jedoch komplett in Java übersetzt. Sie findet sich unter der
OpenSource-Liznez Apache 2.0. OrientDB besitzt mehrere APIs, unter anderem Java und
JavaScript sowie eine http basierte RESTful API. Auf der eigenen Homepage, wird OrientDB als Document-Graph DBMS vorgestellt, ein Hybridsystem aus dokumentenorientierter Datenbank und Graphdatenbank. Haupteinsatzgebiet, sind stark vernetzte Daten,
deren Struktur und Daten häufig und schnell geändert werden müssen.[EFHBB11]
4.3.1.1 Datenmodell
Generell liefert OrientDB seine Anfragen im JSON-Format zurück. Durch die flexible und
vielseitige API lässt sich auf die verschiedenen Datenmodelle zugreifen, bei denen das
dokumentenorientierte Modell die Basis bildet. Das Graphenmodell nutzt einen Objectwrapper um die Daten aus den Dokumenten zu lesen und in diese zu schreiben. Intern
realisiert OrientDB die Verteilung der Dokumente über eine eigene URL-Syntax.
Mit OrientDB ist es möglich ein Schema für die Daten zu definieren, oder Dokumente
schemafrei zu erstellen. Sogar ein Mix aus schemafreien und schemagebundenen Dokuementen ist möglich.
4.3.1.2 Map/Reduce
OrientDB bietet keine Möglichkeit Map/Reduce Algorithmen zu implementieren.
25
4.3.1.3 Replikation
OrientDB bietet eine simple Möglichkeit zur Replikation, die vollständig automatisch
abläuft. Einmal eingerichtet, wird ein Master-Server automatisch replizieren, sobald er ein
Signal von einem Slave erhält. Wird der Slave vom Netz getrennt, wird dieser nach Neustart auf Konsistenz geprüft und erneut synchronisiert. Konflikte werden hierbei durch Versions-IDs erkannt.
4.3.1.4 Zugriffskontrolle
OrientDB bietet ein aus SQL-Datenbanken bekanntes Rollensystem zur Vergabe von
Rechten an. Primär gibt es den root-User, der anfangs als Administrator eingestellt ist.
Durch ihn können neue Nutzer angelegt werden und deren Rechte nach zwei Prinzipien
vergeben werden. Zum einen gibt es die Allow-all-but Methode, bei der Einschränkungen
gemacht werden, was der Nutzer nicht sehen, bzw. tun darf. Und dann das Gegenteil, eine
Deny-all-but, bei der ausgewählt werden muss, welche Rechte der Nutzer besitzt.
26
5. Fazit
Eine native Versionierung der Daten bietet keins der Systeme. Mit den Collections von
MongoDB lässt sich aber einfach eine Versionierung implementieren. Dazu muss für jedes
Dokument eine Collection erstellt werden und bei einer Änderung des Dokuments eine
neue Version mit einer Revisionsnummer angelegt werden. Die anderen Systeme bieten
eine solche Möglichkeit nicht.
Ein Monitoring der Daten lässt sich über die Map/Reduce Funktionen von MongoDB und
CouchDB realisieren. Mit diesem können Fehler gefunden werden, und einem Bearbeiter
direkt die entsprechenden Datensätze geliefert werden. Da OrientDB kein Map/Reduce
Funktionen unterstützt ist die Möglichkeit eines Monitorings nicht gegeben.
Eine Möglichkeit zur Replikation der Daten wird von allen Systemen geboten.
Eine horizontale Skalierung unterstützen alle Systeme, mit der Einschränkung, dass bei
CouchDB auf externe Software zurückgegriffen werden muss. Dadurch können beispielsweise Konsistenzchecks der Daten auf verteilten Systemen laufen.
Alle Systeme bieten eine Möglichkeit Dokumente schemalos zu erstellen. Dadurch ist es
möglich Informationen zu einem Datensatz zu speichern, die nicht an die Shopdatenbank
übertragen werden. Die freie Wahl der Felder biete die Möglichkeit einen festen Attributsatz im Anwendungsprogramm zu definieren, das mit dem Schema der MySQL-Datenbank übereinstimmt. Zusätzlich können weitere Felder für beliebige Metainformationen
angelegt werden.
Bei der Wahl des Systems spielen noch andere Faktoren als die aus der Motivation eine
Rolle. Beispielsweise ob es einen Kommerziellen Support für das System gibt, falls es zu
Problemen kommt. OrientDB bietet momentan noch eine sehr geringe Nutzerbasis, sowie
ein recht kleines Entwicklerteam. Außerdem ist die Dokumentation nicht immer aktuell.
[EFHBB11] Dennoch wird ein kommerzieller Support beim Kauf einer Enterprise Version
des Datenbanksystems angeboten. Für MongoDB wird ebenfalls ein kommerzieller Support beim Kauf einer Enterprise Version angeboten. Für CouchDB gibt es keinen kommerziellen Support.
Auch die Geschwindigkeit ist ein wichtiger Faktor, da Wartezeiten minimiert werden sollen.
Benchmarks zeigen, dass MongoDB große Datenmengen schneller verarbeiten kann als
CouchDB[WWW4]. Zudem wird CouchDB mit zunehmender Datenmenge langsamer[WWW5].
Somit ist für das Fallbeispiel der antibodies-online GmbH eine dokumentenorientierte
27
Datenbank eine Möglichkeit alle in der Motivation beschriebenen Anforderungen zu erfüllen. MongoDB ist das geeignetste System.
28
Literaturverzeichnis
KM01 : Gregor Kuhlmann, Friedrich Müllmerstadt, SQL Der Schlüssel zu Relationalen
Datenbanken, 2001ISBN: 3499600633
EFHBB11: Stefan Edlich, Achim Friedland, Jens Hampe, Benjamin Brauer, Markus
Brückner, NoSQL, 2011ISBN: 9783446427532
OK12: Oliver Kurowski, NoSQL Einführung, ISBN: 978-3-86802-410-4
WWW1: http://econsultancy.com/de/blog/10936-site-speed-case-studies-tips-and-tools-forimproving-your-conversion-rate (aufgerufen am: 13. Dezember 2013)
WWW2: http://wikis.gm.fh-koeln.de/wiki_db/Datenbanken/KeyValueSysteme (aufgerufen
am: 13. Dezember 2013)
WWW3: http://www-03.ibm.com/software/products/en/ibmnotes/ (aufgerufen am: 13.
Dezember 2013)
WWW4: https://gist.github.com/ihower/268512 (aufgerufen am: 13. Dezember 2013)
WWW5: http://debuggable.com/posts/couchdb-insert-benchmarks:4a4365e2-9d04-41709f88-2de34834cda3 (aufgerufen am: 13. Dezember 2013)
Abbildungsverzeichnis
Abbildung 1: Beispiel Relation...............................................................................................9
Tabellenverzeichnis
Tabelle 1: Beispiel Attribute....................................................................................................9
Tabelle 2: Negativbeispiel erste Normalform.......................................................................11
Tabelle 3: Positivbeispiel erste Normalform.........................................................................11
Tabelle 4: Negativbeispiel zweite Normalform.....................................................................11
Tabelle 5: Positivbeispiel zweite Normalform.......................................................................12
Tabelle 6: Negativbeispiel dritte Normalform.......................................................................12
Tabelle 7: Positivbeispiel dritte Normalform.........................................................................12
Eidesstattliche Erklärung
Hiermit versichere ich, dass ich die Seminararbeit mit dem Thema Anwendungsorientierte
Evaluation dokumentenorientierter Datenbanksysteme selbstständig verfasst und keine
anderen als die angegebenen Quellen und Hilfsmittel benutzt habe, alle Ausführungen, die
anderen Schriften wörtlich oder sinngemäß entnommen wurden, kenntlich gemacht sind
und die Arbeit in gleicher oder ähnlicher Fassung noch nicht Bestandteil einer Studienoder Prüfungsleistung war.
Name: Robin Landsmann
Aachen, den 15. Dezember
Unterschrift der Studentin / des Studenten
Herunterladen