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