Vortrag - HTW Dresden

Transcription

Vortrag - HTW Dresden
Polyglotte Persistenz
&
Multi-Model Datenbanken
192. Datenbankstammtisch
29.10.2014
Michael Hackstein
@mchacki
www.arangodb.com
Michael Hackstein
‣ ArangoDB Kern Entwickler
‣ Web Frontend
‣ Graphen Visualisierung
‣ Graphen Funktionalität
!
!
‣ Organisator der cologne.js
!
!
‣ MS. Inf.
(Datenbanken und
Informations Systeme)
2
Single-Model Datenarchitektur
Relationale Welt
3
Die Ära von Multi-Model bricht an
NoSQL Welt
Dokumente - JSON
{
{
}
}
“type":
“color":
“size":
“material”:
“form”:
“type“:
"pants",
“waist":
32,
“length”:
34,
“color":
"blue",
“material”: “cotton"
{
‣ Basierend
auf Key-Value Stores
“type":
"sweater",
“color":
"blue",
‣ Speichern
Dokumente mit logischer
“size":
“M”,
“material”: “wool”,
“form”:
“turtleneck"
Zusammengehörigkeit
in „collections“
}
{
“type“: ‣
"television",
Dateneinträge
werden als Dokumente mit
“diagonal screen size":
46,
“hdmi inputs":
3,
Attributstruktur
behandelt
“wall mountable":
true,
“built-in digital tuner": true,
‣ contrast
Ermöglichen
Abfragen und Indizierung von
“dynamic
ratio”: “50,000:1”,
Resolution”:
“1920x1080”
}
Attributwerten
"sweater",
"blue",
“M”,
“wool”,
“turtleneck"
Graphen
‣ Fokussiert auf m-zu-n Beziehungen zwischen Objekten
‣ Speichern „property graphs“. (Knoten und Kanten haben
Attribute)
‣ Einfache Abfragen für Pfade beliebiger und womöglich
unbekannter Länge
Key Value
‣
‣
‣
‣
‣
Speichere Daten immer zu einem Unique-Key
Daten werden nicht von dem System analysiert
Insbesondere gibt es kein Schema
Und keine Sekundäre Indexe
Skalieren und Partitionierung vergleichsweise einfach
K => V
K => V
K => V
K => V
K => V
K => V
K => V
K => V
K => V
K => V
K => V
K => V
K => V
K => V
K => V
K => V
K => V
K => V
K => V
K => V
K => V
K => V
K => V
K => V
K => V
K => V
K => V
K => V
K => V
K => V
K => V
K => V
K => V
K => V
K => V
K => V
K => V
K => V
K => V
K => V
K => V
K => V
K => V
K => V
4
Ein E-Kommerz System: Relationale Sicht
Sales-History
Einkaufswagen
Recommendations
Kunden
Produkt-Katalog
5
Polyglotte Persistenz
User Sessions
Financial Data
User Sessions
Financial Data
Redis
RDBMS
KeyValue
RDBMS
Shopping Cart
Recommendations
Shopping Cart
Recommendations
Riak
Neo4J
KeyValue
Graph
Product Catalog
Analytics
Product Catalog
Analytics
MongoDB
Cassandra
Document
Column
Reporting
User activity log
Reporting
User activity log
RDBMS
Cassandra
RDBMS
Column
Quelle: Martin Fowler, http://martinfowler.com/articles/nosql-intro.pdf
6
Single Model NoSQL-Datenbanken
Sales-History
{
{
“userID":
239178239,
“productID”: 128623883,
“number":
5,
“price”:
12.20,
}
DocumentStore
{
}
Kunden
Recommendations
GraphStore
}
{
“userID":
239178239,
“productID”: 128623883,
“number":
5,
“price”:
12.20,
}
{
423453453=>
874365563=>
4328,
6378,
3245,
3245,
“shirt”, “L”, 1, 12.99
“sweater”, “M”, 2, 37.95
“sweater”, “blue”, 1, 99.95
“pants”, “32/34”, “black”, 1, 99.95
KeyValueStore
}
5463, “shirt”, “S”, 1, 9.99
6378, “sweater”, “M”, 2, 37.95
3245, “pants”, “32/34”, “black”, 1, 99.95
}
Einkaufswagen
"Smith",
“2012-11-01",
121,
“abc”,
“def”
DocumentStore
“Name":
“lastLogin”:
“Visits":
“shipping address”:
{
“type":
“color":
“size":
“material”:
“form”:
"sweater",
"blue",
“M”,
“wool”,
“turtleneck"
{
{
“Name":
“lastLogin”:
“Visits":
“shipping address”:
“shipping address”:
}
"Meyer",
“2012-11-21",
20,
“xyz”,
“type":
“color":
“size":
“material”:
“form”:
"sweater",
"blue",
“M”,
“wool”,
“turtleneck"
“type“:
DocumentStore
“diagonal screen size":
“type“:
"pants",
“waist":
32,
“length”:
34,
“color":
"blue",
“material”: “cotton"
}
"television",
46,
“hdmi inputs":
3,
“wall mountable":
true,
“built-in digital tuner": true,
“dynamic contrast ratio”: “50,000:1”,
Resolution”:
“1920x1080”
Produkt-Katalog
7
Vorteile
‣ Natürliche Abbildung der
Daten in der DB
‣ DB ist optimiert für genau
dieses Datenformat
‣ Abfragen sind
zugeschnitten auf dieses
Format
&
Aufwand
‣ Daten müssen redundant
gehalten und synchronisiert
werden
‣ Mehrere Technologien
müssen verwendet werden
‣ Administrationsaufwand ist
deutlich höher
‣ Fokussierung auf die
Anwendungslogik
8
Alternative: Multi Model Datenbanken
‣ Können mehrere Datenformate natürlich speichern:
‣ Key-Value-Paare
‣ Dokumente
‣ Graphen
‣ Abfrage Möglichkeiten für jedes Format
‣ Unterschiedliche Abfragen sind kombinierbar
9
Polyglotte Persistenz
User Sessions
Financial Data
User Sessions
Financial Data
KeyValue
RDBMS
ArangoDB
ArangoDB
Shopping Cart
Recommendations
Shopping Cart
Recommendations
KeyValue
Graph
ArangoDB
ArangoDB
Product Catalog
Analytics
Product Catalog
Analytics
Document
Column
ArangoDB
Cassandra
Reporting
User activity log
Reporting
User activity log
RDBMS
Column
RDBMS
Cassandra
Source: Martin Fowler, http://martinfowler.com/articles/nosql-intro.pdf
10
Use Case: Multi-Model-Databases
Sales-History
{
{
“userID":
239178239,
“productID”: 128623883,
“number":
5,
“price”:
12.20,
}
DocumentStore
{
}
Kunden
Recommendations
GraphStore
}
{
“userID":
239178239,
“productID”: 128623883,
“number":
5,
“price”:
12.20,
}
{
423453453=>
874365563=>
4328,
6378,
3245,
3245,
“shirt”, “L”, 1, 12.99
“sweater”, “M”, 2, 37.95
“sweater”, “blue”, 1, 99.95
“pants”, “32/34”, “black”, 1, 99.95
KeyValueStore
}
5463, “shirt”, “S”, 1, 9.99
6378, “sweater”, “M”, 2, 37.95
3245, “pants”, “32/34”, “black”, 1, 99.95
}
Einkaufswagen
"Smith",
“2012-11-01",
121,
“abc”,
“def”
DocumentStore
“Name":
“lastLogin”:
“Visits":
“shipping address”:
{
“type":
“color":
“size":
“material”:
“form”:
"sweater",
"blue",
“M”,
“wool”,
“turtleneck"
{
{
“Name":
“lastLogin”:
“Visits":
“shipping address”:
“shipping address”:
}
"Meyer",
“2012-11-21",
20,
“xyz”,
“type":
“color":
“size":
“material”:
“form”:
"sweater",
"blue",
“M”,
“wool”,
“turtleneck"
“type“:
DocumentStore
“diagonal screen size":
“type“:
"pants",
“waist":
32,
“length”:
34,
“color":
"blue",
“material”: “cotton"
}
"television",
46,
“hdmi inputs":
3,
“wall mountable":
true,
“built-in digital tuner": true,
“dynamic contrast ratio”: “50,000:1”,
Resolution”:
“1920x1080”
Produkt-Katalog
11
Meine 4 Lieblingsfeatures von
‣ MULTI-MODEL speichert Graphen und Dokumente
‣ AQL mit eingebauten Joins & Traversals
‣ ACID beinhaltet Transaktionen über mehrere Collections
‣ FOXX erweitere die API und passe sie an deine Bedürfnisse an
12
AQL
‣ Dokument Abfrage:
FOR user IN users FILTER user.active == true
FOR game IN games FILTER game.player == user._id
RETURN {
username: user.name,
score: game.score
}
‣ Verändere Dokumente:
FOR u IN users FILTER u.status == 'not active'
UPDATE u WITH { active: false } IN users
!
‣ Graphen Traversal:
RETURN GRAPH_TRAVERSAL(
"underground_plan", "stations/main_station",
"outbound", {minDepth: 2, maxDepth: 5}
)
13
ACID - Transaktionen
‣ Führe eine Transaktion aus:
db._executeTransaction({
collections: {
write: ["users", "products"],
read: "recommendations"
},
action: function() {
// all operations go here
throw "failure"; // Triggers rollback
!
}
});
14
Vorteile
‣ Natürliche Abbildung der
Daten in der DB
‣ DB ist optimiert für genau
dieses Datenformat
‣ Abfragen sind
zugeschnitten auf dieses
Format
&
Aufwand
‣ Daten müssen redundant
gehalten und synchronisiert
werden
‣ Mehrere Technologien
müssen verwendet werden
‣ Administrationsaufwand ist
deutlich höher
‣ Fokussierung auf die
Anwendungslogik
‣ Nur noch eine Technology
nötig
15
Foxx
‣ Füge deine eigene, versionierbare REST-API zu ArangoDB
hinzu, geschrieben in JavaScript
‣ Verwende sie als Web Service von Rails, Node.js etc.
‣ Verwende sie direkt als Speicher für Web-frameworks wie AngularJS,
EmberJS, Backbone etc.
‣ OAuth2.0 und HTTP-Basic Auth eingebaut
‣ Operationen sind in der Datenbank gekapselt
‣ Weniger Netzwerkverkehr, direkter Datenzugriff
‣ Erhöht den Datenschutz
➡ Setups mit mehreren Endgeräten
➡ Microservices
/\
(~(
) )
/\_/\
( _-----_(@ @)
(
\ /
/|/--\|\ V
" "
" "
16
Eine Übersicht über
features
‣ Open Source und Kostenfrei (Apache 2 license)
‣ Sharding & Replication eingebaut
‣ JavaScript (V8 ist im Server eingebettet)
‣ Treiber für viele Programmiersprachen
‣ Eingebautes Web Interface
‣ Vollständige Dokumentation
‣ Professioneller sowie Community Support
17
Technische Details
‣ Automatische Schema Erkennung
‣ „Schema-freie“ Daten unwahrscheinlich
‣ Viele (Teil-)schemata sind zwischen Dokumenten geteilt
‣ Datenbankkern geschrieben in C++
‣ JavaScript und C++ für weitere Funktionalität
‣ Performanz kritische Teile können nach C++ portiert werden
‣ Daten werden als Memory mapped Files im Speicher gehalten
‣ Verschiedene Sekundäre Indizes
‣ Hashindex, Skiplistindex
‣ Geoindex
‣ Fulltextindex
18
Sharding Umsetzung
Coordinator
Coordinator
Consensus
DBServer
Replica
DBServer
Replica
19
Sharding Verteilung
‣ Beim erstellen einer Collection müssen angegeben werden:
‣ Anzahl der verwendeten Shards
‣ Menge von Attributen welche den Shardkey festlegen (default: _key)
‣ Derzeit nicht zur Laufzeit änderbar
‣ Dokumente werden anhand eines Hashes über die ShardAttribute verteilt.
‣ Abfragen können auch über alle anderen Attribute erfolgen
‣ Der ganze Cluster muss befragt werden
‣ Weniger Optimierungsmöglichkeiten
!
‣ Eine Sinnvolle Menge von Shardattributen muss frühzeitig
bestimmt werden
20
Graphen in ArangoDB (Einfach)
‣ Edgecollection speichert Kanten zwischen beliebigen anderen
Collections
‣ Uneingeschränkte Kanten Erstellung
‣ Keine Garantien über den Graphen
‣ Lose Enden, Verwaiste Kanten
‣ Knoten unabhängig von ihren Kanten
21
Graphen in ArangoDB (Erweitert)
‣ Graphen-Modul erlaubt Bedingungen in Graphen
‣ Kanten können auf Start- und Ziel-Collections eingeschränkt
werden
‣ Knoten sind nichtmehr unabhängig von ihren Kanten
‣ Wenn ein Knoten gelöscht wird, werden Kanten ebenso
gelöscht
‣ Wenn eine Kante erstellt wird, wird geprüft ob die Knoten
existieren
‣ Mehrere Collections können in einem Graphen
zusammengefasst werden und in einer Abfrage einfach
verwendet werden
22
Vielen Dank
!
!
!
‣ Gibt es Fragen?
‣ Twitter/github: @mchacki
‣ Email: [email protected]
‣ Google Group: https://groups.google.com/forum/#!forum/arangodb
23