Migration_von_einem_relationalen_Datenbankmodell_zu_NoSQL Hochschule: Standort: Studiengang: Veranstaltung: Betreuer: Typ: Themengebiet: Autor(en): Studienzeitmodell: Semesterbezeichnung: Studiensemester: Bearbeitungsstatus: Prüfungstermin: Abgabetermin: Fallstudienarbeit Hochschule für Oekonomie & Management Berlin Bachelor Wirtschaftsinformatik Fallstudie / Wissenschaftliches Arbeiten Prof._Dr._Ralf Hötling Fallstudienarbeit Eine NoSQL-Evaluierung als flexiblere Alternative zu einem RDBMS. Boddin, D.; Franke, P.; Beckers, J.; Wiatr, S. Abendstudium SS12 2 Bearbeitung abgeschlossen 30.08.2012 Inhaltsverzeichnis • 1 Abkürzungsverzeichnis • 2 Abbildungsverzeichnis • 3 Tabellenverzeichnis • 4 Einleitung ♦ 4.1 Inhaltliche Einführung ♦ 4.2 Motivation ♦ 4.3 Fragestellung ♦ 4.4 Abgrenzung ♦ 4.5 Zur Methode ♦ 4.6 Nicht behandelte angrenzende Probleme ♦ 4.7 Zielstellung • 5 Grundlagen ♦ 5.1 Skalierung ◊ 5.1.1 Vertikale Skalierung ⋅ 5.1.1.1 Vorteile ⋅ 5.1.1.2 Nachteile ◊ 5.1.2 Horizontale Skalierung ⋅ 5.1.2.1 Vorteile ⋅ 5.1.2.2 Nachteile ⋅ 5.1.2.3 Fehlannahmen bei der Skalierung ♦ 5.2 Datenbanken ♦ 5.3 ACID ◊ 5.3.1 Einsatzgebiete ♦ 5.4 CAP Theorem ◊ 5.4.1 Consistency Inhaltsverzeichnis 1 Migration_von_einem_relationalen_Datenbankmodell_zu_NoSQL ◊ 5.4.2 Availability ◊ 5.4.3 Partition tolerance ⋅ 5.4.3.1 Beispiele • 5.4.3.1.1 CA ? Consistency & Availability • 5.4.3.1.2 CP ? Consistency & Partition tolerance • 5.4.3.1.3 AP ? Availability & Partitiontolerance ♦ 5.5 BASE ◊ 5.5.1 Fazit ♦ 5.6 Multiversion Concurrency Control (MVCC) ♦ 5.7 Vector Clocks • 6 Problemstellung ♦ 6.1 Ist Zustand ◊ 6.1.1 Datenstrukturen ◊ 6.1.2 Datennavigation ◊ 6.1.3 CAP-Abwägung ◊ 6.1.4 Relationales Datenbankmodell ♦ 6.2 Anforderungen an das DBMS • 7 Architekturen ♦ 7.1 Dokumentenorientierte Datenbanken ◊ 7.1.1 Allgemeiner Verwendungszweck ◊ 7.1.2 Datenmodell ◊ 7.1.3 Vergleich zu RDBMS ◊ 7.1.4 Vor-/Nachteile ◊ 7.1.5 API ◊ 7.1.6 Produkte ♦ 7.2 Wide Column Store ◊ 7.2.1 Allgemeiner Verwendungszweck ◊ 7.2.2 Datenmodell ◊ 7.2.3 Vergleich zu RDBMS ◊ 7.2.4 Vor-/Nachteile Inhaltsverzeichnis 2 Migration_von_einem_relationalen_Datenbankmodell_zu_NoSQL ◊ 7.2.5 API ◊ 7.2.6 Produkte ♦ 7.3 Objektorientierte Datenbanken ◊ 7.3.1 Allgemeiner Verwendungszweck ◊ 7.3.2 Datenmodell ◊ 7.3.3 Vergleich zu RDBMS ◊ 7.3.4 Vor-/Nachteile ◊ 7.3.5 API ◊ 7.3.6 Produkte ♦ 7.4 Architektur-/Datenbankevaluierung • 8 Auswertung ♦ 8.1 Die Featurematrix ♦ 8.2 Lizenzmodell ♦ 8.3 ACID/BASE ? Spektrum ♦ 8.4 Datentypen ♦ 8.5 Support ♦ 8.6 Dokumentation ♦ 8.7 API ♦ 8.8 Skalierbarkeit ♦ 8.9 Umgebung ♦ 8.10 Administration ♦ 8.11 Erweiterbarkeit ♦ 8.12 Abfragemöglichkeiten ♦ 8.13 Auswertung • 9 Fazit ♦ 9.1 Evaluierungsphase ♦ 9.2 Wirtschaftlichkeit ♦ 9.3 Ausblick • 10 Fußnoten • 11 Literatur- und Quellenverzeichnis 1 Abkürzungsverzeichnis Abkürzung ACID API BASE BSON CAD CAP CMS DBMS EDV Bedeutung Atomicity, Consistency, Isolation, Durability application programming interface Basically Available, Soft state, Eventual consistency Binary JavaScript Object Notation computer-aided design Consistency, Availability, Partition tolerance Content Management System Datenbankmanagementsystem Elektronische Datenverarbeitung 1 Abkürzungsverzeichnis 3 Migration_von_einem_relationalen_Datenbankmodell_zu_NoSQL ER ERP ID IT JSON MVCC NoSQL OLAP OODB OOP RDBMS SQL WCS Entity Relationship Diagramm Enterprise Resource Planning Identifier information technology - Informationstechnologie JavaScript Object Notation Multiversion concurrency control Not only SQL Online Analytical Processing Objekt orientierte Datenbank Objekt orientierte Programmierung Relationales Datenbankmanagementsystem Structured Query Language wide column store 2 Abbildungsverzeichnis Abb.-Nr. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 Abbildung steigende Datenanforderungen Datensatz mit vier Versionen Speichervorgang im MVCC Verfahren Konflikterkennung mittels Vector Clocks ER: Verbindungstabelle ER: Untertabelle Beispiel ER Diagramm Abbildung der Dokumente (JSON-Format) Blogeintrag - RDBMS vs. dokumentenorientierte Datenbank WideColumnStore Column Family Umsetzung eines ER in Wide Column Store Ein Objekt Auto in Assoziation mit einem weiteren Objekt Rad, http://www.matthiasmaas.de/info_klasse10_oom.gif,23.05.2012 Der Impedance Missmatch links und rechts die barrierefreie Importierung eines Objektes in eine objektorientierte Datenbank http://www.db4o.com/s/csharpdb.aspx, 26.07.2012 Balkendiagramm für die Auswertung der Featurematrix 3 Tabellenverzeichnis Tabelle Nr. 1 2 3 4 5 Quelle WideColumnStore - Relationale DBMS Anordnung von Daten WideColumnStore - Anordnung von Daten Featurematrix Auswertung der Lizenzmodelle Auswertung des ACID/BASE-Spektrums 2 Abbildungsverzeichnis 4 Migration_von_einem_relationalen_Datenbankmodell_zu_NoSQL 6 7 8 9 10 11 12 13 14 Auswertung der Datentypen Auswertung des Supports Auswertung der Dokumentationen Auswertung der API Auswertung der Skalierbarkeit Auswertung der Umgebung Auswertung der Administrationskomponenten Auswertung der Erweiterbarkeit Auswertung der Abfragemöglichkeiten 4 Einleitung 4.1 Inhaltliche Einführung Im Rahmen einer Fallstudie für die FOM-Berlin wird untersucht, ob es eine Alternative zur relationalen Datenspeicherung der Firma Synectic gibt. Gleichzeitig soll damit ein Leitfaden für diesen Evaluierungsprozess entstehen, welchen man durch austauschen gewisser Parameter für ähnliche Fälle verwenden kann. 4.2 Motivation Abbildung 1: steigende Datenanforderungen Mittlerweile finden digitale Daten in immer mehr Lebensbereichen Anwendung und den größten Bereich bildet das World Wide Web. Seit dem Start von ?Web 2.0? und den damit entstandenen Möglichkeiten im World Wide Web wird der Inhalt nicht mehr nur primär durch die jeweiligen Website-Betreiber bzw. Unternehmen geliefert, sondern jeder hat die Möglichkeit, Inhalte in Form von Blogs, Wikis, Communitys, Micro-Blogs, Foren, Portalen oder Social-Media-Netzwerken aktiv bereitzustellen. Mit derzeit 955 Millionen aktiven Benutzern im Monat[1] und Tendenz steigend verdeutlicht Facebook sehr gut, dass die mit Web 2.0 gestartete ?Mitmach-Gesellschaft? immer weiter zunimmt und permanent neue Daten bereitstellt. Basierend auf der Digital Universe Studie von 2011, welche vom Marktforschungsunternehmen International Data Corporation durchgeführt wurde, existiert ? Stand Juli 2011 ? ein weltweit digitales Datenvolumen von 1,8 Zettabyte (1021 Byte)[2]. Dieser Wert, im Verhältnis zur aktuellen Weltbevölkerung von 6,987 Milliarden[3] Menschen, entspricht 283 Gigabyte an Daten pro Mensch. Neben dem permanent wachsenden Datenvolumen steigen auch die Anforderungen im Hinblick auf die Verfügbarkeit der digitalen Daten. Im Laufe der nächsten zehn Jahre, bis 2020, wird sich die Zahl der Server verzehnfachen und das Datenvolumen, welches sich voraussichtlich um das 50-fache erhöhen wird, muss effizient gespeichert und verwaltet werden[4]. Daher müssen Mittel und Wege für das Speicher- und Informationsmanagement gefunden werden, um mit den steigenden Anforderungen Schritt halten zu können. 4 Einleitung 5 Migration_von_einem_relationalen_Datenbankmodell_zu_NoSQL 4.3 Fragestellung IT-Unternehmen werden sich zunehmend mit der Beantwortung den folgenden Fragen beschäftigen müssen: • Wie kann das immer größer werdende Datenvolumen gemeistert werden? • Wie wird ein hoher Grad an Verfügbarkeit erreicht? • Wie lassen sich Daten bestmöglich partitionieren? • Wie lassen sich die gegebenen Probleme bestmöglich lösen? 4.4 Abgrenzung NoSQL ist kein moderner Begriff, doch im Zuge des Datenwachstums und der daraus resultierenden Probleme gerät der Begriff oder sogar das Denken mehr und mehr in den Fokus der IT-Branche. Somit zielt dieser hier dargestellte Evaluierungsprozess auf die Ermittlung eines geeigneten NoSQL-Produktes, auf Grundlage einer konkreten Problemstellung, ab. 4.5 Zur Methode Zunächst muss die Problemstellung klar definiert werden. Davon ausgehend wird im vielseitigen Angebot der Datenbanken recherchiert. Viele DBMS lassen sich aufgrund ihrer fundamentalen Eigenschaften ausschließen und somit lässt sich nach vielen Untersuchungen eine Menge von Architekturen finden, welche ein gewisses Potenzial besitzen. Diese Architekturen werden auf ihre Vor- und Nachteile untersucht. Ausgehend der Entscheidung über die Architektur müssen die Produkte untersucht werden. In der Regel entscheidet man sich für die gängigen Produkte. Die Auswahl eines Produktes erfolgt anhand einer Featurematrix, die nach Kriterien der Problemstellung strukturiert ist. Diese Matrix ist das Mittel, auf das man nicht verzichten sollte. Sie ist in verschiedene Kategorien unterteilt und diese Kategorien werden mit Gewichtungen versehen. Je nach Grad der Erfüllung eines Kriteriums sammeln die Produkte Punkte. Das Produkt mit den meisten Punkten wird ausgewählt. 4.6 Nicht behandelte angrenzende Probleme Diese Arbeit beschäftigt sich ausschließlich mit dem Evaluierungsprozess und behandelt nicht eine gesamte Umwandlung von Datenspeichermedium und Softwareprodukt. Ebenfalls wird nicht untersucht, ob die Möglichkeit eines Umstieges sinnvoll wäre. 4.7 Zielstellung Zielstellung dieser Studie soll sein, IT-Unternehmen bei zukünftigen Projekten eine Handlungshilfe für Evaluierungskonzepte in Bezug auf eine mögliche Portierung in eine NoSQL-Datenstruktur zur Verfügung zu stellen. 4.3 Fragestellung 6 Migration_von_einem_relationalen_Datenbankmodell_zu_NoSQL 5 Grundlagen Folgend werden zum besseren Verständnis wichtige und grundlegende Themen erläutert. 5.1 Skalierung ?Einfach ausgedrückt ist es die Fähigkeit einer Anwendung wachsende Anforderungen an Durchgang, Nutzung und Kapazität zu verkraften. Sowohl horizontale als auch vertikale Skalierungsstrategien dienen der Fähigkeit eines Systems dieses Wachstum zu verkraften.? [5] 5.1.1 Vertikale Skalierung Die vertikale Skalierung ist die bekannteste und auch am einfachsten umzusetzende Skalierung. Im Großen und Ganzen fußt sie auf den Einsatz von noch leistungsstärkeren Komponenten. 5.1.1.1 Vorteile Vertikal skalierte Systeme sind einfacher zu warten, da hier keine Interdependenzen zu anderen Systemen bestehen. So müssen bestehende Anwendungen nicht umgeschrieben werden, sondern können wie gewohnt weiterhin eingesetzt werden. Dadurch, dass vertikal skalierte Systeme i.d.R monolithisch sind, besteht eine geringere Gefahr für Konsistenzprobleme. 5.1.1.2 Nachteile Die Einfachheit des Systems hat jedoch ihren Preis. Um die geforderte Leistung erbringen und die Ausfallgefahr gering halten zu können, ist der Einsatz von hochwertiger und somit teurer Hardware erforderlich. Diese Hardware muss in Anbetracht der Zukunftsfähigkeit mit Leistungsreserven angeschafft werden, was sich natürlich auch preislich niederschlägt.[6] Darüber hinaus sind oft Speziallösungen notwendig, um die Gesamtheit der bestehenden Ressourcen ausnutzen zu können. Da die vertikale Skalierung durch die Verfügbarkeit und Existenz von leistungsfähigen Komponenten abhängt, ist ihr ein natürliches Limit gesetzt. Dadurch werden diese Systeme am Ende ihrer Lebenszeit oft am äußersten Limit betrieben, was weitere Probleme nach sich ziehen könnte. Aus diesem Grund bietet es sich an, die Möglichkeit der horizontalen Skalierung zu betrachten. 5.1.2 Horizontale Skalierung Bei der horizontalen Skalierung wird, im Gegensatz zur vertikalen Skalierung, keine qualitative Steigerung der Leistungsfähigkeit angestrebt, sondern eine quantitative. Plakativ ausgedrückt kann man sagen, dass hier statt einem großen leistungsfähigen Rechner, mehrere weniger leistungsfähigere Rechner eingesetzt werden. Durch Nutzung horizontaler Skalierung ist es auch möglich, eine effiziente Regionalisierung zu realisieren. In Zeiten der Globalisierung haben Services heute häufig eine weltweite Verbreitung. Damit die geographisch verstreuten Anwender zuverlässig und mit möglichst geringen Latenzzeiten bedient werden können, ist eine lokale Platzierung von Servern von Vorteil. Ein weiterer häufiger Grund für die horizontale Skalierung ist der Ausfallsicherheit geschuldet. Dies kann sich zum einen auf die einzelnen Komponenten des Rechners beziehen, sprich Hard- und Software, aber auch auf den Ausfall von Übertragungswegen. 5 Grundlagen 7 Migration_von_einem_relationalen_Datenbankmodell_zu_NoSQL 5.1.2.1 Vorteile Einer der Hauptvorteile der horizontalen Skalierung ist, dass hier preiswerte Standard Hardware zum Einsatz kommen kann, die genau den aktuellen Bedürfnissen entspricht. Es ist hier nicht nötig in große Leistungsreserven zu investieren.[7]Durch die Möglichkeiten der breiteren Aufstellung und Replizierung von Daten kann die Ausfallgefahr in Bezug auf Störungen der Übertragungswege minimiert werden. Da die eingesetzte Hardware i.d.R. keine großen Besonderheiten aufweist, können meist Standardlösungen eingesetzt werden. 5.1.2.2 Nachteile Oft ist es nicht trivial ein bestehendes vertikales System horizontal zu skalieren. Hierfür ist meistens ein nicht zu unterschätzender konzeptioneller Aufwand nötig. Die Entscheidung wie streng mit Konsistenz umgegangen werden soll, muss in dieser Phase der Entwicklung geschehen. Es müssen Wege gefunden werden, wie bestehende Anwendungen in das horizontal skalierte System integriert werden können. Nicht alle Anwendungen sind auf dieses Modell eingerichtet. Aufgrund der nicht zu vermeidenden Interdependenzen sind horizontale Systeme schwerer zu warten. Insbesondere dann, wenn die einzelnen Teilsysteme von verschiedenen Personen administriert werden. Dieser Punkt führt uns direkt zu den Fehlannahmen, die bei der Skalierung bestehen. 5.1.2.3 Fehlannahmen bei der Skalierung Häufig scheitern horizontale Skalierungen aufgrund konzeptioneller Mängel. Hierbei ist zu beobachten, dass während der Konzeption bestimmte Fehlannahmen getätigt werden, die dadurch den beabsichtigten Erfolg verhindern. Bei diesen Fehlannahmen werden meist einzelne Aspekte im Bezug auf Konsistenz, Ausfallsicherheit oder Verfügbarkeit getätigt. Dies kann sich im Einzelfall auch nur auf die Einschätzung des individuellen Eintrittsrisikos beziehen. Eine häufige Annahme ist es, dass bei einem verteilten System alle Teile stets verfügbar sind und sich diese in einem konsistenten Zustand untereinander befinden. Wir werden hierauf im späteren Verlauf der Arbeit im Rahmen des CAP Theorems zurückkommen. Weitere häufige Fehlannahmen sind: • Das Netzwerk ist ausfallsicher. • Die Netzwerklatenzzeit ist gleich Null. • Datensatz ist unendlich. • Das NW ist sicher. • Die NW-Topologie ändert sich nicht. • Es gibt nur einen NW Administrator. • Das Netzwerk ist homogen[8]. 5.2 Datenbanken Eine Datenbank ist eine Sammlung von logisch schlüssigen Daten, die eine eigenständige Bedeutung haben. Datenbanken werden ausgehend von ihrem beabsichtigten Einsatzzweck erstellt. Die vorausgehende Konzeption richtet sich hierbei nach den Bedürfnissen der Nutzer und den geplanten Anwendungen. Deren Ziel es ist, eine abstrahierte Abbildung eines fest umgrenzten Bereiches der realen Welt zu erschaffen (?Miniwelt?). Änderungen in dieser Miniwelt müssen sich in den Datensätzen der Datenbank widerspiegeln, damit die darauf zugreifenden 5.1.2.1 Vorteile 8 Migration_von_einem_relationalen_Datenbankmodell_zu_NoSQL Anwendungen jederzeit genau und zuverlässig arbeiten können. Die hierfür konstruierten Datenbanken können eine beliebige Größe und Komplexität erreichen. Diese Komplexität entsteht z.B. dadurch, dass eine Änderung der realen Welt durch viele interdependente Operationen in der Datenbank abgebildet wird. Transaktionen sind ein probates und erprobtes Mittel, um dieser Komplexität Herr zu werden und einen konsistenten Zustand der Datenbank zu gewährleisten. Hierzu werden die nötigen Einzelschritte (Operationen) zu Transaktionen zusammengefasst. Relationale Datenbank Systeme beruhen auf dem ACID-Prinzip.[9] 5.3 ACID ACID beschreibt die Kernprinzipien der Architektur von transaktionsbasierten RDBMS. Transaktionen sind eine Folge von Operationen und Handlungen, die den Anspruch haben, entweder ganz oder gar nicht ausgeführt zu werden (COMMIT oder ROLLBACK/ABORT). Transaktionen bestehen aus fünf aufeinander folgenden Schritten: • BEGIN_TRANSACTION läutet den Start einer Transaktion ein. • READ or WRITE beinhaltet beliebig viele Lese- oder Schreiboperationen, die auf der Datenbank ausgeführt werden sollen. • END_TRANSACTION markiert den Abschluss der gewünschten Operationen und damit das Ende der Transaktion. Jetzt wird überprüft, ob die Transaktion dauerhaft gespeichert oder verworfen wird. Dies erfolgt entweder durch • COMMIT_TRANSACTION veranlasst eine dauerhafte Veränderung der Daten. Oder • ROLLBACK (or ABORT) signalisieren ein Scheitern der Transaktion. Nun müssen alle Änderung an der Datenbank rückgängig gemacht werden. Die vorgenannten Schritte werden durch den recovery manager der Datenbank ermöglicht. Dieser protokolliert die einzelnen Operationen der Transaktion, um diese abschließend im Gesamten auszuführen oder bei einem Scheitern den ursprünglichen Zustand der Datenbank wiederherzustellen.[10] Durch die Anwendung von Transaktionen nach dem ACID-Prinzip soll ausschließlich Konsistenz gewährleistet werden. ACID ist dann gewährleistet, wenn die folgenden vier Transaktionseigenschaften erfüllt wurden: • Atomicity ? Atomarität (Abgeschlossenheit): Jede Operation in einer Transaktion ist vollständig abgeschlossen (oder es ist gar keine, wie z.B. bei Rollback). • Consitency ? Konsistenz: Bei Transaktions-Start und -Ende ist die Datenbank in einem konsistentem Zustand. • Isolation ? Abgrenzung: Die Transaktion verhält sich so, als wäre sie die einzige Operation die auf der DB ausgeführt wird. • Durability ? Dauerhaftigkeit: Ist eine Transaktion einmal abgeschlossen, wird sie nicht mehr rückgängig gemacht.[11] 5.3.1 Einsatzgebiete Als klassisches Transaktionsmodell ist ACID heute bei Anwendungen in nahezu allen Einsatzgebieten anzutreffen. Naturgemäß können deren Ansprüche nicht immer gleich gut erfüllt werden. Als häufig angegebenes Beispiel, wo die ACID-Prinzipien optimal umgesetzt werden können, ist der Einsatz im Finanzsektor. Hier hat die 5.2 Datenbanken 9 Migration_von_einem_relationalen_Datenbankmodell_zu_NoSQL Gewährleistung von Transaktionssicherheit und Konsistenz allerhöchste Priorität. Eine z.B. nur teilweise Ausgeführte, oder nicht dauerhaft gespeicherte Überweisung hätte hier fatale Auswirkungen. Dasselbe gilt z.B. beim Einsatz in ERP-Systemen. Aufgrund der starken EDV-Abhängigkeit heutiger Unternehmen, würde eine inkonsistente Datenbank zu enormen Schwierigkeiten, bis hin zum finanziellen Ruin, führen. Eine weitere, nicht zu unterschätzende, Gefahr ist der komplette oder teilweise Verlust von Daten, wie er z.B. durch Hardwareschäden entstehen könnte. Aus diesem Grund sollten Datenbanken, deren ganz oder teilweiser Verlust existenzgefährdend ist, partitionstolerant konzipiert und betrieben werden. ACID stößt dort an seine Grenzen, wo die Datenbank nicht mehr unabhängig und homogen ist. Dies trifft insbesondere bei horizontal skalierten Systemen zu. Erste Versuche verteilte Datenbanksysteme zu entwickeln, die den ACID Prinzipien gerecht werden, wurden schon in den 1980er Jahren unternommen. Bis zum heutigen Tag konnte keines der seither entwickelten Systeme diesen Anspruch in Gänze erreichen[12]. Bis zur Mitte der 90er Jahre wurde das Ziel, eine ACID-Konforme verteilte Datenbank zu entwickeln, nicht in Frage gestellt. Bis dahin war die Aufgabe der Konsistenz als oberstes Ziel so verpönt, dass Entwickler eher ein Scheitern im Gesamten vorzogen, als hier hingehend Abstriche zu machen. Erst der Aufstieg des Internets führte zu einem Umdenken. Einen weiteren Wendepunkt bildete die Veröffentlichung des CAP-Theorems durch Eric Brewer. Nun wurde Verfügbarkeit zur wichtigsten Eigenschaft[13]. 5.4 CAP Theorem Das CAP Theorem ist eine von Eric Brewer im Jahr 2000, unter dem Titel 'Towards Robust Distributed Systems'[14] vorgestellte Theorie, die besagt, dass in verteilten Datenbanksystemen von den drei Eigenschaften, Konsistenz, Verfügbarkeit und Ausfalltoleranz nur zwei beliebige gleichzeitig erreicht und garantiert werden können. Brewers Theorie wurde 2002 von Seth Gilbert und Nancy Lynch formal bewiesen[15]. Im Einzelnen erläutert Brewer in seinem Theorem die Unmöglichkeit der gleichzeitigen Erfüllung aller Eigenschaften und die Notwendigkeit sich für zwei Merkmale zu lasten des Dritten zu entscheiden. Die hier gesetzten Schwerpunkte können im Einzelfall, auch in der selben Anwendung, variieren. Hierzu gilt: ?Pick any two? der folgenden Eigenschaften. 5.4.1 Consistency Konsistenz (Consistency) bedeutet, dass die von der Datenbank auf eine Abfrage zurückgelieferten Daten in sich stimmig und widerspruchsfrei sind. Dies muss nicht zwangsläufig bedeuten, dass die in der Datenbank gespeicherten Informationen widerspruchsfrei sind. Eine verteilte Datenbankanwendung ist dann konsistent, wenn eine bestimmte Abfrage zum Zeitpunkt T0 an allen Knoten dasselbe Ergebnis zurückliefert, selbst dann, wenn gleichzeitige Schreibvorgänge stattfinden. Insbesondere bei sehr großen horizontal skalierten Systemen ist diese Eigenschaft nur mit großem Aufwand zu realisieren. ?In der Praxis würde dies bedeuten, dass der geänderte Wert erst dann wieder gelesen werden kann, wenn alle replizierenden Knoten aktualisiert sind, was bei einem sehr großen Cluster mit vielen Knoten und einer hohen durchschnittlichen Last dauern kann?[16] 5.3.1 Einsatzgebiete 10 Migration_von_einem_relationalen_Datenbankmodell_zu_NoSQL 5.4.2 Availability Verfügbarkeit (Availability) bezeichnet eine akzeptable Reaktionszeit. Was akzeptabel ist, kann von Anwendung zu Anwendung variieren. Verfügbarkeit (Availability) ist hier von Zuverlässigkeit (Reliability) abzugrenzen. Zuverlässig ist ein System dann, wenn es während der Zeitspanne seines Einsatzes im Rahmen seiner Anforderungen ?tut was es soll?. Verfügbarkeit zeichnet sich durch Zuverlässigkeit zu einem speziellen Zeitpunkt aus (i.d.R. wenn der Service benötigt wird). Zuverlässigkeit wird hier unterstellt und ist die Basis für die Verfügbarkeit eines Systems. Für viele E-Commerce-Anwendungen ist Verfügbarkeit ein kritisches Systemmerkmal, welches einen direkten Einfluss auf die Geschäftsentwicklung hat. Beispielsweise sinkt der Umsatz von Amazons Buchhandel spürbar, wenn sich die Reaktionszeit beim Bestellvorgang aus technischen Gründen nur kurzzeitig verzögert. Ein verfügbares System muss eine für den konkreten Anwendungsfall akzeptable Reaktionszeit aufweisen. Diese muss bis zu einer vordefinierten Last eingehalten werden können, da die Erfahrung zeigt, dass Reaktionszeiten dann akzeptable Werte unterschreiten, wenn die Last der Anfragen ansteigt. [17] [18] 5.4.3 Partition tolerance Ausfalltoleranz (Partition tolerance) bedeutet, dass der Ausfall eines Knotens oder einer Kommunikationsverbindung zwischen den Knoten einer verteilten Datenbank nicht zum Ausfall des gesamten Systems führt, sondern das System weiterhin auf Anfragen von außen reagieren kann. Gerade für Webunternehmen ist es daher unverzichtbar, dass eine verteilte Datenbank solche Ausfälle abfangen kann.[19] 5.4.3.1 Beispiele Für die Verständlichkeit des CAP-Theorems sind im Folgenden drei Beispiele aufgeführt. 5.4.3.1.1 CA ? Consistency & Availability Die klassischen RDBMS sind in diesem Bereich des Cap-Theorems zu finden. Hierbei werden die Daten nach dem ACID-Prinzip verwaltet. Diese Datenbanken sind in der Regel unabhängig und nicht ausfallsicher. Das bedeutet nicht, dass hier z.B. keine Datensicherung gemacht wird, sondern eher das diese Datensicherung nicht jederzeit konsistent ist. Es handelt sich hier eher um eine Schadensminimierung als um eine Gewährleistung des nahtlosen Weiterbetriebs bei einem Teilausfall des Systems. Besteht der Anspruch darin, dass auch die replizierten Daten immer konsistent sind, ist dies nur durch einen zumindest zeitweisen Verzicht auf Verfügbarkeit realisierbar. 5.4.3.1.2 CP ? Consistency & Partition tolerance Das wohl einleuchtendste Beispiel in dem die beiden Eigenschaften Konsistenz und Ausfalltoleranz gleichzeitig gegeben sein müssen, ist der bereits erwähnte Finanzsektor. Ein Verlust von Daten oder das Auftreten eines inkonsistenten Zustands wäre hier fatal. Aus diesem Grund ist es hier angebracht, im Zweifel auf eine Verfügbarkeit des Dienstes zu verzichten, wenn entweder die Konsistenz oder die Partitionstoleranz nicht garantiert werden können. Ein Geldautomat, der nicht sicherstellen kann, dass die von ihm empfangene Daten konsistent sind oder nicht in der Lage ist, die Veränderung des Kontostandes ausfallsicher zu speichern, wird somit den Dienst verweigern. Der hieraus entstehende Schaden ist im Verhältnis zum Verlust von Daten oder Inkonsistenz fast unbedeutend. 5.4.2 Availability 11 Migration_von_einem_relationalen_Datenbankmodell_zu_NoSQL 5.4.3.1.3 AP ? Availability & Partitiontolerance Für viele auf Internetseiten verbreitete Informationen ist Konsistenz kein kritisches Merkmal. Insbesondere bei Onlineshops und sozialen Netzwerken genießen Verfügbarkeit, Geschwindigkeit und Ausfallsicherheit die höchste Priorität. Manchmal wäre eine zu strenge Konsistenz sogar schädlich. Dies ist zum Beispiel bei Onlineshops gegeben, die ihren Kunden Transparenz über ihre aktuellen Lagerbestände verschaffen möchten. Würde dieser z.B. neu berechnet werden, sobald ein Kunde einen Artikel in seinen Warenkorb legt, könnte dies dazu führen, dass gleichzeitig einem anderen interessierten Kunden dieses Produkt als nicht mehr verfügbar angezeigt wird. Da man sich nie sicher sein kann, ob ein Kunde den Bestellvorgang abschließt, ist es in diesem Fall praktikabler. beiden Kunden zu ermöglichen, das Produkt in Ihren Warenkorb zu legen und ggf. einem der Kunden im späteren Verlauf eine Fehlermeldung anzuzeigen. Ein in der Literatur häufig angegebenes Beispiel für eine verteilte AP-Architektur ist der DNS Dienst. Der Verzicht auf eine strenge Konsistenz ermöglicht hier eine einfache horizontale Skalierung. 5.5 BASE Bei BASE dreht sich, im Gegensatz zu ACID alles um Verfügbarkeit und Partitionstoleranz. Um diesen AP Ansatz gewährleisten zu können, werden die Anforderungen der Konsistenz der Daten gelockert. Konsistenz wird innerhalb von BASE, im Unterschied zu ACID, nicht als fester Zustand nach Ende einer Transaktion gesehen, sondern als Übergangsprozess. Systeme, die nach BASE arbeiten, erreichen auch irgendwann den Status der Konsistenz, die Betonung liegt dabei aber auf irgendwann, i.d.R. in einem der Anwendung angemessenem Zeitraum. In der Praxis bedeutet dies, dass z.B. bei einem Update eines Datensatzes verschiedene Knoten zeitweise unterschiedliche Ergebnisse zurück liefern. Dieser Zeitraum wird als 'inconsistency window' bezeichnet.[20] BASE setzt sich aus folgenden Begriffen zusammen: Basicly available,was bedeutet, dass die Applikation grundsätzlich immer verfügbar ist, gefolgt von soft stated, womit gemeint ist, dass die Datenbank nicht immer in einem konsistenten Zustand sein muss, in etwa stimmende Daten sind akzeptabel. Zuletzt eventualy consistent, was dafür steht, dass die Applikation ihren aktuellen Zustand kennt. Die Applikation weiß, dass die Konsistenz der zurückgelieferten Daten nicht garantiert ist. 5.5.1 Fazit Das CAP-Theorem ermöglicht uns den Blick auf das Spektrum zwischen Konsistenz und Verfügbarkeit. Hierbei bilden ACID & BASE die jeweiligen Pole.[21] Dies ist i.d.R. jedoch nicht ohne Einbußen der Praktikabilität erreichbar. Wie so oft liegt auch hier die Wahrheit, je nach Anwendungsfall, irgendwo dazwischen. Mal näher am einen, mal näher an dem anderen Pol. Gemäß des CAP-Theorems können in einem verteilten System maximal zwei der drei Eigenschaften Konsistenz, Verfügbarkeit und Ausfalltoleranz zum selben Zeitpunkt garantiert werden. Deshalb muss anhand der jeweiligen Problemstellung entschieden werden, welche der drei Eigenschaften die geringste Priorität hat, um diese vernachlässigen zu können. Das Verständnis des CAP-Theorems ist elementar, um bei der Planung die richtigen Entscheidungsgrundlagen zu haben und sich nicht in unerreichbaren Idealvorstellungen zu verrennen und ?... zentral für das Verständnis der Veränderungen, die in der Datenbankwelt aktuell durch die NoSQL-Bewegung vor sich gehen.?[22] 5.4.3.1.3 AP ? Availability & Partitiontolerance 12 Migration_von_einem_relationalen_Datenbankmodell_zu_NoSQL 5.6 Multiversion Concurrency Control (MVCC) Die ordnungsgemäße Speicherung aller Datensätze sowie das Sicherstellen der semantischen Integrität gehören zu den primären Aufgaben eines DBMS. Um dies zu gewährleisten, werden innerhalb der klassischen Zugriffsverfahren (pessimistischen Sperrverfahren), durch den jeweiligen Prozess, die Datensätze für weitere Zugriffe durch andere Prozesse exklusiv gesperrt. Unabhängig vom Sperrmodus werden bei der klassischen Methode Leseprozesse von Schreibprozessen geblockt und müssen warten, bis die Transaktion abgeschlossen oder abgebrochen wurde. Als Alternative, kann das Zugriffsverfahren Multiversion Concurrency Control (MVCC) angewendet werden, welches einen parallelen Zugriff auf dieselben Daten ermöglicht. MVCC wird in den meisten verteilten Datenbanksystemen verwendet und in einigen relationalen Datenbanksystemen. Durch diese Alternative wird ein Zugriffsverhalten angeboten, bei dem Schreibprozesse keine Leseprozesse blockieren und andersrum. Der konkurrierende Zugriff auf die Datensätze wird durch verschiedene und unveränderliche Versionen der Datensätze kontrolliert, welche mittels eindeutigen Versionsnummern gekennzeichnet werden (Abbildung 1)[23]. Abbildung 2: Datensatz mit vier Versionen Abbildung 3: Speichervorgang im MVCC Verfahren Dies stellt Herausforderungen an das DBMS, denn sobald mehrere Versionen eines Datensatzes in der Datenbank vorgehalten werden, muss die Versionsverwaltung intransparent für den Anwender erfolgen (?alte? Versionen ausblenden). In periodischen Abständen sollten jedoch die ?alten? Versionen der Datensätze aus der Datenbank entfernt werden. Um eine eindeutige Versionsnummer zu erhalten, können verschiedene Ansätze in Betracht kommen, beispielsweise: Transaktionsnummer, Timestamp oder Vector Clocks, welche abhängig vom verwendeten Datenbanksystem sowie deren Einstellungen sind[24]. Sollten Timestamps als eindeutige Versionsnummer verwendet werden, müssen alle Datenbankinstanzen synchronisierte Zeiten besitzen. Des Weiteren kann es vorkommen, dass zwei Instanzen zeitgleich denselben Datensatz beschreiben und somit die Konflikterkennung nicht möglich ist. Um dies zu vermeiden, sollten zeitunabhängige Verfahren, wie Vector Clocks oder Hash Histories, bevorzugt verwendet werden[25]. Beim schreibenden Zugriff auf einen Datensatz, wird nicht nur die ID des Datensatzes ermittelt, sondern auch die aktuelle Versionsnummer. Nachdem der Datensatz aktualisiert wurde, wird die aktuelle Versionsnummer innerhalb des Prozesses mit der Versionsnummer in der Datenbank abgeglichen. Sollte die Versionsnummer des Datensatzes innerhalb des Prozesses identisch mit der Versionsnummer in der Datenbank sein, wird der Datensatz gespeichert und die Versionsnummer innerhalb der Datenbank inkrementiert. Die vorherige Version innerhalb der Datenbank wird als abgelaufen markiert. Diese Version befindet sich solange innerhalb der Datenbank, bis das DBMS mittels Aufräumroutine diesen Datensatz entfernt. Wenn die Versionsnummer im Prozess nicht identisch mit der Versionsnummer innerhalb der Datenbank sein sollte, dann muss ein anderer Prozess die Daten inzwischen geändert haben und es muss eine Konfliktlösung durch den Client durchgeführt werden. Dieser Versionskonflikt kann während des Schreibvorgangs auftreten, bei denen die Transaktion zum Beispiel neu gestartet oder abgebrochen wird. Ferner kann dies durch asynchrone Replizierung durch einzelnen Datenbankinstanzen ebenfalls auftreten. In der Regel werden alle Konfliktversionen 5.6 Multiversion Concurrency Control (MVCC) 13 Migration_von_einem_relationalen_Datenbankmodell_zu_NoSQL der Datensätze aufbewahrt, bis der Client entscheidet, wie diese bereinigt werden.[26] 5.7 Vector Clocks Wie erwähnt muss jeder Datensatz eine eindeutige Versionsnummer besitzen, um festzustellen, welche Version die aktuelle Version des Datensatzes ist. Dieses Problem ist in verteilten NoSQL-Systemen mit verschiedene Datenbankinstanzen alles andere als trivial. Die Festlegung der Versionsnummer mittels Timestamp kann dazu führen, dass mehrere Prozess zeitgleich denselben Datensatz verändern und das System dies nicht mitbekommt, da der Timestamp identisch ist und somit keine Konflikterkennung an den Client gemeldet wird. Ziel der Vector Clocks ist es, die Probleme der Synchronisation, Ordnung der Ereignisse und Konflikterkennung auch in verteilten NoSQL-Systemen zu lösen und an den Client zu melden, damit diese behoben werden[27]. Anhand der nachfolgenden Abbildung wird die Funktionsweise der Vector Clocks erläutert: Der Datensatz X enthält den Vector ([A,0]), da dieser initial vom Prozess A geschrieben wurde. Prozess B aktualisiert den Wert des Datensatzes X und startet seine Vector Clock für dieses Item. Somit besitzt der Datensatz X den Vector ([A,0],[B,1]). Da es ein serieller Zugriff war, kam es zu keinem Konflikt. Im Anschluss aktualisieren beide Prozesse parallel auf verschiedenen Replikationen den Datensatz X und erhöhen den Vector Clock[28]. Bei der nächsten Synchronisation des Datensatz X besitzen beide Vector Clocks Unterschiede, welches darauf zurückführt, dass es zu einem Konflikt kam. Diese Konflikterkennung wird an den Client gemeldet, welcher diesen Konflikt auflösen muss.[29] Abbildung 4: Konflikterkennung mittels Vector Clocks Das Prinzip der Vector Clocks ist dienlich, um eine eindeutige Versionsnummer für die Datensätze bereitzustellen. Allerdings lösen Vector Clocks keine Konflikte, sondern können diese lediglich aufzeigen und mit jedem schreibenden Prozess auf den Datensatz werden die Vector Clocks größer. 6 Problemstellung Die zu betrachtende Komponente ist eine API, auf dessen Basis einige Webanwendungen betrieben werden. Die API unterteilt sich im mehrere Bereiche, um diverse Funktionen zur Verfügung, zu stellen wie zum Beispiel Userverwaltung, Datenhaltung, unterstützende GUI Funktionen, Datenaustausch über weitere Protokolle. Die API wurde in der Programmiersprache C# implementiert. Momentan kommt im Backend das relationale Datenbankmanagementsystem PostgreSQL zum Einsatz. Jedoch gibt es seitens des Betreibers die Frage, in wie weit das Antwortverhalten sowie die Ausfallsicherheit bei einem immer weiter steigendem Datenvolumen gewährleistet werden kann und ob hierfür NoSQL-Datenbanken eine Alternative darstellen. Daher soll hier untersucht werden, ob es geeignetere DBMS gibt oder inwieweit Teile ausgegliedert werden könnten. Der Fokus dieser Studie richtig sich dabei auf den Teil der API,der den direkten Datenaustausch zwischen Applikation und Datenquelle ermöglicht und andere Funktionen, die auf das Datenbankbackend zurückgreifen. 6 Problemstellung 14 Migration_von_einem_relationalen_Datenbankmodell_zu_NoSQL 6.1 Ist Zustand Die Daten der Anwendungen werden momentan in dem RDBMS PostgreSQL gespeichert. Zwischen Datenbank und Anwendungen befindet sich eine Schnittstelle, die den Zugriff auf die Datenbank reglementiert (folgend DB-API genannt). 6.1.1 Datenstrukturen Den Anwendungen werden von der Schnittstelle mehrere Datenstrukturen zur Verfügung gestellt, die letztendlich die Beziehungsmöglichkeiten des relationalen Datenbankmodells repräsentieren. Innerhalb dieser Strukturen gibt es keine referenzelle Integrität anhand von Fremdschlüsseln. Ein Bezug zu einem Datensatz wird mit Hilfe einer ID beschrieben, wobei an der Schnittstelle die Konsistenz dieser Beziehung sicherstellt. Eine Struktur, welche Entitäten ohne Bezug abbildet, ist eine so genannte Haupttabelle. Diese Struktur beinhaltet einen Primärschlüssel sowie beliebige Attribute. Eine weitere Struktur ist eine Untertabelle. Untertabellen bilden eine 1:N-Beziehung ab und bestehen daher neben einem eigenen Primärschlüssel aus einer ID, welche auf einen Datensatz einer Haupttabelle verweist. Zusätzlich können auch hier weitere beliebige Attribute enthalten sein. Verbindungstabellen dienen der Abbildung von N:M-Beziehungen zwischen Datensätzen von Haupttabellen. Ein Datensatz besteht hierbei aus zwei IDs, die auf die jeweiligen Hauptdatensätze verweisen. Abbildung 5: ER: Verbindungstabelle Abbildung 6: ER: Untertabelle Des Weiteren werden durch die API noch Funktionen zur Ablage von Dateien innerhalb einer Datenquelle sowie Funktionen zur Speicherung von Cache- und Konfigurationsdaten. Das Caching und die Konfigurationsablage sind Key/Value Collections, die einen Bezug zu Usern oder Gruppen haben können. Die datenbankgestützte Dateiablage beinhaltet neben der eigentlichen Datei in Form eines Bytearrays Metainformationen (z.B. Name, Dateityp) sowie einen Hash und einen Verweis zu einer beliebigen ID. Die Datenanalyse ist notwendig, um zu ermitteln, welche Daten momentan vorhanden sind, welches Volumen durch diese verwendet wird, ob und wie diese miteinander verknüpft sind und welche Operationen auf diese angewandt werden. Eine Betrachtung der vorhandenen Daten hat ergeben, dass sie die wie folgt Kategorisieren lassen: • Logdaten • Businessdaten • Rechte und Rollen • Cachedaten • Dateidaten Das größte Datenvolumen wird von Logdaten in Anspruch genommen. Diese haben nur einen Bezug zu 6.1 Ist Zustand 15 Migration_von_einem_relationalen_Datenbankmodell_zu_NoSQL Userdatensätzen. Auf die Logdaten werden fast ausschließlich Hinzufüge- und Leseoperationen angewandt. Die Protokolldaten sind in einer Tabelle hinterlegt. Erfasst werden hier Meldungen bezüglich sicherheitsrelevanter Vorgänge, wie z.B. Logins oder Bearbeitungen von Rechten. Das nächste größere Volumen wird von Businessdaten verwendet. Diese können untereinander über die gegebene Struktur in Bezug zueinander stehen. Auf diese Daten wird mit allen Operationen, also Hinzufügen, Schreiben, Lesen und Löschen, zugegriffen. Die Businessdaten werden in den oben beschriebenen Strukturen hinterlegt und werden von den Applikationen vorgegeben. Die DB-API stellt, wie weiter oben beschrieben, neben den anwendungsbezogenen Daten, noch weitere Funktionen für Caching, Konfigurationsablage, Userverwaltung, datenbankgestützte Dateiablage und für die Sicherheit der Daten relevante Systemtabellen zur Verfügung. Diese Daten werden, mit Ausnahme der Userdaten, eher hinzugefügt, gelesen oder gelöscht. Bei Userdaten kann eine Bearbeitung der Datensätze durchaus vorkommen. Zurzeit werden folgende Typen innerhalb der Relationalen Datenbank verwendet: • Boolean • Integer • BigInteger (Int64) • Datetime • Char Array (vchar) • Text • Byte Array 6.1.2 Datennavigation Die API kapselt den Zugriff auf die oben beschriebenen Tabellen. Die aufsetzenden Applikationen können ausschließlich über die angebotenen Methoden der API auf die Datenbanken zugreifen. Die Ausführung von SQL-Befehlen ist über die DB-API nicht möglich. Des Weiteren stellt die API momentan keine Methoden zur Anwendung von relationaler Operatoren wie JOINS, UNIONS oder Ähnlichem bereit. Die Filtermöglichkeiten über die DB-API beschränken sich auf IDs. Es ist jedoch geplant, Datensätze über bestimmte Attribute zu ermitteln. Dies soll jedoch gekapselt, von der jeweiligen Datenbankabfragesprache, geschehen. Die Methoden der Haupt- und Untertabelle geben einen Objekt zurück, welches das Ergebnis der Abfrage kapselt. Dieses ist wie folgt aufgebaut (gekürzt): Die Objekte innerhalb der DataSource für den eigentlichen Zugriff auf die Daten sind Teil des Ado.Net Frameworks.Der Zugriff auf die Daten ist wie folgt möglich: IDataSource.DataTable.Rows[ID][Column] Das Objekt hat folgende Eigenschaften: • DataTable ist vom Typ System.Data.DataTable • Rows ist eine Collection des Typs System.Data.DataRow ? der Zugriff auf einzelne Rows erfolgt über Indizes 6.1.1 Datenstrukturen 16 Migration_von_einem_relationalen_Datenbankmodell_zu_NoSQL • System.Data.DataRow enthält eine Item-Collection für den Zugriff auf die einzelnen Zellen; ein Item aus der Item-Collection ist vom Typ Object; die Werte sind abhängig vom Datenbankschema getypt Verbindungstabellen werden von der API in Form von integertypisierten Arrays zurückgegeben. Über die Methoden werden Child- bzw Parentids zu einer bestimmten Child- bzw. Parentid erfragt. 6.1.3 CAP-Abwägung Die Frage der gewünschten CAP-Eigenschaften lässt sich schwer beantworten, da hier viele unterschiedliche Datenarten aufeinander treffen. Dennoch ist eine Definition zwingend erforderlich, um auf dessen Basis ein geeignetes Produkt ermitteln zu können. In der Datenkategorie Protokollierung ist die Konsistenz nicht so wichtig, da diese in der Regel nicht bearbeitet und nur geschrieben und analysiert werden. Wichtig wäre hier jedoch, dass die Daten jederzeit geschrieben werden und aufgrund der Datenmenge verteilt werden können. Die Cache-, Konfigurations- und Fileeinträge benötigen keine strikte Konsistenz, da auch hier Datensätze eher erzeugt und gelesen werden. Hier wäre es irrelevant, falls Daten nicht sofort von allen Clients gelesen werden können. Die gewünschte Konsistenz der Businessdaten hängt stark von den Anforderungen der Applikation ab. Userdaten, sowie Daten zu den Rechten und Rollenzugehörigkeiten (Sicherheitsdaten), müssen aufgrund Ihrer Eigenschaft als Sicherheitsfunktionen konsistent sein. Business- und Sicherheitsdaten können Partitioniert werden. Es ist jedoch wichtig, dass die Businessdaten von Verfügbarkeit der Sicherheitsdaten abhängen. Das bedeutet, dass Businessdaten nur dann von der Schnittstelle zurückgegeben werden dürfen, wenn auch die dazugehörigen Sicherheitsdaten gelesen werden konnten. Natürlich müsste dies von der Implementierung der Schnittstelle umgesetzt werden. 6.1.4 Relationales Datenbankmodell Folgendes Entity Relationship Diagramm soll Beispielhaft Businessdaten, die über die beschrieben Datenstrukturen erzeugt und verwendet werden, und deren Abhängigkeiten zueinander darstellen. Abbildung 7: Beispiel ER Diagramm 6.2 Anforderungen an das DBMS Aus den oben beschriebenen Punkten ergeben sich folgende Anforderungen an das DBMS: • Die Datenbank muss in der Lage sein, die gegebene Datenstruktur zu erfassen. • Das Interface der API darf sich, aufgrund der Tatsache das diese schon im Einsatz ist und eine Änderung auch Anpassungen in den darauf aufbauenden Applikationen nach sich ziehen würde, nicht oder nur im 6.1.2 Datennavigation 17 Migration_von_einem_relationalen_Datenbankmodell_zu_NoSQL geringen Umfang verändern. • Des weiteren muss ein Connector zu der verwendeten Programmiersprache (C#) zur Verfügung stehen. • Das DBMS muss unter den Betriebssystemen Windows oder Linux lauffähig sein. • Aufgrund der Unterschiedlichsten Applikationen, die auf die zentrale Schnittstelle und deren Daten aufbauen, ist eine möglichst variable Konsistenz erwünscht. • Um einen Mehrwert zur bestehenden Lösung zu erhalten und um auf künftige Anforderungen schnell reagieren zu können, muss das System horizontal skalierbar sein. • Die oben erwähnte Datennavigation muss berücksichtigt werden. • Für den Fehlerfall sollte eine Supportmöglichkeit seitens des Herstellers oder eines Drittanbieters, der mindestens fünf Tage die Woche, acht Stunden pro Tag, zur Verfügung steht, vorhanden sein. 7 Architekturen Eine Analyse der Mathe-, Graphen-, und Key-Value-Datenbank ergab, dass diese die fallspezifischen Anforderungen nicht erfüllen und wurden deshalb im weiteren Verlauf dieser Studie nicht betrachtet. In diesem Abschnitt werden die Architekturen der NoSQL-Datenbanken erläutert, welche aufgrund der Recherche die Anforderungen erfüllen könnten. 7.1 Dokumentenorientierte Datenbanken Falls eine Analogie zu einer dokumentenorientierten Datenbank hergestellt werden soll, könnte diese Form der NoSQL-Datenbank mit einem Karteikasten verglichen werden[30]. Die Daten werden schemafrei innerhalb des Karteikasten in Karteikarten (Dokumenten) abgelegt und können aus beliebigen Feldern bestehen, welche beispielsweise Zahlen, Listen, Texten oder Dateien abbilden. Aufgrund der Schemafreiheit ist keine Definition der Werte, wie Datentyp oder Länge innerhalb des Dokuments notwendig [31]. 7.1.1 Allgemeiner Verwendungszweck Die dokumentenorientierten Datenbanken eignen sich besonders, sobald eine umfangreiche und zusammenhängende Datenstruktur mit unbestimmten Formaten gespeichert werden sollen. Anwendungsfälle wären beispielsweise ein Blog-System, CMS oder Wiki[32]. 7.1.2 Datenmodell Abbildung 8: Abbildung der Dokumente (JSON-Format) 7 Architekturen 18 Migration_von_einem_relationalen_Datenbankmodell_zu_NoSQL Die Speicherung der Dokumente erfolgt zumeist im JSON (JavaScript Object Notation) bzw. mit der binären Variante im BSON Format (Siehe Abbildung 8)[33]. Zusammenfassungen der Attribute (Felder, Typen) werden in Dokumenten gespeichert, welche über eine einmalig existierende Dokumentenid innerhalb der Datenbank gekennzeichnet sind. Für gezielte Abfragen wird das MapReduce-Verfahren angewendet. Aufgrund der Schemafreiheit in den einzelnen Dokumenten liegt die Entscheidung beim Entwickler, welche Daten innerhalb eines Dokuments gespeichert werden sollen. Es könnte beispielsweise die Komplette Anwendung innerhalb eines Dokuments gespeichert werden. Es muss beachtet werden, dass bei jedem Zugriff auf ein Dokument alle Einträge ausgelesen werden. Doch welche Regel sollte ein Entwickler nun befolgen? Eine eindeutige Regelung gibt es nicht, denn jedem Entwickler ist diese Entscheidung selbst überlassen. In der Regel sollten keine Inhalte eingebettet werden, welche viel Speicherplatz verbrauchen, aber nie benötigt werden. Des Weiteren eignen sich eingebettete Dokumente nur, wenn die Daten nicht in mehreren Dokumenten gleichzeitig zugeordnet werden. Sollte die Liste zu groß werden, könnte alternativ ein Relationsdokument erstellt werden, ähnlich der N:M-Beziehung in relationalen Datenbanken. Doch dies würde nicht dem Konzept der dokumentenorientieren Datenbanken entsprechen und in solch einem Fall ist eine relationale Datenbank anzuraten. Der CouchDB-Guide empfiehlt folgenden Leitsatz: ?Real-world data is managed as real-world documents?[34]. Beispiele wären alle Daten einer Rechnung oder Visitenkarte. 7.1.3 Vergleich zu RDBMS Innerhalb der dokumentenorientierten Datenbank sind die zugehörigen Daten auf einen Blick sichtbar, wobei diese in einer relationalen Datenbank auf verschiedene Tabellen verteilt sind. Im Vorfeld muss für die dokumentenorientierte Datenbank kein festes Schema definiert werden und die Länge der jeweiligen Werte benötigen ebenfalls keine Definitionen. Nachfolgende Abbildung verdeutlicht anhand eines Blog-Eintrags schemenhaft die Unterschiede zwischen einem RDBMS und einer dokumentenorientierten Datenbank. Abbildung 9: Blogeintrag - RDBMS vs. dokumentenorientierte Datenbank In einem relationalen Datenbanksystem ist das Datenmodell in einer normalisierten Form abgebildet. Beispielsweise ist das Lesen eines Blog-Eintrags in der normalisierten Form zeitaufwendig, da die Daten von verschiedenen Tabellen gelesen und die Abhängigkeiten aufgelöst werden müssen. Im Vergleich zu einer dokumentenorientierten Datenbank ist dieser Vorgang sehr einfach gestrickt, da nur das entsprechende Dokument gelesen werden muss, welches den Blog-Eintrag beinhaltet. Allerdings ist das Ändern der Datensätze zeitaufwendiger, da dass komplette Dokument gespeichert werden muss. Ohne die Schemavorgabe in dokumentenorientierten Datenbanken erhalten die Entwickler mehr Flexibilität und es können die zeitintensiven Schemaänderungen bei großen Datenbanken vermieden werden. 7.1.4 Vor-/Nachteile Aufgrund des Prinzip der Schemafreiheit wurde die Schemaverantwortung komplett an die Entwickler übergeben und somit ist ein Umdenken der Entwickler notwendig. Die Abbildung von referentieller Integrität sowie Normalisierung können nicht abgebildet werden. Neben der vertikalen Skalierung wird eine horizontale Skalierung ermöglicht und es können alle zusammenhängenden Informationen innerhalb eines Dokuments abgebildet werden (Blog-Artikel, Wikiseite, ?). Einige dokumentenorientieren Datenbanken verwenden den MVCC-Mechanismus, um einen gleichzeitigen Zugriff auf denselben Datensatz zu ermöglichen, um somit mehr Zugriffe auf die Datensätze zu ermöglichen [35] [36]. Hohe Verfügbarkeiten sind realisierbar, da die Datenreplikationen in jedem Produkt der dokumentenorientierten Datenbanken vorhanden sind. Allerdings kann 7.1.2 Datenmodell 19 Migration_von_einem_relationalen_Datenbankmodell_zu_NoSQL eine Volltextsuche nur mittels Zusatzsoftware, wie zum Beispiel Apache Lucence ermöglicht werden. Wenig geeignet für Datensätze mit einem hohen Maß an Integrität, sondern eher geeignet für Anwendungen mit vielen Nutzern, hohe Verfügbarkeit und unstrukturierten Datensätzen. Innerhalb des CAP-Theorems lassen sich die dokumentenorientierten Datenbanken AP (Verfügbarkeit und Partitionierung) anzutreffen. 7.1.5 API Die Abfragemöglichkeiten variieren vom jeweils verwenden Datenbankprodukt, wobei die gängigsten Programmiersprachen von allen Produkten unterstützt werden. Beispielsweise bietet MongoDB eine API für eine Vielzahl von Programmiersprachen, zum Beispiel: Java, C++, C#, Erlang, Python, Ruby, PHP, uvm. [37]. Der Zugriff auf CouchDB erfolgt komplett über die REST-API und ermöglicht somit die Kommunikation mittels einfachen Webservices, welche auf Basis von HTTP angesprochen werden [38]. 7.1.6 Produkte Als die am weit verbreitetste dokumentenorientierte Datenbank gilt Lotus Notes von IBM. Damien Katz, Entwickler von Lotus Notes, hat 2005 begonnen, die CouchDB zu entwickeln, welche mittlerweile als Apache Project frei Verfügbar ist. Weiterhin gibt es u.a. noch MongoDB, Terrastore oder Riak, welche ebenfalls frei verfügbar sind. 7.2 Wide Column Store Die Architektur ?Wide Column Store?, im deutschsprachigen Raum auch unter dem Begriff spaltenorientiertes Datenbanksystem bekannt, speichert Daten zusammenhängender Einträge, im Gegensatz zu relationalen Datenbanksystemen, in Spalten. Folgend soll dieses Verhalten anhand eines Beispiels veranschaulicht werden.[39] In einer relationalen Datenbankarchitektur werden die Daten der zusammenhängenden Einträge wie folgt gespeichert[40]: ID Name Vorname Adresse 1 Name Vorname Straße1 2 Mustermann Hans Straße1 3 Musterfrau Anne Straße3 Tabelle 1: WideColumnStore - Relationale DBMS Anordnung von Daten In spaltenorientierten Datenbanksystemen wären die zueinander gehörigen Daten in Spalten angeordnet[41] [42]: ID Name Vorname Adresse 1 Name Vorname Straße1 7.1.4 Vor-/Nachteile 2 Mustermann Hans Straße2 3 Musterfrau Anne Straße3 20 Migration_von_einem_relationalen_Datenbankmodell_zu_NoSQL Tabelle 2: WideColumnStore - Anordnung von Daten 7.2.1 Allgemeiner Verwendungszweck Aufgrund der beschriebenen Eigenschaften eignen sich spaltenorientierte DBMS besonders für die Verarbeitung und Analyse großer Datenmengen, bei denen nur einzelne Felder der Datensätze berücksichtigt werden[43]. Spaltenorientierte Datenbanksysteme finden häufig in folgenden Bereichen Anwendung: • OLAP • Data-Warehouse • Suchmaschienen • Soziale Netzwerke • Logging 7.2.2 Datenmodell Die kleinste Einheit dieser Architektur ist die einzelne Column. Diese besteht aus einem eindeutigen Namen, Wert und Timestamp. Einzelne Columns werden in Column Families gruppiert wobei hier jede Zeile eindeutig über einen Schlüssel identifizierbar ist.[44] Abbildung 10: WideColumnStore Column Family Viele Produkte bieten hier die Freiheit aus beliebigen Columns einen Datensatz zu bilden. So ist es möglich, dass ein Datensatz aus Name und Vorname besteht, der Zweite innerhalb dieser Column Family aber eine weitere Column, z.B. Geburtsdatum, beinhaltet. So lassen sich neue Anforderungen bei neuen Datensätzen problemlos umsetzen. Die meisten Datenbankprodukte erweitern dieses Schema in der Dimension. So werden oft als höchste Gruppierungsebene Keyspaces bereitgestellt. Keyspaces sind vergleichbar mit Datenbanken aus dem Relationalen Datenbankmodell und gruppieren mehrere Column Families zu einer Einheit.[45] Je nach Produkt gibt es hier noch Erweiterungen. So stellt Cassandra eine Super Column und eine Super Column Family zur Verfügung. Eine Super Column enthält einen Namen und anstatt eines direkten Wertes eine Auflistung beliebiger Columns. Eine Super Column Family gruppiert eben diese Super Columns zu einer Einheit.[46] 7.2.3 Vergleich zu RDBMS Spaltenorientierte Datenbankmanagementsysteme stellen keine Foreignkeys zur Verfügung. Daher sind auch keine relationalen Operationen wie JOINs oder Ähnliches möglich.[47] Das oben beschriebene beispielhafte Datenbankbankmodell ließe sich hier wie folgt umsetzen: 7.2 Wide Column Store 21 Migration_von_einem_relationalen_Datenbankmodell_zu_NoSQL Abbildung 11: Umsetzung eines ER in Wide Column Store Da keine referenzielle Integrität vorhanden ist, obliegt es der Implementierung, also der zentralen Anwendungsschnittstelle, die Konsistenz zwischen einzelnen Beziehungspartnern sicherzustellen. Um das Ergebnis von relationalen Operatoren, also aggregierte Datenbestände, zu erhalten wird häufig empfohlen, Daten redundant zu Speichern. Es wäre also möglich, das Ergebnis solcher Abfragen in weiteren Tabellen, also Column Families, zu speichern. Auch dies müsste letztendlich in der Implementierung umgesetzt werden. Dies hätte jedoch den Vorteil, dass solche Abfragen sehr performant durchgeführt werden können, da hier letztendlich auf eine bestehende Tabelle zurückgegriffen wird. Dies ist unter dem Begriff ?Materialized View? bekannt.[48] 7.2.4 Vor-/Nachteile Aufgrund des oben beschriebenen Art zur Speicherung zusammenhängender Daten ergeben sich einige Vorteile. Es lassen sich so die Verarbeitung und Analyse einzelner Felder, also das Lesen und Schreiben einzelner Spalten mehrerer Datensätze, beschleunigen, da nur auf die Spalten zugegriffen werden muss, die tatsächlich benötigt werden und die Verarbeitung von unnötigen Informationen vermieden wird. Des Weiteren lassen sich die Werte der einzelnen Spalten gut komprimieren.[49]Nachteilig ist dieses Verfahren beim Schreiben vieler Datensätze, die aus mehreren Feldern bestehen. Auch die Suche von Datensätzen anhand von vielen Feldern könnte die Performance beeinträchtigen.[50] [51] Spaltenorientierte Datenbanksysteme bieten keine referenzielle Integrität (Fremdschlüssel). Daher sind relationale Operatoren über mehrere Column Families nicht möglich. Dies hat jedoch den Vorteil, dass sich Daten gut verteilen lassen. Innerhalb des CAP- Theorems sind spaltenorientierte DBMS unter den Punkten CP oder AP anzutreffen. 7.2.5 API Je nach Datenbankprodukt stehen unterschiedliche Abfragemöglichkeiten zur Verfügung. Häufig ist als Schnittstelle das Thrift Framework anzutreffen. In der Implementierung ließe sich auf Datensätze wie auf mehrdimensionales Array zugreifen: NameDerSuperColumn[Key][Column] Mitarbeiter[0001][Name] In vielen Produkten lassen sich mittlerweile aber auch Daten über eine SQL ähnliche Syntax ansprechen. 7.2.6 Produkte Seit den 80'er Jahren beschäftigt sich das Unternehmen Sybase mit dieser Architektur. Daraus entstand die erste Implementierung. Nach der Veröffentlichung von Google's BigTable Design sind mehrere Anbieter auf den Markt gedrungen. Einige der erfolgreicheren Implementierungen sind die OpenSource Produkte Hbase, Cassandra 7.2.3 Vergleich zu RDBMS 22 Migration_von_einem_relationalen_Datenbankmodell_zu_NoSQL und Hypertable. Aber auch kommerzielle Anbieter veröffentlichten nach und nach eigene Produkte. So hat Amazon das eigene Cloudportfolio um das Produkt ?Amazon SimpleDB? erweitert, welches als Webservice zur Verfügung steht. 7.3 Objektorientierte Datenbanken Relationale Datenbanksysteme sind sehr populär und die wahrscheinlich meist genutzte Form der Datenhaltung. Für die gängigen Probleme der Datenhaltung mögen sie ausreichend sein, doch sobald es darum geht, komplexe Datenstrukturen wie etwa multimediale Daten, CAD-Objekte oder firmenspezifische Eigenentwicklung in ein relationales System zu speichern, ist der Aufwand enorm[52], die Daten zu zerteilen und in die Relationen zu transformieren. So wird es immer komplizierter, den Durchblick zu behalten. Objektorientierte Programmiersprachen sind ein fester Bestandteil der Softwareentwicklung und für viele komplexe Projekte die Lösung[53]. Durch die Abstraktion der Dinge der natürlichen Welt in Objekte sind die Softwarelösungen leicht verständlich und anzuwenden[54]. Die wachsende Komplexität von Anwendungen wirkt sich auch auf die Datenhaltung aus. Auch mittels der Normalisierung lassen sich komplexe und vielschichtig vernetze Daten nur schwer und ungenügend in relationalen Datenbanken abbilden. Objektorientierte Datenbankmodelle könnten hier die Alternative sein[55], was folgend untersucht werden soll. 7.3.1 Allgemeiner Verwendungszweck Eine objektorientierte Datenbank stellt eine Alternative dar, wenn es darum geht, vielschichtig vernetzte Daten möglichst einfach und ohne großen Aufwand persistent aufzubewahren. Sie eignet sich besonders bei komplexen Datenstrukturen, welche in einem relationalem System in einer Vielzahl von Relationen aufgeteilt werden müsste[56][57]. Im Zeitalter der Navigationssysteme oder sozialen Netzwerke haben sich objektorientierte Datenbanken bereits bewährt, was der Fakt beweist, dass die Internetriesen ihre eigenen Datenhaltungssystem auf NoSQL?Basis entwickeln. So werden spezielle objektorientierte Datenbanken für die Identifizierung von Zusammenhängen zwischen Wikipediaeinträgen verwendet oder aber die Speicherung von Beziehungen von verschiedenen Individuen in einem sozialen Netzwerk.[58] 7.3.2 Datenmodell Abbildung 12: Ein Objekt Auto in Assoziation mit einem weiteren Objekt Rad, http://www.matthiasmaas.de/info_klasse10_oom.gif,23.05.2012 Den objektorientierten Datenbanken liegt das Modell der Objektorientierung vor. Es ist eine Abstraktion der realen Welt, was bedeutet, dass es keine klare Trennung zwischen Daten und Funktionen gibt[59]. Ein Objekt hat Eigenschaften(Daten) und Fähigkeiten(Funktionen) wie z.B. ein Mensch. Ein Mensch hat Eigenschaften wie seine Haarfarbe oder etwa seine Körpergröße. Zusätzlich hat er die Fähigkeiten, zu stehen, zu laufen und vieles mehr. Weiter sind Objekte in der Lage, mit einander zu kommunizieren, also Daten von anderen Objekten zu empfangen und natürlich Daten an andere Objekte zu senden.[60] 7.2.6 Produkte 23 Migration_von_einem_relationalen_Datenbankmodell_zu_NoSQL 7.3.3 Vergleich zu RDBMS Durch den objektorientierten Ansatz lassen sich menschliche Probleme mit Dingen der natürlichen Welt sehr gut für Menschen verständlich darstellen [61]. Durch den Sachverhalt der Verwendung von Objekten ist das auch die niedrigste Ebene. Im Vergleich zu einem RDBMS, bei dem die niedrigste Ebene das Atom oder auch das Attribut einer referenzierten Sache ist. Das Objekt ist die Grundeinheit, welchem Attribute, die wiederum Objekte sein können, eindeutig ohne die Verwendung von Schlüsseln zugeordnet sind. Zusätzlich lassen sich in Ihren Klassen Methoden speichern, somit ist der Umgang für jedes Objekt gegeben. 7.3.4 Vor-/Nachteile Ein starker Vorteil ist die Verständlichkeit, denn in Zeiten wachsender Daten werden relationale Schemen komplexer, verschachtelter und vernetzter. Das objektorientierte Datenmodell hilft dem Menschen, die Datenhaltung besser zu verstehen, da das Konzept an die natürliche Welt angepasst ist.[62] Bei Benutzung einer objektorientierten Sprache kann es nicht zu einem ?Impedance Missmatch? kommen. Abbildung 13: Abbildung 1: Der Impedance Missmatch links und rechts die barrierefreie Importierung eines Objektes in eine objektorientierte Datenbank http://www.db4o.com/s/csharpdb.aspx, 26.07.2012 Da die Speicherung in einem relationalem System in Relationen erfolgt und man in einer objektorientierten Sprache Objekte verwendet, müssen die Daten beim Auslesen aufwendig gesucht und in eine geeignete Struktur transformiert werden. Ebenso müssen die Teile eines Objektes beim Speichern in ein relationales System zerteilt und verteilt werden. Bei der Nutzung einer objektorientierten Datenbank entfallen all diese aufwendigen Schritte.[63] Für die parallele Nutzung einer objektorientierten Sprache gibt es weitere Vorzüge wie die Wiederverwendbarkeit, denn viele Programmiersprachen bieten Betriebssystem unabhängige Laufzeitumgebungen an, welche also auch die Datenbank unabhängig machen und somit ein betriebssystemunabhängigen Verbund aus Programm und Datenbank möglich macht[64]. Das Datenmodell der objektorientierten Programmierung bietet eine hohe Flexibilität in der Erweiterbarkeit. Objekte haben zur Zeit ihres Entwurfs eine bestimmte Anzahl an Daten und Funktionen, welche sich im Laufe der Zeit ändern oder erweitern können[65]. Trotzdem können Objekte derselben Sache mit unterschiedlichen Daten und Funktionen nebeneinander existieren, während das in einem relationalen System durch Filter im Design viel schwieriger ist und somit erheblich unflexibler[66]. Weiterhin entfällt die Kontrolle der Schlüssel. Durch die natürliche Vernetzung von Objekten ist der Einsatz von Fremdenschlüsseln nicht nötig. Zusätzliches wird jedes Objekt wird durch die Datenbank mit einer eindeutigen Objektnummer versehen, anhand dieser man das Objekt immer eindeutig identifizieren kann, nicht der Entwickler kümmert sich um die Schlüssel, sondern die Datenbank[67]. Auch das Entwickeln von Tabellen und Verbindungstabellen entfällt, da dieser Architektur das Datenmodell der objektorientiert Programmierung zu Grunde liegt. Somit sind komplexe Abbildungen speicherbar, denn durch das flexible Gestalten von Klassen und die natürlichen Verbindungen von Objekten lassen sich komplizierte Abbildungen sehr leicht und unkompliziert speichern. Das hat zur Folge, dass kein Wissen in SQL vorausgesetzt wird und Schulungsmaßnahmen für SQL entfallen und können somit eingespart und an anderen Stellen sinnvoller eingesetzt werden.Nach Recherchen der gängigen Vertreter der OODB ist eine OODB mit wenig Logik ausgestattet[68] und bietet ihre Vorteile eher in ihrer Erweiterbarkeit und demnach wird viel Logik zur Datenhaltung in der Anwendung selber gespeichert. So verschiebt dich die Logik der Datenhaltung aus der Datenschicht in die Logikschicht der Anwendung, was einen erheblichen Nachteil für die Anwendungsentwicklung in der Entwicklungsphase darstellen kann und der Aufwand von Planung stark erhöht wird[69]. So muss gewährleistet, dass der Umgang mit einer objektorientierten Sprache und die objektorientierte Philosophie bekannt ist, wenn das Team, welches an dem Projekt arbeitet wenig bis gar keine Erfahrung mit OOP 7.3.3 Vergleich zu RDBMS 24 Migration_von_einem_relationalen_Datenbankmodell_zu_NoSQL hat, und das eigentliche Projekt ebenfalls nicht in einer OOP-Sprache verfasst ist, sollte eine OODB nicht verwendet werden. Ebenfalls ist zu beachten, dass je nach Klassenaufbau viel Speicherbedarf für Leerstellen besteht, sobald eine Klasse über viele Attribute verfügen kann, diese aber nicht erfüllt sein müssen, dann wird natürlich auch für die Leerstellen eine gewisser Speicherbedarf benötigt, was sich je nach Projektgröße stark summieren kann. 7.3.5 API Durch das Datenmodell der objektorientierten Programmierung lassen sich Klassen in der Regel leicht durch einen Parser in eine andere Typklasse umwandeln. Alle untersuchten OODB bieten in ihrer Sprach-API entsprechende Mechanismen.[70] 7.3.6 Produkte db4O - http://www.db4o.com/ ObjectDB - http://www.objectdb.com/ Neo4J ?http://www.objectdb.com/ 7.4 Architektur-/Datenbankevaluierung Objektorientierte Datenbanken haben den Vorteil, dass die Abstraktion zwischen Datenbankmodell und Programmiersprache entfällt. Entwickler müssen sich somit nicht mehr mit einem Datenbankmodell oder die Frage, wie Datenstrukturen des Programms in und aus einer Datenbank übertragen werden können, auseinandersetzen. Beziehungen zwischen Entitäten können direkt über die Objektorientierte Programmiersprache definiert werden und werden entsprechend in der Datenbank hinterlegt. Auch die eingesetzte Programmiersprache wird von vielen Produkten unterstützt. Dennoch ist ein Nachteil die Skalierbarkeit. Objektorientierte Datenbanken sind aufgrund ihrer Art Beziehungen darzustellen eher im Bereich CA des CAP-Theorems anzutreffen. Es bliebe also des selbe Problem, welches durch das momentan eingesetzten Datenbankmanagementsystem besteht. Um diese Architektur sinnvoll anzubinden, wäre eine Änderung der Schnittstelle notwendig, welche aufgrund der gegebenen Problemstellung nicht möglich ist. Ferner entsprechen die gegebenen Möglichkeiten der Skalierung nicht den gewünschten Anforderungen der Problemstellung. Dokumentenorientierte DBMS haben den Vorteil, dass Beziehungen einer Entität zusammen mit der Entität in einer Datei gespeichert werden. Dadurch lassen sich die Daten gut Skalieren. Diese Datenbankarchitektur ist innerhalb des CAP Theorem in den Bereichen CP oder AP anzutreffen. Dennoch bilden die dokumentenorientierten DBMS die in der Problembeschreibung erläuterte Datenstruktur ungenügend ab. Dokumentenorientierte DBMS sind aufgrund ihrer Architektur eher auf 1:N Beziehungen ausgelegt. N:M Beziehungen und komplexere Referenzen lassen sich schwer konsistent halten da das Design der Datenbanken eher auf wenige Dokumente mit direkten 1:1-Beziehungen und 1:N-Beziehungen beruht. Um die komplette gegebene Datenstruktur für den direkten Datenaustausch abbilden zu können, würde das Datenbankdesign viele Referenzen enthalten, deren Integrität zum Teil durch die Implementierung gewährleistet werden müsste. Daher scheidet auch diese Architektur für eine nähere Betrachtung aus. Spaltenorientierte DBMS bieten einen hohen Grad an Flexibilität bezogen auf die Datenstruktur. Auch ist das Resultat des Outputs der Datenbank, also ein Ergebnis in Form einer Tabelle, vergleichbar mit denen der verwendeten Datenbank. Eine eventuelle Umstellung würde also daher weniger Aufwand nach sich ziehen. Diese Architektur ist im CAP Spektrum in den Bereichen CP oder AP anzutreffen. Der Fokus liegt auch hier in der Partitionierung der Daten. Spaltenorientierte DBMS bieten keine referenzielle Integrität. Derartige Anforderungen 7.3.4 Vor-/Nachteile 25 Migration_von_einem_relationalen_Datenbankmodell_zu_NoSQL müssten daher über die Schnittstelle umgesetzt werden. Da jedoch innerhalb der bestehenden Lösung kaum Fremdschlüssel verwendet werden, stellt dies aber kein Problem dar. Die Eigenschaften der spaltenorientierten DBMS eignen sich von den drei vorgestellten Architekturen am besten zur Lösung der Problemstellung. 8 Auswertung Verschiedene DBMS wurden untersucht und ausgewertet, daraus resultierten potentielle Architekturen, welche näher beleuchtet und verglichen wurden, um daraus bezüglich der Problemstellung eine geeignete Architektur zu finden. Nachdem potentielle Architekturen untersucht wurden und die Wide Column Stores die besten Voraussetzungen bieten, wurden gängige Vertreter dieser Architektur untersucht und verglichen. Nach einigen Recherchen ergaben sich als Repräsentanten der WCS: HBase, Hypertable und Cassandra. Der Vergleich erfolgte über eine Featurematrix. 8.1 Die Featurematrix Die Featurematrix ist das Herzstück des Evaluierungsprozesses. Sie besteht aus fünf Spalten. In Spalte eins sind die Kriterien, die untersucht wurden, aufgeführt. In den Spalten zwei bis vier sind die jeweiligen Vertreter der WCS zu sehen, welche in jeder Zeile für die Erfüllung eines Kriteriums eine ?1? beinhalten. In der letzten Spalte steht die Gewichtung eines Kriteriums. Die Auswertung erfolgt über ein Punktesystem und ganz klassisch gewinnt der Vertreter mit den meisten Punkten. Die Vergabe der Gewichtungen erfolgt nach Absprache und unter Bezug auf die Problemstellung. Kriterien, welche für die Problemstellung eine hohe Relevanz aufweisen, werden mit einer höheren Gewichtung versehen als sekundäre Kriterien. Jeder Vertreter wird pro Kriterienabschnitt wie z.B. Lizenzmodell oder Support in einer Summe und letztendlich durch einen Score zusammengefasst. Das Einteilen der Kriterienabschnitte und der einzelnen Kriterien ist sehr zeitaufwendig und natürlich immer mit einem gewissen subjektiven Anteil behaftet. Nachfolgend wird die Featurematrix aufgelistet. Hbase Hypertable Cassandra Gewicht Lizenzmodell - OpenSource - Kommerziell Summe Score ACID/BASE-Spektrum - Atomic at Row Level - Commitlog - MVCC - Archivierung - Turnable consistency - Strict Consistency - Eventual Consistency Summe Score 8 Auswertung 1 0,800 0,064 1 1 1,000 0,080 1 1 1,000 0,080 0,800 0,200 0,080 0,080 1 1 1 1 1 1 1 1 1 1 0,100 0,100 0,100 0,050 0,300 0,300 0,050 0,200 0,200 1 1 0,650 0,130 0,650 0,130 1 1 1 0,850 0,170 26 Migration_von_einem_relationalen_Datenbankmodell_zu_NoSQL Datentypen String Integer Boolean BigInteger (Int64) Datetime Text/Long Text Byte Double Summe Score Support 8/5 - Englisch 8/5 - Deutsch 24/7 - Englisch 24/7 - Deutsch Summe Score Dokumentation - Hersteller - Community - Literatur Summe Score API - C# Summe Score Skalierbarkeit - Multimaster - Master/Slave - Auto Sharding Summe Score Umgebung Windows Linux Summe Score Administration Monitoring 8.1 Die Featurematrix 1 1 1 1 1 1 1 1 1,000 0,040 1 1 0,300 0,021 1 0,125 0,005 1 1 1 1 1,000 0,070 1 1 1 1 1 1 1 1 1,000 0,040 0,125 0,125 0,125 0,125 0,125 0,125 0,125 0,125 0,040 0,040 1 0,100 0,200 0,200 0,500 0,070 0,070 1 0,300 0,021 1 1 1 1,000 0,100 1 1 1 0,500 0,050 0,750 0,075 0,500 0,250 0,250 0,100 0,100 1 1,000 0,050 1 1,000 0,050 1 1,000 0,050 0,050 0,050 0,050 1 1 1 1,000 0,200 1 1 1,000 0,200 1 1,000 0,200 0,500 0,500 0,500 0,200 0,200 1 0,500 0,005 1 1 1,000 0,010 1 1 1,000 0,010 0,500 0,500 0,010 0,010 1 1 1 1,000 27 Migration_von_einem_relationalen_Datenbankmodell_zu_NoSQL Summe Score 1,000 0,100 1,000 0,100 1,000 0,100 Programmiersprache der Implementierung Java C++ Java Erweiterbarkeit - Stored Procedures / Trigger Summe Score 1 1,000 0,050 Abfragemöglichkeiten - MapReduce - SQL ähnlich - Volltext - RegEx Summe Score Summe Tabelle 3: Featurematrix 1 0,250 0,025 0,785 0,000 0,000 0,000 1 1 1 1 1 0,750 0,075 0,770 0,500 0,050 0,796 0,100 0,100 1,000 0,050 0,050 0,250 0,250 0,250 0,250 0,100 0,100 1,000 8.2 Lizenzmodell Hbase Hypertable Cassandra Gewicht Lizenzmodell - OpenSource 1 1 1 - Kommerziell 1 1 Summe 0,800 1,000 1,000 Score 0,064 0,080 0,080 Tabelle 4: Auswertung der Lizenzmodelle 0,800 0,200 0,080 0,080 In der Softwareherstellung ist es üblich, das Rad nicht ständig neu zu erfinden, so werden also schon fertige Komponenten in ein Projekt integriert, jedoch ist es wichtig, für den späteren Vertrieb die Bedingungen des Lizenzvertrages jeder integrierten Komponente zu kennen. Dabei wird für die Untersuchung zwischen OpenSource (offener Quellen) und kommerziellen Vertrieb unterschieden. Mit Bezug auf die Umstände ausgehend der Problemstellung wird das Lizenzmodell OpenSource vorausgesetzt, um einen unkomplizierten und flüssigen Vertrieb zu gewährleisten. Alle drei Vertreter erfüllen diese Anforderung, doch HBase bietet im Gegensatz zu Cassandra und Hypertable nur das Lizenzmodell OpenSource an, was objektiv weniger ist als die beiden anderen Vertreter. Somit erfüllen Hypertable und Cassandra zusätzliche Eigenschaften im Abschnitt ?Lizenzmodell?, was mit einer größeren Flexibilität im Vertrieb verbunden ist. 8.3 ACID/BASE ? Spektrum Hbase Hypertable Cassandra Gewicht ACID/BASE-Spektrum 8.2 Lizenzmodell 28 Migration_von_einem_relationalen_Datenbankmodell_zu_NoSQL - Atomic at Row Level 1 1 1 - Commitlog 1 1 1 - MVCC 1 1 - Archivierung 1 1 - Turnable consistency 1 - Strict Consistency 1 1 1 - Eventual Consistency 1 Summe 0,650 0,650 0,850 Score 0,130 0,130 0,170 Tabelle 5: Auswertung des ACID/BASE-Spektrums 0,100 0,100 0,100 0,050 0,300 0,300 0,050 0,200 0,200 In der Datenspeicherung ist es enorm wichtig, welchen Ansatz das Medium der Speicherung verfolgt. Wie im Abschnitt zu ACID/BASE bereits geklärt, kann ein Medium nicht alle Ansätze zu 100% gleichzeitig erfüllen, somit müssen die Ansätze der Produkte bezüglich der Problemstellung untersucht werden. Für die Auswertung ist hervorzuheben, das Cassandra mit ihrer Eigenschaft, sich auf die Erfüllung des Spektrums, variabel auf den Sinn und Zweck des Produktes einzustellen, am besten in dieser Kategorie abschneidet. 8.4 Datentypen Hbase Hypertable Cassandra Gewicht Datentypen String 1 1 Integer 1 Boolean 1 BigInteger (Int64) 1 Datetime 1 Text/Long Text 1 Byte 1 Double 1 Summe 1,000 0,125 Score 0,040 0,005 Tabelle 6: Auswertung der Datentypen 1 1 1 1 1 1 1 1 1,000 0,040 0,125 0,125 0,125 0,125 0,125 0,125 0,125 0,125 0,040 0,040 Für die Problemstellung ist es wichtig, den genauen Datentyp einer gespeicherten Information zu kennen, somit entfällt das Parsen von einem Datentyp zu einem anderen und es gibt weniger Komplikationen in der Bedeutung der einzelnen gespeicherten Werte. HBase und Cassandra unterstützen alle relevanten Datentypen, somit erfüllen sie alle Anforderungen im Gegensatz zu Hypertable. 8.3 ACID/BASE ? Spektrum 29 Migration_von_einem_relationalen_Datenbankmodell_zu_NoSQL 8.5 Support Hbase Hypertable Cassandra Gewicht Support 8/5 - Englisch 1 1 8/5 - Deutsch 1 24/7 - Englisch 1 1 24/7 - Deutsch 1 Summe 0,300 1,000 Score 0,021 0,070 Tabelle 7: Auswertung des Supports 1 1 0,300 0,021 0,100 0,200 0,200 0,500 0,070 0,070 Sofern man nicht über geschultes Personal verfügt, ist ein gut verfügbarer Support enorm wichtig, sowohl für Hersteller, also auch für Nutzer. Für die Problemstellung sind die Formen acht Stunden an fünf Tagen in der Woche und Vollzeit 24 Stunden an sieben Tagen die Woche relevant. Um hier eine gewisse Flexibilität aufzuweisen, sind der Support sowohl in deutscher als auch in englischer Sprache akzeptabel. HBase und Cassandra bieten aufgrund ihrer noch geringen Popularität nur einen Support in englischer Sprache an, im Gegensatz zu Hypertable, welche alle Supportformen unterstützt, welche für den deutschen Markt relevant sind. 8.6 Dokumentation Hbase Hypertable Cassandra Gewicht Dokumentation - Hersteller 1 1 1 - Community 1 1 - Literatur 1 Summe 1,000 0,500 0,750 Score 0,100 0,050 0,075 Tabelle 8: Auswertung der Dokumentationen 0,500 0,250 0,250 0,100 0,100 Herstellerinformationen, Erfahrungsberichte und professionelle Anwendertipps sowie Rezensionen sind für den Einsatz neuer Technologien wichtig und sogar unverzichtbar. Es wird in der Herkunft der Informationen unterschieden, bereitgestellt vom Hersteller, den Communitys oder aus der Literatur. Dabei wurde die Fülle der Informationen der Hersteller untersucht, was bei allen Vertretern ausreichend ist. In einschlägigen Gruppenportalen findet man Tests, Vergleiche und Nutzertipps von HBase und Cassandra, zusätzlich bietet HBase eine große Auswahl an Fachliteratur. HBase bietet ein umfangreiches Angebot, sich ausgiebig über das Produkt zu informieren. 8.5 Support 30 Migration_von_einem_relationalen_Datenbankmodell_zu_NoSQL 8.7 API Hbase Hypertable Cassandra Gewicht API - C# 1 1 1 Summe 1,000 1,000 1,000 Score 0,050 0,050 0,050 Tabelle 9: Auswertung der API 0,050 0,050 0,050 Ausgehend von der Problemstellung ist es erforderlich, dass die Produktapi eine Schnittstelle zu C# aufweisen muss. HBase, Hypertable und Cassandra bieten diese Schnittstelle an. 8.8 Skalierbarkeit Hbase Hypertable Cassandra Gewicht Skalierbarkeit - Multimaster 1 - Master/Slave 1 1 - Auto Sharding 1 1 1 Summe 1,000 1,000 1,000 Score 0,200 0,200 0,200 Tabelle 10: Auswertung der Skalierbarkeit 0,500 0,500 0,500 0,200 0,200 In Zeiten steigender Anforderungen ist das Verteilen von Systemen enorm wichtig. Alle untersuchten Produkte bieten ein Multimaster- oder Masterslavesystem. Zusätzlich dazu bieten alle drei Produkte einen Autoshardingmechanismus. 8.9 Umgebung Hbase Hypertable Cassandra Gewicht Umgebung Windows 1 1 Linux 1 1 1 Summe 0,500 1,000 1,000 Score 0,005 0,010 0,010 Tabelle 11: Auswertung der Umgebung 0,500 0,500 0,010 0,010 Für die Problemstellung ist es wichtig, dass die untersuchten Produkte flexibel im Zusammenspiel mit dem Betriebssystem sind. Somit müssen Kunden und Hersteller sich nicht festlegen oder umstellen. HBase bietet bisweilen nur vollständige Unterstützung für Linuxsysteme. Cassandra und Hypertable laufen auf allen gängigen 8.7 API 31 Migration_von_einem_relationalen_Datenbankmodell_zu_NoSQL Systemen, was eine höhere Flexibilität beinhaltet. 8.10 Administration Hbase Hypertable Cassandra Gewicht Administration Monitoring 1 1 1 1,000 Summe 1,000 1,000 1,000 0,100 Score 0,100 0,100 0,100 0,100 Tabelle 12: Auswertung der Administrationskomponenten In Zeiten des Internets und der Globalisierung ist die Überwachung und Wartung des Produktes von verschiedenen Standorten ein wichtiger Teil des Serviceangebot eines Softwareunternehmen. Alle drei untersuchten Produkte verfügen über Mechanismen für das Monitoring. 8.11 Erweiterbarkeit Hbase Hypertable Cassandra Gewicht Erweiterbarkeit - Stored Procedures / Trigger 1 Summe 1,000 Score 0,050 0,000 Tabelle 13: Auswertung der Erweiterbarkeit 1,000 0,050 0,050 0,000 0,000 Bei der Benutzung von Datenbanksystem kann die Möglichkeit, die internen Funktionen einer Datenbank zu erweitern,viele Vorteile bringen. HBase ist das einzige untersuchte Produkt, welches die Möglichkeit bietet, Funktionen hinzuzufügen oder zu erweitern. 8.12 Abfragemöglichkeiten Hbase Hypertable Cassandra Gewicht Abfragemöglichkeiten - MapReduce 1 1 1 - SQL ähnlich 1 1 - Volltext - RegEx 1 Summe 0,250 0,750 0,500 Score 0,025 0,075 0,050 Tabelle 14: Auswertung der Abfragemöglichkeiten 8.9 Umgebung 0,250 0,250 0,250 0,250 0,100 0,100 32 Migration_von_einem_relationalen_Datenbankmodell_zu_NoSQL Die untersuchten Produkte bieten verschiedene Formen von Abfragemöglichkeiten, wobei alle untersuchten Produkte das MapReduceverfahrne unterstützen. Doch Hypertable unterstützt daneben eine SQL ähnliche Abfragesprache sowie eine Suche mittels regular Expressions. So bietet Hypertable die meisten Abfragemöglichekeiten. 8.13 Auswertung Abbildung 14: Balkendiagramm für die Auswertung der Featurematrix Im direkten Vergleich bietet Cassandra die meisten Vorteile und kommt als Lösung für die Problemstellung in Betracht. Doch zusammengefasst liegen alle Produkte nach Punkten dich bei einander und unterscheiden sich nur in sehr speziellen Bereichen. Das ist begründet durch die Tatsache, dass alle drei untersuchten Produkte der selben Architektur angehören. 9 Fazit Zusammenfassend lässt sich sagen, dass sich das Datenbankmanagementsystem Cassandra für die gesamte Problemstellung am besten eignet. Während des Evaluierungsprozesses hat sich herausgestellt, dass der Aufwand aufgrund der Fülle der unterschiedlichsten Datenbankarchitekturen und Produkte nicht zu unterschätzen ist. Es ist jedoch zu beachten, dass sich das aus der Evaluierung hervorgegangene Produkt Cassandra für die oben beschriebene Problemstellung eignet und sich nicht automatisch auf ein anderes Problem übertragen lässt. Unter dem Begriff NoSQL existieren viele unterschiedliche Datenbanksysteme die jeweils ihre Vor- und Nachteile haben. Es ist also erforderlich, ein geeignetes System bezogen auf die Individuelle Probleme zu ermitteln. Als Schwierigkeit erwies sich die Ausgangssituation mit einer Komponente, die als Schnittstelle für den Datenaustausch zwischen Datenbank und beliebigen Applikationen dient und die unterschiedlichen Datenkategorien und deren Anforderungen innerhalb des CAP Theorems. Die Entscheidung über ein geeignetes DBMS ist von den CAP Abwägungen abhängig. Generell haben NoSQL-Datenbanken die Frage aufgeworfen, ob eine strikte Konsistenz, wie sie bei RDBMS gegeben ist, überhaupt für alle Datenkategorien notwendig sind. Es empfiehlt sich, so wie hier vorgestellt, ausgehend von der Problemstellung aus dem großen Fundus von unterschiedlichsten Datenbanksystemen das geeignetste Produkt zu ermitteln. Letztendlich ist zu erwähnen, dass NoSQL-Datenbanken nicht automatisch Relationale Datenbanksysteme ablösen können. Jedes System hat seine Vor- und Nachteile und es obliegt den Entwicklern ein geeignetes System aus dieser Vielzahl von Datenbankmanagementsystemen auszuwählen. So kann es auch sinnvoll sein, an bestehenden Lösungen festzuhalten. Aufgrund der möglichen Eigenschaften, z.B. Skalierbarkeit, Performance, lohnt sich jedoch die Prüfung und gegebenenfalls eine Teilmigration. 9.1 Evaluierungsphase Innerhalb der Evaluierungsphase ist es wichtig den roten Pfad sowie den Bezug zur Motivation und Problemstellung nicht zu verlieren. Mittels immer feiner werdenden Filter während der Evaluierungsphase, 9 Fazit 33 Migration_von_einem_relationalen_Datenbankmodell_zu_NoSQL konnte schlussendlich, bezogen auf die Problemstellung ein passendes NoSQL-Produkt festgestellt. Diese Herangehensweise hat sich während der Fallstudie als äußerst praktikabel erwiesen und kann für weitere Evaluierungskonzept empfohlen werden. 9.2 Wirtschaftlichkeit Ein Wechsel ist mit Kosten verbunden. Dazu muss der Umstieg oder das Integrieren eines neuen DBMS grob in drei Abschnitte gegliedert werden, Konzeption, Einführung und zuletzt die Wartung. 1. Konzeption Die Informationen über NoSQL sind vielfältig. Von Fachliteratur bis Benutzerwertungen sind alle Arten an Informationsquellen vertreten. Für ein Team, welches eine Benutzung eines DBMS vorbereiten soll, müssen folgende Ressourcen zur Verfügung stehen: Personal, Kapital und Zeit. Diese Arbeit beschäftigt sich hauptsächlich mit dem Evaluierungsprozess, dafür mussten viele Informationen gesammelt, aufbereitet, verarbeitet und ausgewertet werden. Es muss also geschultes Personal für diesen Prozess eingestellt, oder vorhandenes Personal muss geschult werden, wofür ebenfalls wieder Kapital und Zeit benötigt wird. Am Ende der Konzeptionsphase ist nicht einmal gesichert, dass die Integration überhaupt stattfinden wird. 1. Einführung Das Konzept, welches lange geplant und finanziert wurde, wird nun in die Entwicklungsprozesse integriert. Schnittstellen müssen geschaffen werden, die Entwicklung muss mit dem neuen Produkt neu verschmolzen, die Entwicklungsprozesse müssen bezüglich der Integration des neuen DBMS angepasst werden. Diese Abläufe müssen wieder geplant, durchgeführt und überwacht werden. Dafür werden wieder Ressourcen in Form von Personal, Kapital und Zeit benötigt. 1. Wartung Das neue Produkt muss selbstverständlich kontrolliert und gewartet werden, was geschultes Personal oder den Einsatz von Fremdfirmen erfordert. Man benötigt viel Zeit und man darf die Höhe der aufzubringen Ressourcen für eine Integration des neuen Produktes nicht unterschätzen, dieser Tatsache muss man sich bewusst sein und bereit sein, die erforderlichen Ressourcen zu investieren. 9.3 Ausblick NoSQL-Datenbanken sind keine Eierlegendenwollmichsäue sondern entfalten ihre Stärken aufgrund ihrer Spezialisierung. Aus diesem Grund sollte man ohne die Complexity Costs zu vernachlässigen immer einen Architekturmix in Betracht ziehen. Deshalb ist es ökonomisch sinnvoll, nur Bereiche umzustellen die auch einen 9.1 Evaluierungsphase 34 Migration_von_einem_relationalen_Datenbankmodell_zu_NoSQL entsprechenden Gewinn oder Leistungszuwachs erwarten lassen. So kann man z.B. das Caching in eine Key-Value Datenbank auslagern um einen Geschwindigkeitszuwachs zu erhalten oder zusammenhängende Datensätze wir z.B. Belege aus der Warenwirtschaft in einer Dokumentenorientierten Datenbank zu archivieren. Oft macht es jedoch auch Sinn, wie bei Businessdaten diese in Relationalen Datenbanken zu belassen insbesondere dann wenn Ihre natürliche Darstellung bereits in Tabellenform ist. ?Wer neue Heilmittel scheut, muss alte Übel dulden.[71]? 10 Fußnoten 1. ? Facebook (2012) 2. ? Vgl. EMC Corporation (2012) 3. ? Central Intelligence Agency (2012) [3] 4. ? Vgl. EMC Corporation (2012) 5. ? Vgl. Wallroth, S. (2007) 6. ? Vgl. Wallroth, S. (2007) 7. ? Vgl. Wallroth, S. (2007) 8. ? Vgl. Rotem-Gal-Oz,A. (2012) 9. ? Vgl. Elmasri, R. et al. (2010) S.2 10. ? Vgl. Elmasri, R. et al. (2010) S.729 11. ? Nach Süß,N. et al. (2012) 12. ? Vgl. Elmasri, R. et al. (2010) S.971 13. ? Vgl. Vogels, W. (2012) 14. ? Vgl. Brewer, E. (2000) 15. ? Vgl. Gilbert, et. al. S. (2002) 16. ? Vgl. Edlich, et. al. (2010) S. 32 17. ? Vgl. Browne, J. (2009) 18. ? Edlich, et. al. (2010) S. 32 19. ? Edlich, et. al. (2010) S. 32 20. ? Vgl. Vogels, W. (2012) 21. ? Vgl. Brewer, S. 22. ? Edlich, et. al. (2010) S. 31 23. ? Vgl. Edlich, et. al. (2010) S. 56 24. ? Vgl. Faeskorn-Woyke, H. (2012) 25. ? Vgl. Edlich, et. al. (2010) S. 54 26. ? Vgl. Edlich, et. al. (2010) S. 57 27. ? Vgl. Edlich, et. al. (2010) S. 58 28. ? Vgl. Sheety,J. (2010) 29. ? Vgl. Edlich, et. al. (2010) S. 59 30. ? Vgl. TEDIC GmbH (2010) 31. ? Vgl. Schnelle,J. (2010) 32. ? Vgl. Edlich, et. al. (2010),S.116 33. ? Vgl. Tiwari,S. (2011),S.18 34. ? CouchDB (2012) 35. ? Vgl. Bertelsmeier, B. (2012) 36. ? Vgl. Gull, C. (2011), S.21 37. ? Vgl. MongoDB (2012) 10 Fußnoten 35 Migration_von_einem_relationalen_Datenbankmodell_zu_NoSQL 38. ? Vgl. CouchDB (2012) 39. ? Vlg. Edlich, et. al. (2010), S. 53 40. ? Vgl. Geisler, F. (2006), S.62. 41. ? Vgl. Faeskorn-Woyke, H. (2011) 42. ? Vlg. Edlich, et. al. (2010), S. 53 43. ? Vgl. Faeskorn-Woyke, H. (2011) 44. ? Vgl. Faeskorn-Woyke, H. (2011) 45. ? Vgl. Faeskorn-Woyke, H. (2011) 46. ? Vgl. Faeskorn-Woyke, H. (2011) 47. ? Vgl. Wolff, E. & Spichale, K. (2012), S. 30 48. ? Vgl. Grinev, M. (2010) 49. ? Vlg. Edlich, et. al. (2010), S. 53 50. ? Vlg. Edlich, et. al. (2010), S. 53 51. ? Vgl. Faeskorn-Woyke, H. (2011) 52. ? Vgl. Rosenberger, Carl (2007) S.8 53. ? Vgl. Göers, Jutta (1995) 54. ? Vgl. Kersken, Sascha (2008) S. 447 55. ? Vgl. Grehan, Rick (2007) S.1 56. ? Vgl. db4objects, Inc. (2007) S.1 57. ? Vgl. Neumann, Alexander (2011) S. 2 58. ? Vgl. Neumann, Alexander (2011) S. 2 59. ? Vgl. Lemay, et. al. (2001) S. 60ff 60. ? Vgl. Lemay, et. al. (2001) S. 60ff 61. ? Vgl. Lemay, et. al. (2001) S. 60ff 62. ? Vgl. Lemay, et. al. S. 60ff 63. ? Vgl. db4objects, Inc. (2007) S.1 64. ? Vgl. db4objects, Inc. (2007) S.6 65. ? Vgl. Bloch, Joshua (2005) S. 39 66. ? Vgl. Grehan, Rick (2007) S. 12 67. ? Vgl. Brenner, Ina (2007) S. 24 68. ? Vgl. db4objects, Inc. (2007) S.5 69. ? Vgl. db4objects, Inc. (2007) S.3 70. ? Vgl. db4objects, Inc. (2007) S.3 71. ? Francis Bacon (1561-1626) - Philosoph 11 Literatur- und Quellenverzeichnis Kurzverweis Facebook (2012) EMC Corporation (2012) Central Intelligence Agency (2012) Wallroth, S. (2007) Quelle Facebook 2012: Key Facts - Facebook News. URL:http://newsroom.fb.com/content/default.aspx?NewsA EMC Corporation 2012: Digital Universe Study. URL:http://germany.emc.com/leadership/programs/dig Central Intelligence Agency 2012: CIA - Factbook. URL:https://www.cia.gov/library/publications/the-w 06.2012. Wallroth, S. 2007: Das uneindeutig unklare Duo: Horizontales Skalieren und Vertikales Skalieren. URL:http://habacht.blogspot.de/2007/11/das-uneindeutig-unklare-duo-scale-out.html , Abruf am 08.201 Rotem-Gal-Oz,A. 2012: Fallacies of Distributed Computing Explained. URL:, Abruf am 08.2012. 11 Literatur- und Quellenverzeichnis 36 Migration_von_einem_relationalen_Datenbankmodell_zu_NoSQL Rotem-Gal-Oz,A. (2012) Elmasri, R. et al. Elmasri, R. & Navathe,B. (2010): Database Systems, 6th ed., Global ed. 2010.. Aufl., Boston (USA) 201 (2010) Süß,N. et al. Süess,N. & Vollenweider,M. 2012: CAP Theorem, ACID & BASE . (2012) URL:http://web.fhnw.ch/plattformen/mvdbs/modulunterlagen/nosql/cap-theorem-acid-base, Abruf am 0 Vogels, W. Vogels, W. 2012: Eventually Consistent - Revisited. URL:http://www.allthingsdistributed.com/2008/12 (2012) 08.2012. Brewer, E. Brewer, E. 2000: Towards Robust Distributed Systems. URL:Towards Robust Distributed Systems, Abr (2000) Gilbert, et. al. S. Gilbert, S. & Lynch, N. 2002: Brewer's Conjeture and the Feasibility of Consistent, Available, Partition(2002) URL:http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.20.1495&rep=rep1&type=pdf, Abruf am Edlich, et. al. Edlich, S. & Friedland, A. & Hampe, J. & Brauer, B. (2010): NoSQL - Einstieg in die Welt nichtrelation (2010) 2010 Browne, J. Brown, J. 2009: Brewer's CAP Theorem. URL:http://www.julianbrowne.com/article/viewer/brewers-cap (2009) Faeskorn-Woyke, Faeskorn-Woyke, H. 2012: MVCC - Multiversion Concurrency Control. URL:http://wikis.gm.fh-koeln. H. (2012) 05.12. Sheety,J. (2010) Sheety,J. 2010: Why Vector Clocks Are Hard. URL:http://basho.com/blog/technical/2010/04/05/why-ve TEDIC GmbH 2010: Datenmodelle und Einsatz dokumentorientierter Datenbanken. TEDIC GmbH URL:http://tedic.de/en/technology/database/306-datenmodelle-und-einsatz-dokumentorientierter-datenb (2010) Abruf am 08.2012. Schnelle,J. Schnelle,J. 2010: NoSQL ? Jenseits der relationalen Datenbanken. URL:http://www.pro-linux.de/artikel (2010) CouchDB (2012) CouchDB 2012: Why CouchDB?. URL:http://guide.couchdb.org/editions/1/en/why.html, Abruf am 07.2 Tiwari,S. (2011) Tiwari, S. 2011: Professional NoSQL, 1. Aufl., Indianapolis, USA 2011 Gull, C. (2011) Gull, C. 2011: web-Applikationen entwickeln mit NoSQL, 1. Aufl., München 2011 Bertelsmeier, B. Bertelsmeier, B. 2012: CouchDB. URL:http://wikis.gm.fh-koeln.de/wiki_db/Datenbanken/CouchDB, A (2012) CouchDB (2012) CouchDB 2012: The Core API. URL:http://guide.couchdb.org/draft/api.html, Abruf am 07.2012. MongoDB MongoDB 2012: MongoDB API. URL:http://api.mongodb.org/, Abruf am 07.2012. (2012) Geisler, F. (2006) Geisler, F. (2006): Datenbanken. Grundlagen und Design, 2. Aufl., Heidelberg 2006 Faeskorn-Woyke, Faeskorn-Woyke, H. 2011: Spaltenorientierte Datenbanksysteme. H. (2011) URL:http://wikis.gm.fh-koeln.de/wiki_db/Datenbanken/SpaltenorientierteDatenbank, Abruf am 08.1012 Faeskorn-Woyke, Faeskorn-Woyke, H. 2011: Cassandra. URL:http://wikis.gm.fh-koeln.de/wiki_db/Datenbanken/Cassand H. (2011) Faeskorn-Woyke, Faeskorn-Woyke, H. 2011: Keyspace. URL:http://wikis.gm.fh-koeln.de/wiki_db/Datenbanken/Keyspac H. (2011) Wolff, E. & Spichale, K. Wolff, E. & Spichale, K. 2012: NoSQL: Konzepte und Prinzipien, in: Java Magazin 2012, Nr. 4, S. 28-3 (2012) Grinev, M. Grinev, M. 2010: Grinev. URL:http://maxgrinev.com/2010/07/12/do-you-really-need-sql-to-do-it-all-in(2010) 11 Literatur- und Quellenverzeichnis 37 Migration_von_einem_relationalen_Datenbankmodell_zu_NoSQL Göers, Jutta (1995) Grehan, Rick(2007) Göers, Jutta 1995: Objektorientierte Datenbanken -- Entstehung, Konzepte, Systeme. URL:http://www.informatik.uni-osnabrueck.de/um/95/95.1/oodb/oodb.html, Abruf am 01.08.2012. Grehan, Rick 2007: The Database Behind the Brains. URL:http://www.db4o.com/deutsch/db4o%20Whitepaper%20-%20The%20Database%20Behind%20th 03.07.2012. Visengeriyeva, L. Visengeriyeva, Larysa et.al. (2007): db4o, 1. Aufl., entwickler.press (2007) Kersken, Sascha Kersken, Sascha (2008): IT-Handbuch für Fachinformatiker, 4. Aufl., Galileo Computing (2008) db4objects, Inc. db4objects, Inc. 2007: Product Information. URL:http://www.db4o.com/deutsch/db4o%20Product%20I (2007) Abruf am 10.07.2012. Neumann, Neumann, Alexander 2011: GraphDB identifiziert Zusammenhänge zwischen Wikipedia-Einträgen. Alexander (2011) URL:http://www.heise.de/ix/meldung/GraphDB-identifiziert-Zusammenhaenge-zwischen-Wikipedia-Ei Lemay, et. al. Lemay, Laura , Cadenhead, Roger (2001): Java2 in 21 Tagen, 1. Aufl., Markt+Technik Verlag (2001) Brenner, Ina Brenner, Ina 2007: Datenbankentwicklung mit db4o. (2007) URL:http://1895312/03bfa2d5/downloading/community.versant.com/Projects/html/projectspaces/db4oBloch, Joshua Bloch, Joshua (2002): Effektiv Java programmieren, 1. Aufl., Addison-Wesley (2005) 11 Literatur- und Quellenverzeichnis 38