12. NoSQL - htw saar

Werbung
12. NoSQL
Inhalt
§ 12.1 NoSQL?
§ 12.2 MapReduce & Co
§ 12.3 Key-Value Stores
§ 12.4 Extensible Record Stores
§ 12.5 Dokumentorientierte Datenbanken
§ 12.6 Graphdatenbanken
Datenbanken / Kapitel 11: Datenbankschnittstellen
2
12.1 NoSQL?
§ Relationale Datenbanksysteme (RDBMSs) bieten u.a.
§ konzeptuellen Entwurf mit Schema in Normalform (3NF)
zur redundanzfreien Speicherung der Daten
§ eine deklarative Anfragesprache SQL, d.h. Anfragen
spezifizieren nur das Ergebnis, jedoch nicht
wie es ermittelt werden soll
§ ACID-Transaktionen, deren Implementierung Mechanismen
wie Sperren und Verlaufsprotokolle benötigt
§ Sicherung der Datenintegrität mittels Constraints
(z.B. Fremdschlüssel, UNIQUE, CHECK)
§ Benutzerverwaltung und Berechtigungen
Datenbanken / Kapitel 11: Datenbankschnittstellen
3
NoSQL?
§ Konzeptueller Entwurf nimmt an, dass der abzubildende
Abschnitt der Realität feststeht; späteres Hinzufügen
oder Entfernen von Attributen ist nicht vorgesehen
§ ACID-Transaktionen sind nützlich, aber mit Kosten zur
Laufzeit verbunden; nicht alle Anwendungen benötigen sie
§ Deklarative Anfragesprache unterbindet Einflussnahme
durch Entwickler auf die Anfragebearbeitung
§ Heutige Datenmengen lassen sich häufig nicht auf einem
leistungsstarken Rechner verwalten, sondern müssen
über viele Rechner verteilt werden
Datenbanken / Kapitel 11: Datenbankschnittstellen
4
NoSQL?
§ Das Schlagwort NoSQL fasst verschiedene Entwicklungen
seit Mitte der 2000er Jahre zusammen, z.B.
§ Alternativen zum relationalen Modell (z.B. Modellierung der
Daten in Form von Dokumenten oder eines Graphs)
§ Unterstützung flexibler Schema (d.h. Attribute können ohne
Einbußen hinzugefügt oder entfernt werden)
§ Verzicht auf deklarative Anfragesprache zu Gunsten von
Implementierung der Anfragebearbeitung durch Entwickler
§ Speicherung und Verarbeitung der Daten erfolgt oft verteilt
auf viele herkömmliche Rechner, anstatt auf einem oder
wenigen sehr leistungsstarken Rechner
Datenbanken / Kapitel 11: Datenbankschnittstellen
5
12.2 MapReduce & Co
§ MapReduce [3] ist eine bei Google von Jeff Dean und
Sanjay Ghemawat entwickelte Plattform zur verteilen
Speicherung und Bearbeitung großer Datenmengen
§ Bestandteile:
§ verteiltes Dateisystem GFS (HDFS bei Hadoop)
§ MapReduce Programmiermodell
§ Herausforderungen:
Jeff Dean
§ Lastbalancierung
§ Fehlertoleranz
§ Benutzerfreundlichkeit
Datenbanken / Kapitel 11: Datenbankschnittstellen
Sanjay Ghemawat
6
Jeff Dean Facts
§ When Jeff Dean designs software, he first codes the binary
and then writes the source as documentation.
§ Compilers don’t warn Jeff Dean. Jeff Dean
warns compilers.
§ Jeff Dean's keyboard has two keys: 1 and 0.
§ When Graham Bell invented the telephone, he saw a
missed call from Jeff Dean.
§ Jeff Dean's PIN is the last 4 digits of pi
§
http://www.quora.com/Jeff-Dean/What-are-all-the-Jeff-Dean-facts
Datenbanken / Kapitel 11: Datenbankschnittstellen
7
Verteiltes Dateisystem GFS (HDFS)
§ Google File System (GFS)
GFS master
/foo/bar
chunk 1df2
§ verteiltes Dateisystem für Cluster
chunk 2ef0
vieler herkömmlicher Rechner
§ konfigurierbare Replikationsfaktor
chunk 3ef1
GFS client
§ GFS Master (1x)
§ verwaltet den Namensraum
§ koordiniert Replikation von Chunks
§ kommuniziert mit Clients
§ GFS ChunkServers (viele)
GFS chunkserver
chunk 2ef0
chunk 1df2
chunk 5ef0
chunk 3ef2
chunk 3ef1
chunk 5af1
control
data
§ halten Chunks (typische Größe: 64 MB
§ erhalten/senden Chunks von/zu Clients
Datenbanken / Kapitel 11: Datenbankschnittstellen
8
MapReduce als Plattform
§ MapReduce (MR)
MR master
§ Plattform zur verteilten
Datenverarbeitung
§ kann Ausfälle von Rechnern
in Maßen kompensieren
§ MR Master (1x)
§ koordiniert Ausführung eines Jobs
MR client
assign tasks
den Daten bewegt
report progress
§ Berechnungen werden zu
MRworker
worker
MR
MR
worker
MR worker
GFS
chunkserver
GFS
chunkserver
GFSchunkserver
chunkserver
GFS
control
§ verteilt Aufgaben auf Clients
§ MR Workers (viele)
§ führen zugewiesene Aufgaben aus
Datenbanken / Kapitel 11: Datenbankschnittstellen
9
MapReduce als Programmiermodell
§ MapReduce setzt auf ein einfaches Programmiermodell,
welches von funktionalen Programmiersprachen
(z.B. ML und Haskell) inspiriert ist
§ Daten als Schlüssel-Wert-Paare (key-value pairs)
§ Aufgabe in Form von zwei Funktionen ausgedrückt
§ map() : (k1, v1) => list(k2, v2) liest die Eingabedaten als
Schlüssel-Wert-Paare (k1, v1) und produziert für jedes
einen oder mehrere Schlüssel-Wert-Paare (k2, v2)
§ reduce() : (k2, list(v2)) => list(k3, v3) liest Ausgabe von map()
gruppiert und sortiert nach Schlüssel k2 und gibt für jede Gruppe
ein oder mehrere Schlüssel-Wert-Paare (k3, v3) aus
Datenbanken / Kapitel 11: Datenbankschnittstellen
10
MapReduce als Programmiermodell
§ Funktion map() wird verteilt auf den Eingabedaten im GFS
ausgeführt; jeder MR Worker soll die Funktion lokal
auf den bei ihm gespeicherten Daten ausführen
§ Zwischen Ausführung der Funktionen map() und reduce()
werden die Daten nach den Werten der Schlüssel k2
gruppiert und sortiert; alle Schlüssel-Wert-Paare mit
bestimmtem Wert k2 landen auf einem Rechner
§ Funktion reduce() wird verteilt auf gruppierten und
sortierten Schlüssel-Wert-Paaren (k2, list(v2)) ausgeführt
und schreibt Ausgabe ins GFS
Datenbanken / Kapitel 11: Datenbankschnittstellen
11
Wörter Zählen mit MapReduce
§ Problem: Zähle wie oft jedes Wort in einer sehr großen
Dokumentensammlung vorkommt
1
2
3
4
5
1
2
3
4
5
6
7
map ( long did , String content ) {
for ( String word : content . split ()) {
emit ( word , 1);
}
}
reduce ( String word , List < long > counts ) {
int total = 0;
for ( long count : counts ) {
sum += count ;
}
emit ( word , total );
}
Datenbanken / Kapitel 11: Datenbankschnittstellen
12
Ausführung in MapReduce
Map
d123
a x b
b a y
M1
(a,d123),
(x,d242),
…
Mn
(b,d123),
(y,d242),
…
d242
b y a
x a b
map()
Datenbanken / Kapitel 11: Datenbankschnittstellen
Sort
Reduce
1
1
m
1
1
m
m
m
partition()
compare()
(a,d123),
(a,d242),
…
(x,d123),
(x,d242),
…
R1
(a,4)
(b,4)
…
Rm
(x,2)
(y,2)
…
reduce()
13
Apache Hadoop
§ Open-Source Implementierung von MapReduce
§
§ Hadoop File System (HFS)
§ name node (master)
§ data node (chunkserver)
§ Hadoop MapReduce
§ job tracker (master)
§ task tracker (worker)
Doug Cutting
§ Produktiver Einsatz auf Clustern mit > 10.000 Rechnern
bei Unternehmen wie Yahoo!, Ebay, etc.
§ https://hadoop.apache.org
Datenbanken / Kapitel 11: Datenbankschnittstellen
14
Apache Hive
§ Apache Hive bietet eine an SQL
angelehnte Anfragesprache
(Selektion, Projektion, Join)
zum Verarbeiten im HDFS
gespeicherter Daten
(z.B. als CSV-Datei)
§ Anfragen werden automatisch in einen oder mehrere
MapReduce-Jobs übersetzt und dann
verteilt auf den Daten ausgeführt
§ https://hive.apache.org
Datenbanken / Kapitel 11: Datenbankschnittstellen
15
Apache PIG
§ Apache Pig bietet eine Programmiersprache,
die Ideen von SQL und prozeduraler
Programmiersprachen vereint
§ Programme werden automatisch in
ein oder mehrere MapReduce-Jobs
übersetzt und dann verteilt auf
den Daten ausgeführt
§ https://pig.apache.org
Datenbanken / Kapitel 11: Datenbankschnittstellen
16
Beispiel Apache Pig
1
2
USERS = load ’ data / users ’ using PigStorage ( ’\ t ’)
as ( id : int , email : chararray , language : chararray , location : chararray );
3
4
5
TRANSACTIONS = load ’ data / transactions ’ using PigStorage ( ’\ t ’)
as ( id : int , product : int , user : int , purchase_amount : double , description : chararray );
6
7
A = JOIN TRANSACTIONS by user LEFT OUTER , USERS by id ;
8
9
B = GROUP A by product ;
10
11
12
13
14
15
C = FOREACH B {
LOCS = DISTINCT A . location ;
GENERATE group , COUNT ( LOCS ) as location_count ;
};
DUMP C ;
Datenbanken / Kapitel 11: Datenbankschnittstellen
17
Apache Drill und Cloudera Impala
§ Apache Drill und Cloudera Impala
erlauben SQL Anfragen für
Daten, die z.B. in HDFS
gespeichert sind
§ Im Gegensatz zu Apache Hive
und Apache Pig werden die
Anfragen selbst bearbeitet
und nicht in MapReduce-Jobs
übersetzt
§ https://drill.apache.org
§ http://impala.io
Datenbanken / Kapitel 11: Datenbankschnittstellen
18
Distributionen von Hadoop & Co
§ Hadoop, Hive, Pig, etc. sind Open-Source Projekte
mit großer Unterstützung namhafter Unternehmen;
sie entwickeln sich mit unterschiedlicher Geschwindigkeit
und es ist nicht garantiert, dass die neuesten Versionen
der Projekte miteinander kompatibel sind
§ Distributoren stellen zueinander kompatible Versionen
der Projekte mit Dokumentation und zusätzlichen
Werkzeugen (z.B. zur Installation) zur Verfügung
§ http://www.cloudera.com
§ http://hortonworks.com
§ http://mapr.com
Datenbanken / Kapitel 11: Datenbankschnittstellen
19
12.3 Key-Value Stores
§ Key-Value Stores speichern Schlüssel-Wert-Paare
wie (37821, „Max Müller“) und bieten zumindest
folgende Methoden zum Zugriff
§ set(key, value) legt Wert zu Schlüssel ab
§ get(key) holt Wert zu Schlüssel
sofern die zugrundeliegende Datenstruktur die Ordnung der
Werte beibehält, gibt es zudem Bereichsanfragen
§ range(low, high) holt Werte mit Schlüsseln im Bereich
§ Schlüssel und Werte sind intern meist byte[], Entwickler
muss sich um Serialisierung/Deserialisierung kümmern
Datenbanken / Kapitel 11: Datenbankschnittstellen
20
BerkeleyDB
§ BerkeleyDB ist ein Key-Value-Store zum Betrieb auf
einem Rechner, der zudem (ähnlich SQLite) in
Anwendungen eingebettet werden kann
§ BerkeleyDB basiert auf einem B+-Baum als Datenstruktur
und unterstützt somit auch Bereichsanfragen
§ BerkeleyDB Java Edition bietet sogenannte Stored
Collections; diese implementieren die von Java
bekannten Interfaces List und Map und lagern
Daten transparent im Sekundärspeicher aus
§
http://www.oracle.com/us/products/database/berkeley-db/overview/index.html
Datenbanken / Kapitel 11: Datenbankschnittstellen
21
Redis
§ Redis ist ein verteilter Key-Value Store,
der Daten im Hauptspeicher der
Rechner hält, sofern keine
Dauerhaftigkeit sichergestellt
werden muss
§ Replikation (d.h. die gleichen Daten werden mehrfach
gehalten) erlaubt zudem eine Skalierung
bei Wachstum der Anfragelast
§ http://redis.io
Datenbanken / Kapitel 11: Datenbankschnittstellen
22
12.4 Extensible Record Stores
§ Extensible Record Stores erweitern die Idee von KeyValue Stores, indem sie für den Wert eine Struktur
(ähnlich dem Schema einer Tabelle) zulassen
§ Schlüssel ist weiterhin z.B. ein byte[]
§ Wert besteht aus Paaren von Spaltenname und -wert
§ Im Gegensatz zum relationalen Modell gibt es kein fixes
Schema und das System ist für dünnbesetzte Daten
optimiert, d.h. Spalten für die meisten Daten unbekannt
§ BigTable als ein bei Google entwickeltes System war
Vorreiter der Extensible Record Stores
Datenbanken / Kapitel 11: Datenbankschnittstellen
23
Hbase & Co
§ Open-Source Implementierung
von Google‘s BigTable [4]
§ Daten werden im verteilten Dateisystem
HDFS von Hadoop gespeichert und
repliziert zur Lastverteilung und
Ausfallsicherheit
§ Transaktionen nur für Zugriff auf einzelne Schlüssel
§ https://hbase.apache.org
§ Ähnliches Projekt: http://cassandra.apache.org
Datenbanken / Kapitel 11: Datenbankschnittstellen
24
12.5 Dokumentorientierte Datenbanken
§ Dokumentenorientierte Datenbanken (document
databases) modellieren die Daten als Dokumente in einem
Format wie JSON (JavaScript Object Notation)
§ Beispiel: Student als JSON-Dokument
1
{
2
3
4
5
6
7
8
9
10
11
12
13
}
" matrnr " : 37821 ,
" name " : " Max " ,
" vorname " : " M ü ller " ,
" semester " : 9 ,
" anschrift " : {
" strasse " : " hauptstra ß e " ,
" hausnummer " : 34 ,
" plz " : 66117 ,
" stadt " : " saarbr ü cken "
}
" vorlesungen " : [ " Datenbanken " ," Programmierung 2 " ]
Datenbanken / Kapitel 11: Datenbankschnittstellen
25
Dokumentenorientierte Datenbanken
§ Zugriff auf so gespeicherte Daten dann mittels
Anfrageprädikaten z.B.
1
{ name : " Max " , semester :9}
§ Systeme bieten teilweise zusätzliche Funktionalität
§ Gruppierung und Aggregation (MongoDB)
§ MapReduce zur Anfrageformulierung (CouchDB)
§ Indizes auf ausgewählten Attributen (MongoDB, CouchDB)
§ Verteilung und Replikation zur Skalierung bei großen
Datenmengen und/oder hoher Anfragelast
Datenbanken / Kapitel 11: Datenbankschnittstellen
26
MongoDB & CouchDB
§ MongoDB erwartet Dokumente
im JSON-Format; erlaubt
Anfrageterminologie an
SQL angelehnt
§ https://www.mongodb.org
§ CouchDB erwartet Dokumente
im JSON-Format; erlaubt
Implementierung von
Anfragen in MapReduce
§ http://couchdb.apache.org
Datenbanken / Kapitel 11: Datenbankschnittstellen
27
12.6 Graphdatenbanken
§ Graphdatenbanken (graph databases) modellieren die
Daten als einen gerichteten Graphen mit
Beschriftungen an Knoten und Kanten
hört
VorlNr: 1303
Titel : „Datenbanken“
SWS : 4
liest
MatrNr: 37821
Vorname : „Max“
Name : „Müller“
Semester : 9
Datenbanken / Kapitel 11: Datenbankschnittstellen
ProfNr: 22
Vorname : „Donald“
Name : „Knuth“
28
Graphdatenbanken
§ Festes Schema, wie beim relationalen Modell, ist meist
nicht erforderlich, d.h. neue Beschriftungen für
Kanten und Knoten können hinzugefügt werden
§ Triple Stores für Daten im Semantic-Web Format RDF
mit Anfragesprache SPARQL sind Spezialfall von
Graphdatenbanken (vgl. Vlen zu Linked Open Data)
§ Anfragen als Pfadausdrücken formuliert, z.B.
1
(? s ) = h ö rt = > v <= liest ( ) = > liest ( titel : " Datenbanken " )
findet Studenten, die Vorlesung beim Professor hören,
der (auch) Datenbanken liest
Datenbanken / Kapitel 11: Datenbankschnittstellen
29
Neo4J
§ Neo4J zum Betrieb auf einem
Rechner; bietet mit Cypher eine
eigene Anfragesprache, die
auch Graphoperationen wie
kürzeste Pfade unterstützt
§ http://neo4j.com
§ OrientDB zum Betrieb auf mehreren
Rechnern; unterstützt SQL als
Anfragesprache
§ http://orientdb.com
Datenbanken / Kapitel 11: Datenbankschnittstellen
30
Zusammenfassung
§ NoSQL bieten Alternativen zu RDBMSs für Anwendungen,
die z.B. keine ACID-Transaktionen benötigen, kein
rigides Schema festlegen können oder ihre Daten auf
viele herkömmliche Rechner verteilen müssen
§ Bei rudimentären Systemen (z.B. Key-Value Stores)
müssen Entwickler vieles, was bei einem RDBMS
gegeben ist, beispielsweise Joins, selbst implementieren
§ SQL als Anfragesprache spielt auch in NoSQL-Systemen
eine Rolle und wird zunehmend „nachgerüstet“
(z.B. Apache Drill und Cloudera Impala)
Datenbanken / Kapitel 11: Datenbankschnittstellen
31
Literatur
[1]
A. Kemper und A. Eickler: Datenbanksysteme – Eine
Einführung, De Gruyter Oldenbourg, 2015 (Kapitel 21)
[2]
L. Wiese: Advanced Data Management for SQL,
NoSQL, Cloud and Distributed Databases,
DeGruyter, 2015
[3]
J. Dean und S. Ghemawat: MapReduce: a flexible data
processing tool, OSDI 2004
[4]
F. Chang, J. Dean, S. Ghemawat, W. C. Hsieh, D. A.
Wallach, M. Burrows, T. Chandra, A. Fikes, R. E.
Gruber: Bigtable: A Distributed Storage System for
Structured Data, ACM TODS 26(2), 2008
Datenbanken / Kapitel 11: Datenbankschnittstellen
32
Herunterladen