vorlesung graphendatenbanken an der universität hof
Post on 22-Nov-2014
2.240 Views
Preview:
DESCRIPTION
TRANSCRIPT
GRAPHENDATENBANKENHenning Rauch
Universität Hof - 04.05.20121
AGENDA
• Überblick
• Neo4J
• InfiniteGraph
• Fallen-8
2
ÜBERBLICK
„Graph databases will come into vogue. One key gap in the Hadoop ecosystem is for graph databases, which support rich mining and visualization of relationships, influence, and behavioral propensities. The market for graph databases will boom in 2012 as companies everywhere adopt them for social media analytics, marketing campaign optimization, and customer experience fine-tuning. We will see VCs put big money behind graph database and analytics startups. Many big data platform and tool vendors will acquire the startups to supplement their expanding Hadoop, NoSQL, and enterprise data warehousing (EDW) portfolios. Social graph analysis, although not a brand-new field, will become one of the most prestigious specialties in the data science arena, focusing on high-powered drilldown into polystructured behavioral data sets.“
3
Warum macht es Sinn sich damit zu beschäftigen
Quelle: http://blogs.forrester.com/james_kobielus/11-12-19-the_year_ahead_in_big_data_big_cool_new_stuff_looms_large
ÜBERBLICK
4
Beispiel eines Realworld Graphen - facebook
Quelle: http://www.facebook.com/press/info.php?statistics
ÜBERBLICK
5
Beispiel eines Realworld Graphen - NYT „Cascade“
Quelle: http://nytlabs.com/projects/cascade.html
ÜBERBLICK
6
Beispiel eines Realworld Graphen - Telefon-Rechnung
ÜBERBLICK
7
Abgrenzung zu RDBMS - Property graphRDBMS GraphDB
ÜBERBLICK
7
Abgrenzung zu RDBMS - Property graphRDBMS GraphDB
PersonPerson
Id Name
0 Henning Rauch
1 René Peinl
2 Foo Bar
3 Bruce Schneier
4 Linus Torwalds
ÜBERBLICK
7
Abgrenzung zu RDBMS - Property graphRDBMS GraphDB
PersonPerson
Id Name
0 Henning Rauch
1 René Peinl
2 Foo Bar
3 Bruce Schneier
4 Linus Torwalds1
0
4
3
2
ÜBERBLICK
7
Abgrenzung zu RDBMS - Property graphRDBMS GraphDB
PersonPerson
Id Name
0 Henning Rauch
1 René Peinl
2 Foo Bar
3 Bruce Schneier
4 Linus Torwalds1
0
4
3
2Kennt_relKennt_rel
Id_1 Id_2
1 0
1 2
1 3
1 4
0 1
0 2
0 3
0 4
3 4
4 3
ÜBERBLICK
7
Abgrenzung zu RDBMS - Property graphRDBMS GraphDB
PersonPerson
Id Name
0 Henning Rauch
1 René Peinl
2 Foo Bar
3 Bruce Schneier
4 Linus Torwalds1
0
4
3
2Kennt_relKennt_rel
Id_1 Id_2
1 0
1 2
1 3
1 4
0 1
0 2
0 3
0 4
3 4
4 3
ÜBERBLICK
7
Abgrenzung zu RDBMS - Property graphRDBMS GraphDB
PersonPerson
Id Name
0 Henning Rauch
1 René Peinl
2 Foo Bar
3 Bruce Schneier
4 Linus Torwalds1
0
4
3
2Kennt_relKennt_rel
Id_1 Id_2
1 0
1 2
1 3
1 4
0 1
0 2
0 3
0 4
3 4
4 3
TagTag
Id Name
0 .NET
1 Java
2 PKI
3 NoSQL
ÜBERBLICK
7
Abgrenzung zu RDBMS - Property graphRDBMS GraphDB
PersonPerson
Id Name
0 Henning Rauch
1 René Peinl
2 Foo Bar
3 Bruce Schneier
4 Linus Torwalds1
0
4
3
2Kennt_relKennt_rel
Id_1 Id_2
1 0
1 2
1 3
1 4
0 1
0 2
0 3
0 4
3 4
4 3
NoSQL
PKI
TagTag
Id Name
0 .NET
1 Java
2 PKI
3 NoSQL
Java
.NET
ÜBERBLICK
7
Abgrenzung zu RDBMS - Property graphRDBMS GraphDB
PersonPerson
Id Name
0 Henning Rauch
1 René Peinl
2 Foo Bar
3 Bruce Schneier
4 Linus Torwalds1
0
4
3
2Kennt_relKennt_rel
Id_1 Id_2
1 0
1 2
1 3
1 4
0 1
0 2
0 3
0 4
3 4
4 3
NoSQL
PKI
Tags_relTags_relTags_rel
Tag_Id Person_Id Signifikanz
0 0 5
1 1 5
2 1 6
2 3 10
3 0 7
3 1 7
TagTag
Id Name
0 .NET
1 Java
2 PKI
3 NoSQL
Java
.NET
ÜBERBLICK
7
Abgrenzung zu RDBMS - Property graphRDBMS GraphDB
PersonPerson
Id Name
0 Henning Rauch
1 René Peinl
2 Foo Bar
3 Bruce Schneier
4 Linus Torwalds1
0
4
3
2Kennt_relKennt_rel
Id_1 Id_2
1 0
1 2
1 3
1 4
0 1
0 2
0 3
0 4
3 4
4 3
NoSQL
PKI
Tags_relTags_relTags_rel
Tag_Id Person_Id Signifikanz
0 0 5
1 1 5
2 1 6
2 3 10
3 0 7
3 1 7
TagTag
Id Name
0 .NET
1 Java
2 PKI
3 NoSQL
7
7
10
6
Java
5
.NET
5
ÜBERBLICK
7
Abgrenzung zu RDBMS - Property graphRDBMS GraphDB
PersonPerson
Id Name
0 Henning Rauch
1 René Peinl
2 Foo Bar
3 Bruce Schneier
4 Linus Torwalds1
0
4
3
2Kennt_relKennt_rel
Id_1 Id_2
1 0
1 2
1 3
1 4
0 1
0 2
0 3
0 4
3 4
4 3
NoSQL
PKI
Tags_relTags_relTags_rel
Tag_Id Person_Id Signifikanz
0 0 5
1 1 5
2 1 6
2 3 10
3 0 7
3 1 7
TagTag
Id Name
0 .NET
1 Java
2 PKI
3 NoSQL
7
7
10
6
Java
5
.NET
5
Knoten =Eigenschaften + Kanten
ÜBERBLICK
8
Abgrenzung zu RDBMS - SkalierbarkeitKennt_relKennt_rel
Id_1 Id_2
1 0
1 2
1 3
1 4
0 1
0 2
0 3
0 4
3 4
4 3
Tags_relTags_relTags_rel
Tag_Id Person_Id Signifikanz
0 0 5
1 1 5
2 1 6
2 3 10
3 0 7
3 1 7
• Relations-Tabellen sind das Problem, sie agieren als globaler Index über Beziehungen zwischen Daten
• Je größer die Relation, desto länger dauert es die interessante Information (z.B. Nachbarschaft) zu finden
• Lösung der Graphendatenbank: Information über Beziehungen (Kanten) werden lokal am Knoten abgelegt
ÜBERBLICK
9
Abgrenzung zu RDBMS - Aber aber aber
Kennt_relKennt_rel
Id_1 Id_2
1 0
1 2
1 3
1 4
0 1
0 2
0 3
0 4
3 4
4 3
• Aufgabe: Finde Personen, welche 0 kennt.
• Lineares Scannen der Relationen-Tabelle: O(n)
• Abfragen eines Index: O(log n)
• Bei RDBMS große Performance-Einbrüche bei rekursiven Such-Algorithmen (da Abhängigkeit zu n)
• Graphendatenbanken lösen diese Aufgabe i.A. in O(1), unabhängig von der Gesamtgröße des Graphen
ÜBERBLICK
10
Abgrenzung zu anderen NoSQL ProduktenGröße
Komplexität
> 90% der Anwendungsfälle
Quelle: http://www.slideshare.net/jexp/neo4j-graph-database-presentation-german
ÜBERBLICK
10
Abgrenzung zu anderen NoSQL Produkten
Key/Value stores
Größe
Komplexität
> 90% der Anwendungsfälle
Quelle: http://www.slideshare.net/jexp/neo4j-graph-database-presentation-german
ÜBERBLICK
10
Abgrenzung zu anderen NoSQL Produkten
Key/Value stores
Bigtableclones
Größe
Komplexität
> 90% der Anwendungsfälle
Quelle: http://www.slideshare.net/jexp/neo4j-graph-database-presentation-german
ÜBERBLICK
10
Abgrenzung zu anderen NoSQL Produkten
Key/Value stores
Bigtableclones
DokumentDatenbanken
Größe
Komplexität
> 90% der Anwendungsfälle
Quelle: http://www.slideshare.net/jexp/neo4j-graph-database-presentation-german
ÜBERBLICK
10
Abgrenzung zu anderen NoSQL Produkten
Key/Value stores
Bigtableclones
DokumentDatenbanken
Graphendatenbanken
Größe
Komplexität
> 90% der Anwendungsfälle
Quelle: http://www.slideshare.net/jexp/neo4j-graph-database-presentation-german
ÜBERBLICK
10
Abgrenzung zu anderen NoSQL Produkten
Key/Value stores
Bigtableclones
DokumentDatenbanken
Graphendatenbanken
In-MemoryGraphendatenbanken
Größe
Komplexität
> 90% der Anwendungsfälle
Quelle: http://www.slideshare.net/jexp/neo4j-graph-database-presentation-german
ÜBERBLICK
11
Graphenprozessierung vs. Graphendatenbank
OLAP
Quelle: http://jim.webber.name/2011/08/24/66f1fb4b-83c3-4f52-af40-ee6382ad2155.aspx
OLTPU
niv
ers
ell
Gra
ph
affi
n
ÜBERBLICK
11
Graphenprozessierung vs. Graphendatenbank
OLAP
Quelle: http://jim.webber.name/2011/08/24/66f1fb4b-83c3-4f52-af40-ee6382ad2155.aspx
OLTPU
niv
ers
ell
Gra
ph
affi
n
RDBMS
ÜBERBLICK
11
Graphenprozessierung vs. Graphendatenbank
OLAP
Quelle: http://jim.webber.name/2011/08/24/66f1fb4b-83c3-4f52-af40-ee6382ad2155.aspx
OLTPU
niv
ers
ell
Gra
ph
affi
n
Hadoop
RDBMS
ÜBERBLICK
11
Graphenprozessierung vs. Graphendatenbank
OLAP
Quelle: http://jim.webber.name/2011/08/24/66f1fb4b-83c3-4f52-af40-ee6382ad2155.aspx
OLTPU
niv
ers
ell
Gra
ph
affi
n
Pregel
Hadoop
RDBMS
ÜBERBLICK
11
Graphenprozessierung vs. Graphendatenbank
OLAP
Quelle: http://jim.webber.name/2011/08/24/66f1fb4b-83c3-4f52-af40-ee6382ad2155.aspx
OLTPU
niv
ers
ell
Gra
ph
affi
n
Graphendatenbanken
Pregel
Hadoop
RDBMS
ÜBERBLICK
11
Graphenprozessierung vs. Graphendatenbank
OLAP
Quelle: http://jim.webber.name/2011/08/24/66f1fb4b-83c3-4f52-af40-ee6382ad2155.aspx
OLTPU
niv
ers
ell
Gra
ph
affi
n
Graphendatenbanken In-MemoryGraphendatenbanken
Pregel
Hadoop
RDBMS
ÜBERBLICK
• Neo4J
• InfiniteGraph (Objectivity)
• Sones GraphDB
• AllegroGraph
• OrientDB
12
Graphendatenbanken
• HypergraphDB
• DEX
• FlockDB (Twitter)
• Trinity (Microsoft)
• Fallen-8
Quelle: http://www.slideshare.net/jexp/neo4j-graph-database-presentation-german
13
NEO4J
• Graphendatenbank + Lucene Index
• ACID (Isolationsgrad read committed)
• Hoch-Verfügbarkeit (HA) in Enterprise Edition
• 32 Mrd. Knoten, 32 Mrd. Kanten, 64 Mrd. Eigenschaften
• Embedded oder via REST-API
• Support für Blueprints
14
Überblick
NEO4J
15
Architektur
Disk(s)
Record Dateien Transaktions-Log
Caches (Dateisystem & Objekt)
Cypher/Gremlin
Core API (Java)
REST API
Java/Ruby/.../C# API
HA
Quelle: http://www.slideshare.net/rheehot/eo4j-12713065
NEO4J
16
Ondisk Layout Beispiel
Name: AliceAlter : 23
Name: BobAlter : 42
Name: CarolAlter : 22
kennt
kennt
kennt
Quelle: https://github.com/thobe/presentations
NEO4J
16
Ondisk Layout Beispiel
Name: AliceAlter : 23
Name: BobAlter : 42
Name: CarolAlter : 22
kennt
kennt
Name
Alice
Alter
23
Name
Carol
Alter
22
Name
Bob
Alter
42
kennt
Quelle: https://github.com/thobe/presentations
NEO4J
16
Ondisk Layout Beispiel
Name: AliceAlter : 23
Name: BobAlter : 42
Name: CarolAlter : 22
kennt
kennt
Name
Alice
Alter
23
Name
Carol
Alter
22
Name
Bob
Alter
42
SP
SN
EP
EN
kennt
SP
SN
EP
EN
kennt
kennt
SP
SN
EP
EN
kennt
SP
SNEP
EN
Source Previous
Source NextEnd Previous
End Next
Vorhanden
Nicht vorhanden Quelle: https://github.com/thobe/presentations
NEO4J
16
Ondisk Layout Beispiel
Name: AliceAlter : 23
Name: BobAlter : 42
Name: CarolAlter : 22
kennt
kennt
Name
Alice
Alter
23
Name
Carol
Alter
22
Name
Bob
Alter
42
SP
SN
EP
EN
kennt
SP
SN
EP
EN
kennt
kennt
SP
SN
EP
EN
kennt
SP
SNEP
EN
Source Previous
Source NextEnd Previous
End Next
Vorhanden
Nicht vorhanden Quelle: https://github.com/thobe/presentations
NEO4J
17
Knoten
Kante
ID
ID start end type
Typ 1
...
Key 1
Val 1
Key 2Val 2
... Key n
Val n
in:
out
R 1 R 2 ... R n
R 1 R 2 ... R n
Relationship ID refs
Key 1
Val 1
Key 2
Val 2
... Key n
Val n
Typ 1in:
out
R 1 R 2 ... R n
R 1 R 2 ... R n
InMemory Layout (Cache)
Nach Typ gruppiert (Typ = z.B. „kennt“)
Quelle: https://github.com/thobe/presentations
• Transformation von doppelt verketteter Liste zu Objekten
• Erhöhung der Traversierungs-Geschwindigkeit
NEO4J
• Relationship-Expander (liefert Kanten, welche von einem Knoten abgehen)
• Evaluatoren (evaluieren ob ein Knoten traversiert werden soll oder z.B. in die Ergebnis-Menge aufgenommen wird)
• Projektion der Ergebnismenge (z.B. „nimm nur den letzten Knoten des Pfades“
• Uniqueness level (legt in Abstufungen fest, ob ein Knoten mehrmals besucht werden darf)
18
Traversierung
Quelle: https://github.com/thobe/presentations
NEO4J
19
Cypher & Gremlin
Quelle: https://github.com/thobe/presentations
Merkmal Gremlin Cypher
Paradigma
Beschreibung
Beispiel
Imperative Programmierung Deklarative Programmierung
•Entwickelt von Marko Rodriguez (Tinkerpop)•Basiert auf xpath um Traversierung zu beschreiben•Umgesetzt mit Groovy•Bei „einfachen“ Traversierungen ist Gremlin 30-50% schneller
•Eigenentwicklung•Annäherung an SQL•Cypher bietet mehr Möglichkeiten für Optimierungen•Ideal für Traversierungen, bei denen back tracking erforderlich ist.•Zeilenweise Ausgabe des Ergebnisses
outE[label=HAS_CART].inV .outE[label=CONTAINS_ITEM].inV .inE[label=PURCHASED].outV .outE[label=PURCHASED].inV
START me=node:people(name={myname})MATCH me-[:HAS_CART]->cart-[:CONTAINS_ITEM]->item item<-[:PURCHASED]-user-[:PURCHASED]->recommendationRETURN recommendation
START d=node(1), e=node(2)MATCH p = shortestPath( d-[*..15]->e )RETURN p
NEO4J
20
WebAdmin
Quelle: http://docs.neo4j.org/chunked/stable/images/operations/webadmin-overview.png
NEO4J
21
Preise
Edition Lizenz Beschreibung Preis(jährlich)
„Community“
„Advanced“
„Enterprise“
Open Source(GPLv3)
Komplette Datenbank mit grundlegender
Management-Oberfläche0 €
Commercial and AGPL
+Monitoring, erweiterte
Management-Oberfläche und Support
6.000 €
Commercial and AGPL+
Enterprise Oberfläche, HA und premium Support
24.000 €
22
INFINITEGRAPH
23
Überblick
• Verteilte Graphendatenbank
• Implementiert in C++ (APIs in Java, C#, Python, etc.)
• Basiert auf Objectivity/DB (verteilte Objektdatenbank)
• Seit 1988 in Sunnyvale, California
• Enterprise-Kunden + US-Regierung
• Support für Blueprints
INFINITEGRAPH
24
IG#Core/API#
Configura0on#Naviga0on#Execu0on#
Management#Extensions#
Blueprints#User Apps
Objec0vity/DB#Distributed#Database#
Session#/#TX#Management#Placement#
Copyright © InfiniteGraph
Architektur
INFINITEGRAPH
25
Einfügen
IG#Core/API#
Standard#Blocking#Ingest/Placement#(MDP#Plugin)#
Objec@vity/DB#
AppD1#(Ingest#V1)#
AppD2#(Ingest#V2)#
#
AppD3#(Ingest#V3)#
Copyright © InfiniteGraph
INFINITEGRAPH
25
Einfügen
IG#Core/API#
Standard#Blocking#Ingest/Placement#(MDP#Plugin)#
Objec@vity/DB#
AppD1#(Ingest#V1)#
AppD2#(Ingest#V2)#
#
AppD3#(Ingest#V3)#
V1# V2# V3#
Copyright © InfiniteGraph
INFINITEGRAPH
25
Einfügen
IG#Core/API#
Standard#Blocking#Ingest/Placement#(MDP#Plugin)#
Objec@vity/DB#
AppD1#(Ingest#V1)#
AppD2#(Ingest#V2)#
#
AppD3#(Ingest#V3)#
App#1%(E1%2{%V1V2})%
App#2%(E23{%V2V3})%
App#3%%
V1# V2# V3#
Copyright © InfiniteGraph
INFINITEGRAPH
25
Einfügen
IG#Core/API#
Standard#Blocking#Ingest/Placement#(MDP#Plugin)#
Objec@vity/DB#
AppD1#(Ingest#V1)#
AppD2#(Ingest#V2)#
#
AppD3#(Ingest#V3)#
App#1%(E1%2{%V1V2})%
App#2%(E23{%V2V3})%
App#3%%
V1# V2# V3#E12$ E23$
Copyright © InfiniteGraph
INFINITEGRAPH
25
Einfügen
IG#Core/API#
Standard#Blocking#Ingest/Placement#(MDP#Plugin)#
Objec@vity/DB#
AppD1#(Ingest#V1)#
AppD2#(Ingest#V2)#
#
AppD3#(Ingest#V3)#
App#1%(E1%2{%V1V2})%
App#2%(E23{%V2V3})%
App#3%%
V1# V2# V3#E12$ E23$
Copyright © InfiniteGraph
INFINITEGRAPH
Vertex alice = myGraph.addVertex(new Person(“Alice”)); Vertex bob = myGraph.addVertex(new Person(“Bob”)); Vertex carlos = myGraph.addVertex(new Person(“Carlos”)); Vertex charlie = myGraph.addVertex(new Person(“Charlie”));
alice.addEdge(new Meeting(“Denver”, “5-27-10”), bob);bob.addEdge(new Call(timestamp), carlos);carlos.addEdge(new Payment(100000.00), charlie);bob.addEdge(new Call(timestamp), charlie);
26
Code (Einfügen)
Copyright © InfiniteGraph
INFINITEGRAPH
Vertex alice = myGraph.addVertex(new Person(“Alice”)); Vertex bob = myGraph.addVertex(new Person(“Bob”)); Vertex carlos = myGraph.addVertex(new Person(“Carlos”)); Vertex charlie = myGraph.addVertex(new Person(“Charlie”));
alice.addEdge(new Meeting(“Denver”, “5-27-10”), bob);bob.addEdge(new Call(timestamp), carlos);carlos.addEdge(new Payment(100000.00), charlie);bob.addEdge(new Call(timestamp), charlie);
26
Code (Einfügen)
Alice
Copyright © InfiniteGraph
INFINITEGRAPH
Vertex alice = myGraph.addVertex(new Person(“Alice”)); Vertex bob = myGraph.addVertex(new Person(“Bob”)); Vertex carlos = myGraph.addVertex(new Person(“Carlos”)); Vertex charlie = myGraph.addVertex(new Person(“Charlie”));
alice.addEdge(new Meeting(“Denver”, “5-27-10”), bob);bob.addEdge(new Call(timestamp), carlos);carlos.addEdge(new Payment(100000.00), charlie);bob.addEdge(new Call(timestamp), charlie);
26
Code (Einfügen)
Alice
Bob
Copyright © InfiniteGraph
INFINITEGRAPH
Vertex alice = myGraph.addVertex(new Person(“Alice”)); Vertex bob = myGraph.addVertex(new Person(“Bob”)); Vertex carlos = myGraph.addVertex(new Person(“Carlos”)); Vertex charlie = myGraph.addVertex(new Person(“Charlie”));
alice.addEdge(new Meeting(“Denver”, “5-27-10”), bob);bob.addEdge(new Call(timestamp), carlos);carlos.addEdge(new Payment(100000.00), charlie);bob.addEdge(new Call(timestamp), charlie);
26
Code (Einfügen)
Alice
Bob
Carlos
Copyright © InfiniteGraph
INFINITEGRAPH
Vertex alice = myGraph.addVertex(new Person(“Alice”)); Vertex bob = myGraph.addVertex(new Person(“Bob”)); Vertex carlos = myGraph.addVertex(new Person(“Carlos”)); Vertex charlie = myGraph.addVertex(new Person(“Charlie”));
alice.addEdge(new Meeting(“Denver”, “5-27-10”), bob);bob.addEdge(new Call(timestamp), carlos);carlos.addEdge(new Payment(100000.00), charlie);bob.addEdge(new Call(timestamp), charlie);
26
Code (Einfügen)
Alice
Bob
Carlos
CharlieCopyright © InfiniteGraph
INFINITEGRAPH
Vertex alice = myGraph.addVertex(new Person(“Alice”)); Vertex bob = myGraph.addVertex(new Person(“Bob”)); Vertex carlos = myGraph.addVertex(new Person(“Carlos”)); Vertex charlie = myGraph.addVertex(new Person(“Charlie”));
alice.addEdge(new Meeting(“Denver”, “5-27-10”), bob);bob.addEdge(new Call(timestamp), carlos);carlos.addEdge(new Payment(100000.00), charlie);bob.addEdge(new Call(timestamp), charlie);
26
Code (Einfügen)
Alice
Bob
Carlos
Charlie
meets
Copyright © InfiniteGraph
INFINITEGRAPH
Vertex alice = myGraph.addVertex(new Person(“Alice”)); Vertex bob = myGraph.addVertex(new Person(“Bob”)); Vertex carlos = myGraph.addVertex(new Person(“Carlos”)); Vertex charlie = myGraph.addVertex(new Person(“Charlie”));
alice.addEdge(new Meeting(“Denver”, “5-27-10”), bob);bob.addEdge(new Call(timestamp), carlos);carlos.addEdge(new Payment(100000.00), charlie);bob.addEdge(new Call(timestamp), charlie);
26
Code (Einfügen)
Alice
Bob
Carlos
Charlie
meets
calls
Copyright © InfiniteGraph
INFINITEGRAPH
Vertex alice = myGraph.addVertex(new Person(“Alice”)); Vertex bob = myGraph.addVertex(new Person(“Bob”)); Vertex carlos = myGraph.addVertex(new Person(“Carlos”)); Vertex charlie = myGraph.addVertex(new Person(“Charlie”));
alice.addEdge(new Meeting(“Denver”, “5-27-10”), bob);bob.addEdge(new Call(timestamp), carlos);carlos.addEdge(new Payment(100000.00), charlie);bob.addEdge(new Call(timestamp), charlie);
26
Code (Einfügen)
Alice
Bob
Carlos
Charlie
meets
calls
pays
Copyright © InfiniteGraph
INFINITEGRAPH
Vertex alice = myGraph.addVertex(new Person(“Alice”)); Vertex bob = myGraph.addVertex(new Person(“Bob”)); Vertex carlos = myGraph.addVertex(new Person(“Carlos”)); Vertex charlie = myGraph.addVertex(new Person(“Charlie”));
alice.addEdge(new Meeting(“Denver”, “5-27-10”), bob);bob.addEdge(new Call(timestamp), carlos);carlos.addEdge(new Payment(100000.00), charlie);bob.addEdge(new Call(timestamp), charlie);
26
Code (Einfügen)
Alice
Bob
Carlos
Charlie
meets
calls
pays
calls
Copyright © InfiniteGraph
INFINITEGRAPH
27
Code (Navigator)
// Create a qualifier that describes the target vertexQualifier findCharliePredicate = new VertexPredicate(personType, "name == ’Charlie'");
// Construct a navigator which starts with Alice and uses a result qualifier// to find all paths in the graph to CharlieNavigator charlieFinder = alice.navigate( Guide.SIMPLE_BREADTH_FIRST, // default guide
Qualifier.ANY, // no path constraints findCharliePredicate , // find paths ending with Charlie
myResultHandler); // fire results to supplied handler
// Start the navigatorcharlieFinder.start();
Copyright © InfiniteGraph
INFINITEGRAPH
28
Visualisierung
Copyright © InfiniteGraph
INFINITEGRAPH
29
Preise
Quelle: http://www.infinitegraph.com/options/
Edition Lizenz Beschreibung Preis(jährlich)
„InfiniteGraph FREE“
„Pay as you go“
„Unit or site licensing“
Frei Beschränkung auf 1 Million Knoten oder Kanten 0 €
Kommerziell Volle Funktionalitätfängt bei ca. 5000 € an
(in Abhängigkeit der Anzahl Knoten und Kanten)
KommerziellVolle Funktionalität,
fokussiert auf „größere“ Umgebungen
>..... €(Betrag wird nicht genannt)
30
FALLEN-8
31
Überblick
• In-Memory Graphendatenbank
• Entwickelt in C# (Plattform unabhängig)
• 4 Mrd. Knoten oder Kanten, jedes Element kann ca. 200 Mio. Eigenschaften haben
• Indexe auf Knoten oder/und Kanten
• Kern ist Open Source (MIT-Lizenz), Plugins sind variabel
FALLEN-8
32
Persistenz
• Persistenz in Form von „Save-Points“, d.h. alle Knoten und Kanten werden komplett serialisiert
• Je nach Geschwindigkeit der HDD können ca. 2 Mio. Knoten oder Kanten pro Sekunde (de)serialisiert werden.
• Das Speichern des Graphen blockiert lediglich schreibende Operationen
• Performance + Verlässlichkeit
FALLEN-8
33
Architektur
RAM
Traversierungs-Framework
Index-Framework
Core API
Services
Knoten und Kanten
FALLEN-8
34
Architektur inklusive Plugins
RAM
Traversierungs-Framework (inkl Pfad Analyse)
Index-Framework(inkl R* Tree Index)
Core API
REST API (via JSON) + Management/Query Oberfläche
HA inklusive ACID Transaktionen
Knoten und Kanten
FALLEN-8
35
Benchmark - friends of a friend
FALLEN-8
35
Benchmark - friends of a friend
1
FALLEN-8
35
Benchmark - friends of a friend
1
5
4
3
2
FALLEN-8
35
Benchmark - friends of a friend
1
5
4
3
2
9
8
7
6
13
12
11
10
16
15
14
FALLEN-8
36
Benchmark - friends of a friend
Quelle: Martin Junghanns
0
1.000
2.000
3.000
4.000
5.000
t in
ms
Durchlauf
Fallen-8 Neo4J
FALLEN-8
37
Benchmark - traversals per second
Quelle: Sebastian Dechant
FALLEN-8
37
Benchmark - traversals per second
1
Quelle: Sebastian Dechant
FALLEN-8
37
Benchmark - traversals per second
1
Quelle: Sebastian Dechant
FALLEN-8
37
Benchmark - traversals per second
1 2
Quelle: Sebastian Dechant
FALLEN-8
37
Benchmark - traversals per second
1 2
Quelle: Sebastian Dechant
System: Windows Server 2008 R2, Intel Xeon E5620 (2,40 GHz), 6 GB RAMGraph: |V| = 10000, |E| = 600.000 (gleichverteilt)
FALLEN-8
37
Benchmark - traversals per second
1 2
MySQL
PostgreSQL
Neo4J
InfiniteGraph
Fallen-8
1 10 100 1.000 10.000 100.000 1.000.000 10.000.000 100.000.000 1.000.000.000
196.930.256
1.243.084
943.580
78.449
62.168
traversals / secQuelle: Sebastian Dechant
System: Windows Server 2008 R2, Intel Xeon E5620 (2,40 GHz), 6 GB RAMGraph: |V| = 10000, |E| = 600.000 (gleichverteilt)
FALLEN-8
38
Roadmap
• Release: 23.05.2012
• Q3 2012
• Spatial index (MIT)
• High availability (MIT) using Amazon EC2
• 2013
• Graph partitioning (MIT or ???)
DANKE&
Q&A
Email: Henning@RauchEntwicklung.bizUrl: http://www.NoSQL-Database.comTwitter : http://www.twitter.com/cosh23
39
top related