Your SlideShare is downloading. ×
Vorlesung Graphendatenbanken an der Universität Hof
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Introducing the official SlideShare app

Stunning, full-screen experience for iPhone and Android

Text the download link to your phone

Standard text messaging rates apply

Vorlesung Graphendatenbanken an der Universität Hof

2,069
views

Published on

Published in: Education

0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
2,069
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
18
Comments
0
Likes
1
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. GRAPHENDATENBANKEN Henning Rauch Universität Hof - 04.05.2012 1
  • 2. AGENDA• Überblick• Neo4J• InfiniteGraph• Fallen-8 2
  • 3. ÜBERBLICK Warum macht es Sinn sich damit zu beschäftigen„Graph databases will come into vogue. One key gap in the Hadoopecosystem is for graph databases, which support rich mining and visualization ofrelationships, influence, and behavioral propensities. The market for graphdatabases will boom in 2012 as companies everywhere adopt them for socialmedia analytics, marketing campaign optimization, and customer experiencefine-tuning. We will see VCs put big money behind graph database and analyticsstartups. Many big data platform and tool vendors will acquire the startups tosupplement their expanding Hadoop, NoSQL, and enterprise data warehousing(EDW) portfolios. Social graph analysis, although not a brand-new field, willbecome one of the most prestigious specialties in the data science arena,focusing on high-powered drilldown into polystructured behavioral data sets.“ Quelle: http://blogs.forrester.com/james_kobielus/11-12-19-the_year_ahead_in_big_data_big_cool_new_stuff_looms_large 3
  • 4. ÜBERBLICKBeispiel eines Realworld Graphen - facebook Quelle: http://www.facebook.com/press/info.php?statistics 4
  • 5. ÜBERBLICKBeispiel eines Realworld Graphen - NYT „Cascade“ Quelle: http://nytlabs.com/projects/cascade.html 5
  • 6. ÜBERBLICKBeispiel eines Realworld Graphen - Telefon-Rechnung 6
  • 7. ÜBERBLICKAbgrenzung zu RDBMS - Property graph RDBMS GraphDB 7
  • 8. ÜBERBLICK Abgrenzung zu RDBMS - Property graph RDBMS GraphDB PersonId Name0 Henning Rauch1 René Peinl2 Foo Bar3 Bruce Schneier4 Linus Torwalds 7
  • 9. ÜBERBLICK Abgrenzung zu RDBMS - Property graph RDBMS GraphDB Person 2Id Name 30 Henning Rauch1 René Peinl2 Foo Bar3 Bruce Schneier 44 Linus Torwalds 1 0 7
  • 10. ÜBERBLICK Abgrenzung zu RDBMS - Property graph RDBMS GraphDB Person Kennt_rel 2Id Name Id_1 Id_2 30 Henning Rauch 1 01 René Peinl 1 22 Foo Bar 1 33 Bruce Schneier 1 4 44 Linus Torwalds 0 1 1 0 2 0 3 0 4 3 4 4 3 0 7
  • 11. ÜBERBLICK Abgrenzung zu RDBMS - Property graph RDBMS GraphDB Person Kennt_rel 2Id Name Id_1 Id_2 30 Henning Rauch 1 01 René Peinl 1 22 Foo Bar 1 33 Bruce Schneier 1 4 44 Linus Torwalds 0 1 1 0 2 0 3 0 4 3 4 4 3 0 7
  • 12. ÜBERBLICK Abgrenzung zu RDBMS - Property graph RDBMS GraphDB Person Kennt_rel 2Id Name Id_1 Id_2 30 Henning Rauch 1 01 René Peinl 1 22 Foo Bar 1 33 Bruce Schneier 1 4 44 Linus Torwalds 0 1 1 0 2 0 3 0 4 3 4 4 3 0 TagId Name0 .NET1 Java2 PKI3 NoSQL 7
  • 13. ÜBERBLICK Abgrenzung zu RDBMS - Property graph RDBMS GraphDB Person Kennt_rel 2Id Name Id_1 Id_2 30 Henning Rauch Java 1 01 René Peinl 1 22 Foo Bar 1 33 Bruce Schneier 1 4 44 Linus Torwalds 0 1 1 0 2 0 3 0 4 3 4 4 3 0 Tag NoSQLId Name .NET0 .NET PKI1 Java2 PKI3 NoSQL 7
  • 14. ÜBERBLICK Abgrenzung zu RDBMS - Property graph RDBMS GraphDB Person Kennt_rel 2Id Name Id_1 Id_2 30 Henning Rauch Java 1 01 René Peinl 1 22 Foo Bar 1 33 Bruce Schneier 1 4 44 Linus Torwalds 0 1 1 0 2 0 3 0 4 3 4 4 3 0 Tag Tags_rel NoSQLId Name Tag_Id Person_Id Signifikanz .NET0 .NET 0 0 5 PKI1 Java 1 1 52 PKI 2 1 63 NoSQL 2 3 10 3 0 7 3 1 7 7
  • 15. ÜBERBLICK Abgrenzung zu RDBMS - Property graph RDBMS GraphDB Person Kennt_rel 2Id Name Id_1 Id_2 30 Henning Rauch Java 1 01 René Peinl 1 2 102 Foo Bar 1 3 53 Bruce Schneier 1 4 44 Linus Torwalds 0 1 1 0 2 0 3 0 4 3 4 7 4 3 0 5 Tag Tags_rel NoSQL 7Id Name Tag_Id Person_Id Signifikanz .NET0 .NET 0 0 5 6 PKI1 Java 1 1 52 PKI 2 1 63 NoSQL 2 3 10 3 0 7 3 1 7 7
  • 16. ÜBERBLICK Abgrenzung zu RDBMS - Property graph RDBMS GraphDB Person Kennt_rel 2Id Name Id_1 Id_2 30 Henning Rauch Java 1 01 René Peinl 1 2 102 Foo Bar 1 3 53 Bruce Schneier 1 4 44 Linus Torwalds 0 1 1 0 2 0 3 0 4 3 4 7 4 3 0 5 Tag Tags_rel NoSQL 7Id Name Tag_Id Person_Id Signifikanz .NET0 .NET 0 0 5 6 PKI1 Java 1 1 52 PKI 2 1 63 NoSQL 2 3 3 0 10 7 Knoten = 3 1 7 7 Eigenschaften + Kanten
  • 17. ÜBERBLICK Abgrenzung zu RDBMS - Skalierbarkeit Kennt_rel Id_1 Id_2• Relations-Tabellen sind das Problem, sie agieren als 1 1 0 2 globaler Index über Beziehungen zwischen Daten 1 1 3 4 0 1 Je größer die Relation, desto länger dauert es die 0 2• 0 3 interessante Information (z.B. Nachbarschaft) zu 0 3 4 4 finden 4 3 Tags_rel• Lösung der Graphendatenbank: Information über Tag_Id 0 Person_Id 0 Signifikanz 5 Beziehungen (Kanten) werden lokal am Knoten 1 1 5 abgelegt 2 1 6 2 3 10 3 0 7 3 1 7 8
  • 18. ÜBERBLICK Abgrenzung zu RDBMS - Aber aber aber• Aufgabe: Finde Personen, welche 0 kennt. • Lineares Scannen der Relationen-Tabelle: O(n) Kennt_rel Id_1 Id_2 1 0 1 2 • Abfragen eines Index: O(log n) 1 3 1 4 0 1• Bei RDBMS große Performance-Einbrüche bei 0 0 2 3 rekursiven Such-Algorithmen (da Abhängigkeit zu n) 0 4 3 4 4 3• Graphendatenbanken lösen diese Aufgabe i.A. in O(1), unabhängig von der Gesamtgröße des Graphen 9
  • 19. ÜBERBLICK Abgrenzung zu anderen NoSQL ProduktenGröße > 90% der Anwendungsfälle Komplexität Quelle: http://www.slideshare.net/jexp/neo4j-graph-database-presentation-german 10
  • 20. ÜBERBLICK Abgrenzung zu anderen NoSQL ProduktenGröße Key/Value stores > 90% der Anwendungsfälle Komplexität Quelle: http://www.slideshare.net/jexp/neo4j-graph-database-presentation-german 10
  • 21. ÜBERBLICK Abgrenzung zu anderen NoSQL ProduktenGröße Key/Value stores Bigtable clones > 90% der Anwendungsfälle Komplexität Quelle: http://www.slideshare.net/jexp/neo4j-graph-database-presentation-german 10
  • 22. ÜBERBLICK Abgrenzung zu anderen NoSQL ProduktenGröße Key/Value stores Bigtable clones Dokument Datenbanken > 90% der Anwendungsfälle Komplexität Quelle: http://www.slideshare.net/jexp/neo4j-graph-database-presentation-german 10
  • 23. ÜBERBLICK Abgrenzung zu anderen NoSQL ProduktenGröße Key/Value stores Bigtable clones Dokument Datenbanken Graphendatenbanken > 90% der Anwendungsfälle Komplexität Quelle: http://www.slideshare.net/jexp/neo4j-graph-database-presentation-german 10
  • 24. ÜBERBLICK Abgrenzung zu anderen NoSQL ProduktenGröße Key/Value stores Bigtable clones Dokument Datenbanken Graphendatenbanken In-Memory Graphendatenbanken > 90% der Anwendungsfälle Komplexität Quelle: http://www.slideshare.net/jexp/neo4j-graph-database-presentation-german 10
  • 25. ÜBERBLICK Graphenprozessierung vs. GraphendatenbankOLAP Graph affin Universell OLTP Quelle: http://jim.webber.name/2011/08/24/66f1fb4b-83c3-4f52-af40-ee6382ad2155.aspx 11
  • 26. ÜBERBLICK Graphenprozessierung vs. GraphendatenbankOLAP Graph affin OLTP RDBMS Universell Quelle: http://jim.webber.name/2011/08/24/66f1fb4b-83c3-4f52-af40-ee6382ad2155.aspx 11
  • 27. ÜBERBLICK Graphenprozessierung vs. GraphendatenbankOLAP Graph affin OLTP Hadoop RDBMS Universell Quelle: http://jim.webber.name/2011/08/24/66f1fb4b-83c3-4f52-af40-ee6382ad2155.aspx 11
  • 28. ÜBERBLICK Graphenprozessierung vs. Graphendatenbank Graph affin PregelOLAP OLTP Hadoop RDBMS Universell Quelle: http://jim.webber.name/2011/08/24/66f1fb4b-83c3-4f52-af40-ee6382ad2155.aspx 11
  • 29. ÜBERBLICK Graphenprozessierung vs. Graphendatenbank Graph affin Graphendatenbanken PregelOLAP OLTP Hadoop RDBMS Universell Quelle: http://jim.webber.name/2011/08/24/66f1fb4b-83c3-4f52-af40-ee6382ad2155.aspx 11
  • 30. ÜBERBLICK Graphenprozessierung vs. Graphendatenbank Graph affin In-Memory Graphendatenbanken Graphendatenbanken PregelOLAP OLTP Hadoop RDBMS Universell Quelle: http://jim.webber.name/2011/08/24/66f1fb4b-83c3-4f52-af40-ee6382ad2155.aspx 11
  • 31. ÜBERBLICK Graphendatenbanken• Neo4J • HypergraphDB• InfiniteGraph (Objectivity) • DEX• Sones GraphDB • FlockDB (Twitter)• AllegroGraph • Trinity (Microsoft)• OrientDB • Fallen-8 Quelle: http://www.slideshare.net/jexp/neo4j-graph-database-presentation-german 12
  • 32. 13
  • 33. NEO4J Überblick• 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
  • 34. NEO4J Architektur Cypher/Gremlin Java/Ruby/.../C# API REST API Core API (Java)Caches (Dateisystem & Objekt) HA Record Dateien Transaktions-Log Disk(s) Quelle: http://www.slideshare.net/rheehot/eo4j-12713065 15
  • 35. NEO4J kennt Ondisk Layout Beispiel Name: Bob Alter: 42Name: AliceAlter: 23 kennt kennt Name: Carol Alter: 22 Quelle: https://github.com/thobe/presentations 16
  • 36. NEO4J kennt Ondisk Layout Beispiel Name: Bob Alter: 42 Name Name: Alice BobName Alter: 23Alice kennt Alter 42Alter 23 kennt Name Carol Name: Carol Alter: 22 Alter 22 Quelle: https://github.com/thobe/presentations 16
  • 37. NEO4J kennt Ondisk Layout Beispiel SP EP Name: Bob SN EN Alter: 42 kennt Name Name: Alice SP EP BobName Alter: 23 SP EP SN ENAlice kennt SN EN kennt Alter kennt 42Alter 23 kennt Name SP Source Previous CarolSN Source Next Name: CarolEP End Previous Alter: 22EN End Next Alter 22 Vorhanden Nicht vorhanden Quelle: https://github.com/thobe/presentations 16
  • 38. NEO4J kennt Ondisk Layout Beispiel SP EP Name: Bob SN EN Alter: 42 kennt Name Name: Alice SP EP BobName Alter: 23 SP EP SN ENAlice kennt SN EN kennt Alter kennt 42Alter 23 kennt Name SP Source Previous CarolSN Source Next Name: CarolEP End Previous Alter: 22EN End Next Alter 22 Vorhanden Nicht vorhanden Quelle: https://github.com/thobe/presentations 16
  • 39. NEO4J InMemory Layout (Cache) ID Relationship ID refs in: R1 R2 ... Rn Typ 1 out R1 R2 ... Rn • Transformation vonKnoten ... Nach Typ gruppiert (Typ = z.B. „kennt“) doppelt verketteter Liste Typ 1 in: R1 R2 ... Rn zu Objekten out R1 R2 ... Rn Key 1 Key 2 ... Key n • Erhöhung der Traversierungs- Val 1 Val 2 Val n Geschwindigkeit ID start end typeKante Key 1 Key 2 ... Key n Val 1 Val 2 Val n Quelle: https://github.com/thobe/presentations 17
  • 40. NEO4J Traversierung• 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) Quelle: https://github.com/thobe/presentations 18
  • 41. NEO4J Cypher & Gremlin Merkmal Gremlin Cypher Paradigma Imperative Programmierung Deklarative Programmierung •Entwickelt von Marko Rodriguez (Tinkerpop) •Eigenentwicklung •Basiert auf xpath um Traversierung zu beschreiben •Annäherung an SQLBeschreibung •Umgesetzt mit Groovy •Cypher bietet mehr Möglichkeiten für Optimierungen •Bei „einfachen“ Traversierungen ist Gremlin •Ideal für Traversierungen, bei denen back tracking erforderlich ist. 30-50% schneller •Zeilenweise Ausgabe des Ergebnisses START me=node:people(name={myname}) MATCH me-[:HAS_CART]->cart-[:CONTAINS_ITEM]->item outE[label=HAS_CART].inV item<-[:PURCHASED]-user-[:PURCHASED]->recommendation .outE[label=CONTAINS_ITEM].inV RETURN recommendation Beispiel .inE[label=PURCHASED].outV .outE[label=PURCHASED].inV START d=node(1), e=node(2) MATCH p = shortestPath( d-[*..15]->e ) RETURN p Quelle: https://github.com/thobe/presentations 19
  • 42. NEO4J WebAdmin Quelle: http://docs.neo4j.org/chunked/stable/images/operations/webadmin-overview.png20
  • 43. NEO4J Preise Preis Edition Lizenz Beschreibung (jährlich) Komplette Datenbank mit Open Source„Community“ grundlegender 0 € (GPLv3) Management-Oberfläche + Monitoring, erweiterte„Advanced“ Commercial and AGPL 6.000 € Management-Oberfläche und Support +„Enterprise“ Commercial and AGPL Enterprise Oberfläche, HA 24.000 € und premium Support 21
  • 44. 22
  • 45. INFINITEGRAPH Ü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 23
  • 46. INFINITEGRAPH Architektur User Apps Blueprints# IG#Core/API#Management# Naviga0on# Session#/#TX# Placement# Configura0on# Extensions# Execu0on# Management# Objec0vity/DB#Distributed#Database# Copyright © InfiniteGraph 24
  • 47. INFINITEGRAPH Einfügen AppD2# AppD1# AppD3# (Ingest#V2)#(Ingest#V1)# (Ingest#V3)# # IG#Core/API# Standard#Blocking#Ingest/Placement#(MDP#Plugin)# Objec@vity/DB# Copyright © InfiniteGraph 25
  • 48. INFINITEGRAPH Einfügen AppD2# AppD1# AppD3# (Ingest#V2)#(Ingest#V1)# (Ingest#V3)# # IG#Core/API# Standard#Blocking#Ingest/Placement#(MDP#Plugin)# Objec@vity/DB#V1# V2# V3# Copyright © InfiniteGraph 25
  • 49. INFINITEGRAPH Einfügen AppD2# App#1% AppD1# App#2% App#3% AppD3# (Ingest#V2)# (Ingest#V )#(E1%2{%V1V21})% (E23{%V2V3})% (Ingest#V3)# % # IG#Core/API# Standard#Blocking#Ingest/Placement#(MDP#Plugin)# Objec@vity/DB#V1# V2# V3# Copyright © InfiniteGraph 25
  • 50. INFINITEGRAPH Einfügen AppD2# App#1% AppD1# App#2% App#3% AppD3# (Ingest#V2)# (Ingest#V )#(E1%2{%V1V21})% (E23{%V2V3})% (Ingest#V3)# % # IG#Core/API# Standard#Blocking#Ingest/Placement#(MDP#Plugin)# Objec@vity/DB#V1# E12$ V2# E23$ V3# Copyright © InfiniteGraph 25
  • 51. INFINITEGRAPH Einfügen AppD2# App#1% AppD1# App#2% App#3% AppD3# (Ingest#V2)# (Ingest#V )#(E1%2{%V1V21})% (E23{%V2V3})% (Ingest#V3)# % # IG#Core/API# Standard#Blocking#Ingest/Placement#(MDP#Plugin)# Objec@vity/DB#V1# E12$ V2# E23$ V3# Copyright © InfiniteGraph 25
  • 52. INFINITEGRAPH Code (Einfügen)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); Copyright © InfiniteGraph 26
  • 53. INFINITEGRAPH Code (Einfügen) AliceVertex 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); Copyright © InfiniteGraph 26
  • 54. INFINITEGRAPH Code (Einfügen) AliceVertex alice = myGraph.addVertex(new Person(“Alice”)); BobVertex 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); Copyright © InfiniteGraph 26
  • 55. INFINITEGRAPH Code (Einfügen) AliceVertex alice = myGraph.addVertex(new Person(“Alice”)); BobVertex 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); Carlosbob.addEdge(new Call(timestamp), charlie); Copyright © InfiniteGraph 26
  • 56. INFINITEGRAPH Code (Einfügen) AliceVertex alice = myGraph.addVertex(new Person(“Alice”)); BobVertex 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); Carlosbob.addEdge(new Call(timestamp), charlie); Charlie Copyright © InfiniteGraph 26
  • 57. INFINITEGRAPH Code (Einfügen) Alice meetsVertex alice = myGraph.addVertex(new Person(“Alice”)); BobVertex 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); Carlosbob.addEdge(new Call(timestamp), charlie); Charlie Copyright © InfiniteGraph 26
  • 58. INFINITEGRAPH Code (Einfügen) Alice meetsVertex alice = myGraph.addVertex(new Person(“Alice”)); BobVertex bob = myGraph.addVertex(new Person(“Bob”));Vertex carlos = myGraph.addVertex(new Person(“Carlos”));Vertex charlie = myGraph.addVertex(new Person(“Charlie”)); callsalice.addEdge(new Meeting(“Denver”, “5-27-10”), bob);bob.addEdge(new Call(timestamp), carlos);carlos.addEdge(new Payment(100000.00), charlie); Carlosbob.addEdge(new Call(timestamp), charlie); Charlie Copyright © InfiniteGraph 26
  • 59. INFINITEGRAPH Code (Einfügen) Alice meetsVertex alice = myGraph.addVertex(new Person(“Alice”)); BobVertex bob = myGraph.addVertex(new Person(“Bob”));Vertex carlos = myGraph.addVertex(new Person(“Carlos”));Vertex charlie = myGraph.addVertex(new Person(“Charlie”)); callsalice.addEdge(new Meeting(“Denver”, “5-27-10”), bob);bob.addEdge(new Call(timestamp), carlos);carlos.addEdge(new Payment(100000.00), charlie); Carlosbob.addEdge(new Call(timestamp), charlie); pays Charlie Copyright © InfiniteGraph 26
  • 60. INFINITEGRAPH Code (Einfügen) Alice meetsVertex alice = myGraph.addVertex(new Person(“Alice”)); BobVertex bob = myGraph.addVertex(new Person(“Bob”));Vertex carlos = myGraph.addVertex(new Person(“Carlos”));Vertex charlie = myGraph.addVertex(new Person(“Charlie”)); calls callsalice.addEdge(new Meeting(“Denver”, “5-27-10”), bob);bob.addEdge(new Call(timestamp), carlos);carlos.addEdge(new Payment(100000.00), charlie); Carlosbob.addEdge(new Call(timestamp), charlie); pays Charlie Copyright © InfiniteGraph 26
  • 61. INFINITEGRAPH 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 27
  • 62. INFINITEGRAPH Visualisierung Copyright © InfiniteGraph28
  • 63. INFINITEGRAPH Preise Preis Edition Lizenz Beschreibung (jährlich) Beschränkung auf 1 Million„InfiniteGraph FREE“ Frei 0 € Knoten oder Kanten fängt bei ca. 5000 € an „Pay as you go“ Kommerziell Volle Funktionalität (in Abhängigkeit der Anzahl Knoten und Kanten) Volle Funktionalität, >..... €„Unit or site licensing“ Kommerziell fokussiert auf „größere“ (Betrag wird nicht genannt) Umgebungen Quelle: http://www.infinitegraph.com/options/ 29
  • 64. 30
  • 65. FALLEN-8 Ü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 31
  • 66. FALLEN-8 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 32
  • 67. FALLEN-8 Architektur ServicesTraversierungs- Index- Framework Framework Core API Knoten und Kanten RAM 33
  • 68. FALLEN-8 Architektur inklusive Plugins HA inklusive ACID TransaktionenREST API (via JSON) + Management/Query Oberfläche Traversierungs-Framework Index-Framework (inkl Pfad Analyse) (inkl R* Tree Index) Core API Knoten und Kanten RAM 34
  • 69. FALLEN-8Benchmark - friends of a friend35
  • 70. FALLEN-8 Benchmark - friends of a friend1 35
  • 71. FALLEN-8 Benchmark - friends of a friend 2 31 4 5 35
  • 72. FALLEN-8 Benchmark - friends of a friend 6 7 8 2 9 3 101 11 4 12 13 5 14 15 16 35
  • 73. FALLEN-8 Benchmark - friends of a friend Fallen-8 Neo4J 5.000 4.000 3.000t in ms 2.000 1.000 0 Durchlauf Quelle: Martin Junghanns 36
  • 74. FALLEN-8Benchmark - traversals per second Quelle: Sebastian Dechant 37
  • 75. FALLEN-8 Benchmark - traversals per second1 Quelle: Sebastian Dechant 37
  • 76. FALLEN-8 Benchmark - traversals per second1 Quelle: Sebastian Dechant 37
  • 77. FALLEN-8 Benchmark - traversals per second1 2 Quelle: Sebastian Dechant 37
  • 78. FALLEN-8 Benchmark - traversals per second 1 2Graph: |V| = 10000, |E| = 600.000 (gleichverteilt)System: Windows Server 2008 R2, Intel Xeon E5620 (2,40 GHz), 6 GB RAM Quelle: Sebastian Dechant 37
  • 79. FALLEN-8 Benchmark - traversals per second 1 2 Graph: |V| = 10000, |E| = 600.000 (gleichverteilt) System: Windows Server 2008 R2, Intel Xeon E5620 (2,40 GHz), 6 GB RAM MySQL 62.168 PostgreSQL 78.449 Neo4J 943.580InfiniteGraph 1.243.084 Fallen-8 196.930.256 1 10 100 1.000 10.000 100.000 1.000.000 10.000.000 100.000.000 1.000.000.000 traversals / sec Quelle: Sebastian Dechant 37
  • 80. FALLEN-8 Roadmap• Release: 23.05.2012• Q3 2012 • Spatial index (MIT) • High availability (MIT) using Amazon EC2• 2013 • Graph partitioning (MIT or ???) 38
  • 81. DANKE & Q&AEmail: Henning@RauchEntwicklung.bizUrl: http://www.NoSQL-Database.comTwitter: http://www.twitter.com/cosh23 39