Untitled - Offene

Werbung
1
In diesem Abschnitt geht es um NoSQL.
Da dieser Themenbereich sehr umfangreich ist und die eingesetzten Technologien
stark im Wandel sind, werden wir uns im wesentlichen die grundlegenden
Prinzipien und Lösungsansätze ansehen.
Hierzu werden wir folgenden Fragstellungen nachgehen:
• Was ist NoSQL?
• Warum braucht man NoSQL?
• Welche Lösungsansätze gibt es?
• Was ist das besondere an NoSQL?
• Welche Kategorien von NOSL gibt es?
• Was hat der NoSQL Markt zu bieten?
In dem kurzen Abschnitt „NoSQL unter der Haube“ werden wir uns kurz
befassen mit den wichtigsten allgemeinen Lösungsansätzen von NoSQL
Datenbanken. Hierzu werden die wichtigsten Stichworte kennenlernen. Eine
Vertiefung der einzelnen Ansätze würde den Rahmen dieser Vorlesung sprengen.
Die einzelnen Lösungsansätze und das Arbeiten der mit NoSQL kann man nur in
einem gesonderten Kurs gerecht werden.
2
Die Abkürzung NoSQL steht für „Not-Only-SQL“ und bietet einen gänzlich
anderen Ansatz als die relationalen Datenbanken.
Bei den relationalen Datenbanken liegt ein relationales Modell zu Grunde. Die
Daten werden durch ein Datenmodell beschrieben, welches als Grundlage für die
Definition von Tabellen dient, die durch das Datenbank Managementsystem
verwaltet werden.
Mit dem „No-Only-SQL“ Ansatz möchte man nun weg von einem starren
Datenmodell und starren Tabellen.
• Zum einen kann es dazu führen, dass bei sehr großen Mengen die max. Größe
eines Transaktionslogs überschritten wird. Dies würde dazu führen, dass die
Transkation nicht durchgeführt werden kann.
• Zum anderen kann es passieren, dass die Tabelle über Minuten und ggf.
Stunden gesperrt ist und entsprechende Applikationen blockiert sind.
Es liegt daher der Gedanke nahe, sich von einem starren Datenbank Schema zu
lösen und nach alternativen Konzepten zu suchen.
3
SQL unterstützt zwar das Ändern von Tabellen in Form der SQL Anweisung
„Alter table“.
Wenn wir uns das Szenario in der Abbildung näher ansehen, werden wir sehr
schnell feststellen, wo das Problem liegt.
Das betrachtete Szenario ist dabei wie folgt.
• Es gibt eine Tabelle „Person“ mit den Spalten/Attributen:
• ID – welches den Primärschlüssel beinhaltet
• Name – Name/Nachname einer Person
• Vorname – Vorname einer Person
• Nun möchten wir die Tabelle um eine Spalte erweitern und eine Spalte „Title“
hinzufügen.
Wenn wir nun annehmen, dass in der Tabelle über 1 Million Einträge/Zeilen sind,
werden zwangsläufig alle Datensätze innerhalb einer Transaktion gesperrt, um
die Änderungen durchführen zu können. Nach dem Einfügen müssen
4
gegebenenfalls Index-Verzeichnisse wieder neu aufgebaut werden. Um die ACIDGarantie zu erfüllen, werden zusätzlich alle Aktionen in einem Transaktions-Logging
protokolliert. Dies kann dazu führen, dass die Tabelle über eine längeren Zeitraum (
Minuten bis hin zu Stunden) gesperrt ist.
Die Antwortzeiten für Anwendungen insb. im Web-Bereich sind somit nicht akzeptabel.
Es ist somit offensichtlich, dass man das man nach alternativen Ansätzen gesucht hat, und
diese unter dem Stichwort NoSQL zusammengefasst hat.
4
Die Suche nach alternativen Konzepten hat aber noch weitere Gründe.
Es werden in der Praxis immer mehr Daten zur Verarbeitung herangezogen, die
zum Beispiel aus den „sozialen Medien“ und von „Internet-of-Things““ Geräten
stammen.
Diese Datenquellen liefern :
• Sehr große Datenmengen. Nicht selten bewegen wir uns dabei im PetabyteBereich.
• Die Daten unterliegen keinem festen Schema
• Die Werte ändern sich in der Regel sehr schnell
Dies entspricht dem Grundgedanken, der mit dem Schlagwort „Big-Data“
umschrieben wird.
Hinweis. Dies merkt man schon daran, dass im Zusammenhang von Big data
auch immer das Schlagwort NoSQL genannt wird.
5
Ein weiteres Problem ist die Skalierbarkeit.
Relationale Datenbanken sind nur in begrenztem Umfang „Horizontal“
skalierbar.
Horizontal skalierbar bedeutet , man fügt einen weiteren Datenbank Server in
seiner Arbeitsumgebung hinzu.
Der Grund in der begrenzten horizontalen Skalierbarkeit für relationale
Datenbank liegt darin, dass das ACID Modell zu Grunde gelegt wird, welches
sich nur schwer in verteilen Systemen umsetzen lässt.
Wie wir noch sehen werden, rückt man bei NoSQL von diesem ACID Model ein
und verwendet ein sogenanntes BASE Model.
Das BASE Model werden wir später noch kennenlernen.
Relationale Datenbank Systeme bieten meist nur vertikale Skalierbarkeit.
Horizontale Skalierbarkeit:
Unter horizontaler Skalierbarkeit (auch Scale-out genannt) versteht man das
einfache Hinzufügen bzw. Entfernen von einzelnen Knoten des Systems.
6
Vertikale Skalierbarkeit:
Bei der vertikalen Skalierbarkeit (Scale-up) bei der die Leistungsfähigkeit einer
einzelnen Maschine erhöht wird.
6
Um besser zu verstehen, was NoSQL genau ist, schauen wir uns man einige
Merkmale / Charakteristiken von NoSQL Systemen an.
Die wichtigsten Merkmale sind:
• Es liegt KEIN relationales Datenmodell zu Grunde
• Es handelt sich um ein hochverteiltes und horizontal skalierbare System
• Einhergehend mit Skalierbarkeit ist es notwendig, die Daten auf mehrere
Knoten zu verteilen, was eine Datenreplikation beinhaltet. Diese
Datenreplikation wird auch data shading genannt.
• Es wird gefordert, dass das System einfache APIs anbietet, auf denen
Applikationen erstellt werden können. Komplexe Operationen wie JOINS
sind nicht notwendig.
Ein weiteres Merkmal betrifft die Konsistenz der Daten. In der NoSQL Welt ist
dies das BASE-Model .
7
Auch wenn einige bisher genannten Merkmale auch von relationalen
Datenbanken unterstützt werden, gibt es noch weitere Aspekte, die wir uns
ansehen müssen, um ein tieferes Verständnis zu bekommen.
Wie wollen uns daher nun der folgenden Fragstellung nachgehen:
„Was NoSQL“ überhaupt ist?
´Vorab:
• NoSQL ist nicht gleich NoSQL.
• NoSQL ist zunächst mal ein Schlagwort, unter dem alle NICHT-relationalen
Datenbanken zusammengefasst werden.
Um den Überblick nicht zu verlieren, schauen wir uns nun die einzelnen
Kategorien an, in die NoSQL System sich einteilen lassen.
Relationale Welt:
Aus der relationalen Welt kennen wir bereits die bekannten Herstellen wie
Microsoft SQL Server, Oracle, IBM DB2 sowie die unterschiedlichen
OpenSource Lösungen wie MySQL etc.
8
Dieser relationalen Welt steht die NoSQL Welt gegenüber.
NoSQL Welt
In der NoSQL Welt unterscheidet man zweit Kategorien.
1. „Soft-NoSQL“ Kategorie
In diese Kategorie fallen alle Objektorientierten Datenbanken, XML-Datenbanken
etc. Wie wir sehen werden , unterscheiden sich diese vom Konzept schon sehr von
den eigentlichen NoSQL Systemen.
Einen Überblick über OODB und XML-DB finden Sie in den jeweiligen
Abschnitten über Entwicklungstendenzen.
2. Kern-NoSQL
Als Kern-NoSQL oder auch „Core NoSQL“ bezeichnete System sind von Hause
aus „schemalos“. Es liegt also kein Schema für die Daten zu Grunde. Wie wir
später noch sehen werden. gibt es in diesem Bereich unterschiedliche OpenSource
Lösungen. Daher sind hier in der Abbildung keine Produkt Namen aufgeführt.
Stattdessen sehen Sie in der Abbildung die unterschiedlichen Unterkategorien von
NoSQL-Systemen.
Im einzelnen sind dies:
• Wird-Column Stores
• Document Stores
• Key-Value Stores
• GraphStores
Die ersten drei Unter-Kategorien werden wir uns nun näher ansehen um das
Core-No-SQL Paradigma besser zu verstehen zu lernen.
8
Aus der relationalen Welt kennen wird, dass die Daten in Tabellen abgelegt
werden. Die Sichtweise ist dabei „zeilen-orientiert“. Dies bedeutet, wir haben in
einem Tupel alle Werte einer Zeile.,
Bei dem Column Family Systemen stehen die Spalten im Mittelpunkt.
In der Abbildung ist zu sehen, dass alle Werte in einem Tupel, die gleiche
Bedeutung haben. So sehen Sie, dass es ein Tupel ( 48, 8, 32,..) gibt, welches die
Altersangaben einzelner Personen enthält.
9
In der Abbildung sehen Sie nun die Namen einzelner Column-System, die zur
Zeit auf dem Markt sind.
Wenn Sie also nun in Zukunft in einem Fachartikel oder in einer
Produktbeschreibung das Schlagwort Hadoop oder Cassandra lesen, wissen Sie
nun, das es sich um einen NoSQL Datenbank aus der Kategorie Column-Family
handelt.
10
Eine weitere Kategorie von NoSQL Datenbank sind die Key-Value Systeme.
Im Zentrum der Betrachtungen stehen hier Daten, die sich als Tupel auffassen
lassen.
Ein Element wird als Key ( Schlüssel) interpretiert, welcher einen Wert genau
identifiziert.
Der Wert selbst wird in einem weiteren Element des Tupels hinterlegt.
Solche Tupel lassen sich sehr gut in Hash-Tabellen ablegen, wie wir sie von z.B.
Java her kennen.
Bei dem Wert selbst kann es sich um:
• Einfache skalare Werte handeln ( z.B. einen Integer Wert)
• Es kann sich aber auch um ein Array, Liste, etc. handeln
11
In der Abbildung sehen Sie nun die Namen einzelner Key-Value Systemen, die
zur Zeit auf dem Markt sind.
Wenn Sie also nun in Zukunft in einem Fachartikel oder in einer
Produktbeschreibung das Schlagwort Volemort lesen, wissen Sie nun, das es
sich um einen NoSQL Datenbank aus der Kategorie Key-Value Store handelt.
12
Bei den Document Store Systemen stehen Dokumente im Mittelpunkt.
Unter Dokument werden hier aber nicht Textdokument wie zum Beispiel
WinWord verstanden.
Vielmehr versteht man hier unter Dokument, Daten, die in XML, HTML,
JSON Format vorliegen. Im allgemein also alle Daten, die einer Struktur
vorliegen, die man mit einer Software weiter verarbeiten kann.
Jedem Dokument wird hierbei eine ID zugewiesen, welches das Dokument
eindeutig identifiziert.
13
In dieser Abbildung sehen Sie noch einmal genauer:
• Was ist ein Dokument und
• Das Mapping von ID zu Dokument
Auf der linken Seite sehen Sie ein kleines Anwendungs-Szenario. Es wird
gezeigt, dass zum Beispiel eine Person, die einen Internet Blog betreibt ( hier
Blogger genannt) die einzelnen Beiträge in einem ‚Blog‘ bereitstellt. Jeder
Blog-Betrag stellt in diesem Sinne ein Dokument dar.
14
In der Abbildung sehen Sie nun die Namen einzelner Dokument Store Systemen,
die zur Zeit auf dem Markt sind.
Wenn Sie also nun in Zukunft in einem Fachartikel oder in einer
Produktbeschreibung das Schlagwort CouchDB oder MongoDB lesen, wissen
Sie nun, das es sich um einen NoSQL Datenbank aus der Kategorie Dokument
Store handelt.
15
In dieser Abbildung sehen Sie eine Gegenüberstellung bzw. Zusammenstellung
der wichtigsten Begriffe, aus dem Bereich NoSQL.
Zum Vergleich wurden auch die Begriffe aufgeführt, die Sie bereits aus der
relationalen Welt kennen.
Relationale Welt.
Dort haben wir es mit Server, Databases , Tabellen und Primärschlüsseln zu tun
Key Value DB
Hier werden die Daten auf Clustern verarbeitet und zur Identifikation wird der
Begriff Key verwendet.
Column Family DB
Hier werden die Daten ebenfalls auf Clustern verarbeitet und anstelle von
Tabellen, redet man von Column Familie.
Document DB
Hier werden die Daten ebenfalls auf Servern verwaltet und anstelle von Database
redet man hier von DocSpace. Als Schlüssel wird hier der Dokument Name (=
16
Id) verwendet.
Quelle:
Die Tabelle in der Abbildung ist angelehnt an das Buch:
„NoSQL, EINSTIEG IN DIE WELT NICHT RELATIONALER WEB 2.0
DATENBANKEN
Hanser Verlag
16
Dies sind nur einige wenige Beispiele von NoSQL Datenbanken und ihre
Einordnung in die unterschiedlichen Kategorien.
Mehr finden Sie unter: http://www.nosql-database.org/
17
Um ein tieferes Verständnis von NOSQL Datenbanken zu erhalten, schauen wir
uns zunächst die wichtigsten allgemeinen Lösungsansätze an, wie NoSQL
Datenbanken eingesetzt werden und wie diese im Prinzip arbeiten.
Im wesentlichen schauen wir aus drei verschiedenen Perspektiven auf die NoSQL
Landschaft
Dies sind im einzelnen
• App – Wie arbeiten eigentlich Anwendungen
• API – Welche Schnittstellen gibt
• NoSQL intern – Hier interessieren uns im wesentlichen die Lösungsansätze
bzgl. Der Skalierbarkeit.
App
Da ist zum einen die Anwendungswelt.
Wenn wir davon ausgehen, dass wir riesige Datenmengen verarbeiten wollen,
dann müssen die Applikationen in einem sogenannten Streaming Mode arbeiten.
Dies bedeutet, dass Eingabedaten kontinuierlich eingelesen, verarbeitet und
ausgegeben werden. Es werden also nicht erst ALLE Daten eingelesen und dann
verarbeitet, sondern die Daten werden in einzelnen „Blöcken“ verarbeitet.
Darüber hinaus handelt es sich in der Regel um verteilte Anwendungen . Dies
beutet, dass die zu erledigende Aufgabe auf unterschiedliche Applikationen
18
aufgeteilt sind und diese wiederum auf unterschiedlichen Rechnern ablaufen.
API
Sofern eine Kommunikation notwendig ist, werden einfache APIS gefordert, die wenn
möglich Plattform und Programiersprachen unabhängig sind.
NoSQL – intern
Für den Einsatz eine NoSQL DB ist es sinnvoll sich etwas genauer mit den allgemeinen
Konzept zu beschäftigen, die den verschiedenen NoSQL Datenbanken zu Grunde liegen.
Hierbei interessiert besonders das Erreichen der Skalierbarkeit.
18
Betrachten wir nun zunächst die Anwendungssicht.
Dort hat sich das sogenannte MAP-REDUCE durchgesetzt.
MAP-REDUCE stellt einen allgemeinen Ansatz dar, bei dem der Fluss der Daten
im wesentlichen aus zwei Schritten besteht.
Zur Verdeutlichung betrachten wir ein Beispiel. Stellen wir uns vor, wir haben
Datenströme und wollen die Häufigkeit von Worten zählen.
Schritt 0: Aufteilen und Starten der MAP/REDUCE Prozesse
Da es sich um sehr große Datenmengen handelt, werden die Ausgangsdaten auf
unterschiedliche MAP-Prozesse verteilt, die sich auch auf unterschiedlichen
Rechnern befinden können.
Schritt 1: MAP
In einem MAP-Schritt, werden die Ausgangsdaten eingelesen und mittels einer
map() Funktion transformiert und als Zwischenergebnis abgelegt.
In unserem Beispiel würde die map() Funktion als Eingabe Parameter einen
String erhalten, in dem ein beliebiger Text abgelegt ist. Ein weitere Parameter
enthält einen Key, welche den String identifiziert.
19
Die map() Funktion würde nun die Anzahl der gefundenen Wörter als Zwischenergebnis
ausgeben.
Schritt 2: REDUCE
In einem weiteren Schritt werden die Zwischenergebnisse mittels ein reduce() Funktion
weiter verarbeitet. Die reduce() Funktion erhält nun eine Liste aus den
Zwischenergebnissen und kann für ein gestimmtes Wort die Gesamtanzahl ermitteln.
Die map() und die reduce() Funktion muss natürlich von dem
Anwendungsprogrammierer/rinnen bereit gestellt werden.
Das Verteilen und Starten der einzelnen Anwendungen wird vom dem NoSQL System
übernommen.
Wie Sie hier schon erahnen können, handelt es sich bei NoSQL-DBs nicht nur um ein
System für die reine Datenablage, sondern um ein Framework/Plattform für die
Anwendungen.
19
Bei den Schnittstellen handelt es sich in der Regel um sogenannte REST Apis.
REST steht für Representational State Transfer.
Es handelt sich hierbei nicht um eine Implementation, sondern vielmehr um ein
Entwurfsmuster. Dem Entwurfsmuster liegen hierbei folgenden Regeln zu
Grunde:
• Der Kommunikation erfolgt über Endpoints (Resource) . Ein Endpoint ist
nichts weiter als eine Web –Resource / URL.
• Die Daten selbst werden im JSON Format beschrieben.
• Als Kommunikationsprotokoll bzw. für die Operationen kommt HTTP zum
Einsatz. Wobei die Verben GET, HEAD, PUT, POST und DELETE verwendet
werden.
20
Die Abbildung hier gibt Ihnen einen Überblick über die wichtigsten
Lösungsansätze, die innerhalb eines NoSQL Systems zum Einsatz kommen.
Das allgemeine Ziel ist ja eine hochskalierbare Datenbank zur Verfügung zu
stellen.
Die kleine Tabelle zeigt nun in der linken Spalte die Anforderungen, die es zu
erfüllen gibt. In der rechten Spalte sind die wichtigsten Stichworte zu den
jeweiligen Lösungsansätzen aufgeführt.
Eine detaillierte Erklärung zu den einzelnen Lösungsansätzen verlangt einen
tieferen Einblick in die theoretischen Grundlagen. Daher wird an dieser Stele nur
eine kurze Erklärung gegeben, um zu verstehen, was genau das zu lösende
Problem ist.
Multiversion Control ( genauer MVCC = Multiversion Concurrency
Control)
Hierbei geht es um die Möglichkeit, wie verteile Anwendung möglich effizient
auf Daten zugreifen können ohne sich gegenseitig zu blockieren.
In relationalen Datenbank wird meist ein pessimistisches Sperrverhalten zu
Grunde gelegt. Dies bedeutet, dass angenommen wird, dass die Daten zu sperren
sind , da sie verändert werden in Zukunft.
21
In NoSQL Datenbanken geht man von einem optimistischen Sperrverhalten aus. Dies
bedeutet, dass angenommen wird, dass die Daten nur gelesen werden und keine Sperren
notwendig sind. Wenn geändert wird, kann man immer noch eine Sperre setzen.
 Siehe auch : http://wikis.gm.fh-koeln.de/wiki_db/Datenbanken/MVCC
BASE
Bei relationalen Datenbanken lieg das ACID Model zu Grunde. (ACID = Atomic,
Consistency, Integrity, Durability)
Laut CAP –Theorem von Brewer widerspricht sich hohe Verfügbarkeit mit der
Consistency wie wie sie in dem ACID Modell gefordert wird.
Daher wird bei NOSQL Systeme das sogenannte BASE Model verwendet.
BASE steht dabei für Basically, Availability, Soft State Eventually Consistent.
Wie Sie dem Namen bereits entnehmen können, ordnet man der Anforderung nach
Verfügbarkeit höheren Stellenwert ein als die der Anforderung nach Konsistenz.
Quellen:
• CAP Theorem: http://www.cs.berkeley.edu/~brewer/cs262b-2004/PODC-keynote.pdf
• CAP Theorem: http://wikis.gm.fh-koeln.de/wiki_db/Datenbanken/CAP)
• BASE: http://lwibs01.gm.fh-koeln.de/wikis/wiki_db/index.php?n=Datenbanken.BASE
Vector Clocks
Da es sich bei NOSQL um eine verteiltes System handelt, bei dem Daten parallel
verarbeitet werden, besitzt jede beteiligte Instanz eine Kopie der Daten. Somit benötigt
man ein Verfahren, mit dem man feststellen kann, welche Version der Daten nun die
Aktuelles ist.
Bei Vector Clocks handelt es sich genau um ein solches Verfahren, bei dem die einzelnen
Komponenten in dem verteilten System für jeden Datensatz, der verarbeitet wird, ein
Zeitstempel erzeugt wird. Dies ermöglicht dem System zu erkennen, welche Version eines
Datensatzes die Aktuellste ist.
PAXOS – Commitment Protokolle
Um eine Datenintegrität sicherzustellen, wird ähnlich wie bei den relationalen
Datenbanken ein „Commit“ (Bestätigung) Protokoll eingesetzt, um Daten zu quittieren.
Bei den NoSQL System kommen hier sogenannte PAXOS Protokolle zum Einsatz.
21
PAXOS ist also ein Familie von Protokollen.
Eine genaue Beschreibung der PXOS Familien würde den Rahmen des Kurses sprengen.
Für alle, die es genau wissen möchten, empfehle ich das nachfolgende Dokument:
• https://www4.informatik.uni-erlangen.de/DE/Lehre/SS02/HS_DOOS/pdf/handoutsimimeie.pdf
21
22
Herunterladen