vorlesung graphendatenbanken an der universität hof

Post on 22-Nov-2014

2.240 Views

Category:

Education

0 Downloads

Preview:

Click to see full reader

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