Ausarbeitung

Werbung
SQL- & NoSQL-Datenbanken - Speichern und
Analysen von großen Datenmengen
Lennart Leist
Inhaltsverzeichnis
1 Einführung
1.1 Aufgaben einer Datenbank . . . . . . . . . . . . . . . . . . . . . .
1.2 Geschichtliche Entwicklung der Datenbanken . . . . . . . . . . .
2
2
4
2 SQL-Datenbanken
2.1 Grundlagen . . . . . . . . . . . . . . . . .
2.2 Entity-Relationship-Modell . . . . . . . .
2.3 Zeilenorientierte Speicherung . . . . . . .
2.4 Transaktionen und A.C.I.D.-Eigenschaften
5
5
6
7
8
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
3 NoSQL-Datenbanken
9
3.1 Datenbanksysteme mit spaltenorientierter Speicherung . . . . . .
9
3.2 Objektdatenbanken . . . . . . . . . . . . . . . . . . . . . . . . . . 10
3.3 Dokumentorientierte Datenbanken . . . . . . . . . . . . . . . . . 10
3.4 Verteilte Datenbanksysteme, CAP-Theorem und BASE-Eigenschaften 11
1
1
Einführung
Diese Arbeit dient dazu einen Überblick über die verschiedenen Datenbankmodelle zu geben. Die Datenbanksprachen werden hier nicht behandelt, mit
Außnahme kurzer Beispiele zur Datenbanksprache SQL.
1.1
Aufgaben einer Datenbank
Seit Verwendung der ersten Computer, welche Datenspeicher verwenden, entstehen täglich immer größere Datenmengen. Es werden Datenbanksysteme benötigt,
um diese Daten strukturiert zu speichern und somit effizient nutzbar zu machen.
Ein Zitat von Eric Schmidt (Google CEO) zeigt, wie groß diese Datenmengen
in etwa sind: There was 5 exabytes of information created between the dawn
”
of civilization through 2003, but that much information is now created every 2
days, and the pace is increasing.“
Zu Anfang des digitalen Zeitalters stand man vor dem Problem, dass die
Datensätze zur Verwendung an die Anwendungen angepasst werden mussten.
Diese Anpassungen sind meist aufwendig und zeitintensiv. Die Abbildungen
1.1.1 und 1.1.2 zeigen, wie dieses Problem mithilfe von Datenbanken (Abk.:
DB) umgangen wird.
Abb. 1.1.1: Ohne Datenbank. Datenbank B ist eine umgewandelte Version von
Datenbank A, um sie für Anwendung B verwendbar zu machen. Sie enthalten
identische Informationen
2
Abb. 1.1.2: Mit Datenbank. Die Abfrage der Anwendungen werden an das
Datenbankmanagementsystem gesendet, es dient als Schnittstelle zwischen den
Anwendungen und der Datenbank. Eine Anpassung der Datenbank an die
Anwendungen ist nicht mehr nötig.
Das Datenbanksystem lässt sich in zwei Funktionen einteilen. Zum einen
das Datenbankmanagementsystem (Abk.: DBMS), welches die Schnittstelle zwischen Anwendungen und Datenbank bildet. Wie das DBMS gestaltet ist hängt
vorallem vom gewünschten Datenbankmodell ab. Die wichtigsten Aufgaben des
DBMS sind speichern, überschreiben, löschen und lesen von Daten aus der Datenbank. Außerdem kann es für die Datensicherheit eingesetzt werden. Zum anderen die Datenbank in der die Daten strukturiert gespeichert sind. Wie diese
Struktur aussieht hängt vom DBMS ab.
3
1.2
Geschichtliche Entwicklung der Datenbanken
In den 1960er-Jahren entstanden die ersten Datenbanksysteme, so z.B. das Netzwerkdatenbankmodell und das hierarchische Datenbankmodell. Beide Datenbankmodelle sind heutzutage wenig verbreitet. Das hierarchische Datenbankmodell entspricht in etwa dem Ordnersystem mancher Betriebssysteme (z.B.
Windows).
In den 1970er-Jahren entwickelte Edgar F. Codd ein relationales DBMS
mit dem Namen System R“. Die Datenbanksprache SQL beruht auf diesem
”
relationalen DBMS. 1979 erschien auf dem Markt die erste Datenbank-Software,
welche die Datebanksprachhe SQL verwendete. In Kapitel 2 wird das relationale
DBMS und die Sprache SQL näher behandelt. SQL ist heutzutage eine sehr
verbreitete Datenbanksprache und wird stets weiterentwickelt.
Es gibt jedoch Anwendungen für die andere Datenbanksysteme vorteilhafter sind. Diese nicht-relationalen Datenbanken werden seit 2009 mit dem Sammelbegriff NoSQL-Datenbanken bezeichnet. Diese Datenbanksysteme werden in
Kapitel 3 behandelt. Wichtige Vertreter dieser Gruppe sind Google Big Table
und Amazon Dynamo. Die sehr verbreiteten Anwendungen Google-Suche und
Google-Maps verwenden Google Big Table. Der Amazon-Shop verwendet für die
Bestellungen und Produkte das System Amazon Dynamo.
4
2
SQL-Datenbanken
Dieses Kapitel befasst sich mit den relationalen Datenbanken und der Datenbanksprache SQL, welche auf der relationalen Datebankstruktur basiert. Die
Datenbanksprache SQL selbst wird dabei nicht ausführlich behandelt.
2.1
Grundlagen
Relational“bedeutet einfacher ausgedrückt in einer Verbindung bzw. Bezie”
”
hung stehen“. Diese Verbindung bzw. Beziehung kann man in zwei-dimensionalen
Tabellen darstellen, welche auch Relationen genannt werden. Als Beispiel dient
Abb. 2.1.1, welche die Relation Studentennamen “zeigt:
”
Abb. 2.1.1: Darstellung einer relationalen Datenbank als Tabelle
Die einzelnen Zeilen werden als Tupel bezeichnet, jeder Tupel enthält Informationen zu einem Objekt/Entität. In diesem Beispiel enthält jeder Tupel Informationen zu einer bestimmten Person. Die Spalten werden als Attribute bezeichnet. Zur eindeutigen Unterscheidung der Tupel ist es sinnvoll
ein Schlüsselattribut einzuführen. Die zusätlichen Daten, welche durch dieses
Schlüsselattribut anfallen, möchte man jedoch wenn möglich umgehen, um Speicherplatz zu sparen. Eine alternative Methode stellt das Identifizieren der Tupel
durch mehrere Attribute dar. Beispielsweise kann durch die Attribute Nachname, Vorname und Geburtsdatum ein Tupel quasi eindeutig identifiziert werden.
Die Datenbanksprache SQL ist die am häufigsten verwendete Sprache, um
mit relationalen Datenbanken zu arbeiten. SQL ist der englischen Umgangssprache sehr ähnlich und daher leicht zu verstehen. Eine der wichtigsten Operationen
ist die Abfrage von bestimmten Daten. Um die vollständige Relation Studen”
tennamen “aus Abb. 2.1.1 ausgeben zu lassen, genügt folgender Befehl:
Abb. 2.1.2: Abfrage der Relation Studentennamen
Die erste Zeile des Befehls gibt die Anweisung, dass die vollständige Tabelle
ausgegeben werden soll. Die zweite Zeile gibt an welche Tabelle ausgegeben wer5
den soll. Das Semikolon markiert das Ende des Befehls. Um nur eine bestimmte
Spalte einer Relation ausgeben zu lassen, verwendet man folgenden Befehl:
Abb. 2.1.3: Abfrage der Spalte Namename aus der Relation Studentennamen
Da sich diese Ausarbeitung nicht mit Datenbanksprache befasst, sollte dieser
kurze Eindruck zur Datebanksprache SQL genügen.
In der Regel bestehen relationale DB aus mehreren Relationen, welche durch
Join-Verbindungen verbunden werden. Join-Verbindungen werden u.a. verwendet, um Redundanzen (=mehrfaches Abspeichern gleicher Informationen) und
Anomalien (=leere Einträge) zu vermeiden. Redundanzen sind unerwünscht,
da durch sie Speicherplatz verbraucht wird und Anomalien sollten vermieden
werden, da sie bei Operationen Fehler hervorrufen können. Bei vielen JoinVerbindung kann es dazu kommen, dass einfache Befehle zu komplexen und
aufwendigen Operationen werden. Daher ist es wichtig eine Datenbank gut zu
planen.
2.2
Entity-Relationship-Modell
Mit dem Entity-Relationship-Modell werden Datenbankstrukturen schematisch
dargestellt. Das Prinzip ist sehr einfach und lässt sich am besten anhand eines
Beispiels erklären. Dazu verwenden wir die Relation Studentennamen “und
”
fügen zwei neue Relationen hinzu:
Abb. 2.2.1: Die Relationen Studentennamen “und Fach “
”
”
Die Relationen Studentennamen “und Fach “sind zwei eigenständige Rela”
”
tionen und werden rechteckig umrandet. Die Relation belegt “verbindet diese
”
zwei Relationen und wird deshalb mit einer Raute umrandet. Bei den zwei
eigentständigen Relationen fügt man außerdem hinzu, welche Attribute sie enthalten. Die Attribute werden umkreist und das Schlüsselattribut der Relation
wird zusätzlich unterstrichen. An den Verbindungslinien der Relationen wird
gekennzeichnet in welchem Verhältnis die Relationen stehen. Bei dem verwendeten Beispiel stehen die Relationen Studentennamen “und Fach “in einem n:m
”
”
Verhältnis. Für des Beispiel erhält man folgendes Entity-Relationship-Modell:
6
Abb. 2.2.2: Das Entity-Relationship-Modell zum genannten Beispiel
Das Entity-Relationship-Modell ist sehr nützlich, um relationale Datenbanken zu planen.
2.3
Zeilenorientierte Speicherung
Bei der Speicherung einer Datenbank werden die Informationen der zweidimensionalen Relationen auf einen eindimensionalen Speicher (z.B. Festplatte) abgespeichert. Bei SQL-Datenbanken wird dafür die zeilenorientierte Speicherung
verwendet. Die Relation Studentennamen “würde beispielsweise in folgender
”
Reihenfolge abgespeichert werden:
Abb. 2.3.1: Zeilenorientierte Speicherung der Relation Studentennamen “
”
Die Kommata trennen symbolisch die Attribute der Tupel und die Semikola
trennen die einzelnen Tupel.
Diese Art der Speicherung hat aufgrund der Lokalität der Daten Vor- und
Nachteile, so z.B.:
• Ganze Tupel lassen sich schnell bearbeiten und auslesen
• Neue Tupel können mit wenig Aufwand hinzugefügt werden
• Einzelne Spalten auszulesen ist aufwendig (→ schlecht für Analysen)
• Hinzufügen neuer Attribute ist sehr komplex
7
2.4
Transaktionen und A.C.I.D.-Eigenschaften
Unter einer Transaktion versteht man das Durchführen zusammengehörender
Programmschritte, welche den Datenbestand einer Datenbank verändern. Abb.
2.4.1 zeigt ein Beispiel für eine Transaktion. Bei dieser Transaktion handelt es
sich um die Rückgabe von Buch 2 “, das der Student def “ausgeliehen hat.
”
”
Die Relation auf der linken Seite hat den Namen Verfügbarkeitsstatus “und
”
die Relation auf der rechten Seite wird mit ausgeliehen “bezeichnet.
”
Abb. 2.4.1: Beispiel für eine Transaktion
Diese Transaktion besteht aus einzelnen Teiltransaktionen:
• In der Relation Verfügbarkeitsstatus “muss das Attribut Status von Buch
”
2 zu verfügbar “geändert werden
”
• In der Relation ausgeliehen “muss der zu Buch 2 gehörende Eintrag
”
gelöscht werden
Um Fehler bei Transaktionen zu vermeiden, müssen diese die A.C.I.D.Eigenschaften erfüllen.
• Atomicity: Transaktion wird ganz oder gar nicht ausgeführt
• Consistency: Daten müssen nach Transaktion konsistent sein
• Isolation: Gleichzeitig ausgeführte Transaktionen dürfen sich nicht beeinflussen
• Durability: Die durchgeführten Veränderungen müssen dauerhaft sein
Unter der Eigenschaft konsistent versteht man bei relationalen Datenbanken,
dass alle Attribute einen erlaubten Wert besitzen und die Schlüsselattribute
eindeutig sind. Es können auch eigene Konsistenzkriterien eingeführt werden.
8
3
NoSQL-Datenbanken
In diesem Kapitel werden Datenbanksysteme behandelt, welche zu der Gruppe der NoSQL-Datenbanken gehören. Diese Datenbanken verfolgen ein nichtrelationales Konzept. Grund für die Entwicklung nicht-relationaler Datenbanksysteme ist, dass relationale Datenbanken für manche Anwendungsbereiche nachteilig sind. In der Regel verwenden NoSQL-Datenbanken keine Joins, wie es
bei relationalen Datenbanken der Fall ist. Im Folgenden werden verschiedene
NoSQL-Datenbanktypen vorgestellt. Anschließend folgen die Themen Verteil”
te Datenbanksysteme “ CAP-Theorem “und BASE-Eigenschaften “.
”
”
3.1
Datenbanksysteme mit spaltenorientierter Speicherung
Bei Datenbanken mit spaltenorientierter Speicherung werden nacheinander die
einzelnen Spalten abgespeichert. Dadurch befinden sich die Daten einer Spalte
im Speicher nah beieinander. Somit sind die einzelnen Tupel nicht am Stück
abgespeichert. Die Tabelle aus Abb. 2.1.1 würde bei spaltenorientierter Speicherung folgendermaßen im Speicher gespeichert werden:
Abb. 3.1.1: Spaltenorientierte Speicherung der Relation Studentennamen “aus
”
Abb. 2.1.1
Diese Art der Speicherung hat Vor- und Nachteile:
• Die Einträge einer gesamten Spalte können schnell geändert werden (Beispiel: Gehaltserhöhung aller Mitarbeiter)
• Analysen, welche die Daten einzelner Spalten benötigen, können schneller
durchgeführt werden
• Es kann eine bessere Datenkompression möglich sein, aufgrund der Ähnlichkeit
der Einträge einer Spalte
• Das Verwenden und Bearbeiten einzelner Tupel ist langsamer
Bekannte Datenbanken mit spaltenorientierter Speicherung sind u.a. Goo”
gle Big Table “und SAP Hana “, wobei letztere gleichzeitig zeilenorientierte
”
Speicherung verwendet (→ Hybrid).
9
3.2
Objektdatenbanken
Bei z.B. relationalen Datenbanken werden Objekte aus der Realität auf die verwendeten Attribute projiziert, dadurch beinhalten die einzelnen Einträge Werte.
Diese Methode ist ungeeignet, wenn man Objekte (im Sinne der Informatik) abspeichern möchte, da diese zusätzlich Mehtoden “besitzen.
”
Abb. 3.2.1: Unterschied zwischen Objektdatenbanken (oben) und relationalen
Datenbanken (unten)
Quelle:
http://wikis.gm.fh-koeln.de/wiki_db/Datenbanken/Objektdatenbank
Dieses Konzept ermöglicht objektorientierten Anwendungen, dass sie Objekte abrufen und speichern können.
3.3
Dokumentorientierte Datenbanken
Bei dokumentorientierten Datenbanken werden einzelne Dokumente abgespeichert. Der Inhalt der Dokumente ist nich vorgegeben, da jedes Dokument als
Einheit angesehen wird. Es besteht keine Relation zwischen den Dokumenten.Jedes Dokument besitzt einen Identifikator. Ein Identifikator ist vergleichbar
mit einer Adresse, wie man sie von Häusern kennt. Folgende Abbildung zeigt
ein Beispiel für ein solches Dokument:
Abb. 3.3.1: Beispiel für eine Dokument einer dokumentorientierten Datenbank
Quelle: http://wikis.gm.fh-koeln.de/wiki_db/uploads/Datenbanken/
DokumentenorientierteDatenbank/bsp_dokument.png
10
3.4
Verteilte Datenbanksysteme, CAP-Theorem und BASEEigenschaften
Ein verteiltes Datenbanksystem besteht aus mehreren Servern bzw. Knoten. Viele NoSQL- und SQL-Datenbanktypen unterstützen diese Funktion (z.B. Oracle
Database). Daten werden in mehrfacher Ausführung auf den verschiedenen Knoten gespeichert. Sie können sich aber hinsichtlich ihrer Aktualität unterscheiden.
Für verteilte Datenbanksysteme wurde im Jahre 2000 das CAP-Theorem
aufgestellt. Das CAP-Theorem besagt, dass nur zwei der drei folgenden Eigenschaften erfüllt werden können:
Abb. 3.4.1: Grafik zum CAP-Theorem
• (C) Konsistenz: Die Daten aller Knoten sind auf dem aktuellsten Stand.
• (A) Verfügbarkeit: Alle Anfragen an das Datenbanksystem können schnell
beantwortet werden.
• (P) Partitionstoleranz: Ausfälle einzelner Knoten beeinträchtigen nicht die
Funktion des Datenbanksystems.
Für den Begriff Konsistenz “existieren zwei Definitionen (siehe Kapitel 2.4).
”
Das System Amazon Dynamo legt sehr viel Wert auf Verfügbarkeit und Partitionstoleranz, da hohe Wartezeiten schlecht bei den Kunden ankommt. Die Datenbanksysteme der Banken müssen vorallem Konsistenz und Partitionstoleranz
bieten.
In Anlehnung an die A.C.I.D-Eigenschaften für Transaktionen bei relationalen Systemen, gibt es die B.A.S.E-Eigenschaften bei verteilten Systemen:
Daten sind stets abrufbar aus der Datenbank, wobei nicht garantiert ist,
dass sie sich im aktuellsten Zustand befinden, aber sie werden nach und nach
aktualisiert, sodass in absehbarer Zeit Konsistenz erreicht wird.
11
Herunterladen