SlideShare a Scribd company logo
1 of 45
Neo4j
Daten natürlich modellieren und verarbeiten mit Neo4j
Berlin Expert Days 2013 | Berlin | 04.04.2013
2
Speaker Profil
Patrick Baumgartner
• Senior Software Consultant | Partner @ Swiftmind
• Spring Framework, OSGi, Neo4j
• Spring Trainer
• Co-Autor von „OSGi für Praktiker“
• Agile Projektmethoden & Praktiken
• Scrum.org Trainer - PSD Java
• @patbaumgartner
3
Swiftmind
Ihre Experten für Enterprise Java
Spezialgebiete
• Java EE
• Spring Framework
• OSGi
• Agile Projektmethoden
• Software Engineering Best Practices
Standort
• Zürich, Schweiz
• @swiftmind
• http://www.swiftmind.com
4
Agenda
• Einführung
• Usecases
• Neo4j
• Querying
• Import / Export
• Tools und APIs
• Polyglot Persistence
• Highlights & Challenges beim Einsatz
• Q & A
5
New Types of Data Stores
6
NoSQL
Datengrösse
Datenkomplexität
Key-Value Stores
Column Family
Document Databases
Graph Databases
Relational Databases
90% aller Usecases
7
Property Graph Modell
• Graphen bestehen aus
– Knoten / Nodes
– Beziehungen / Relations
– Eigenschafen / Properties
Alice
Bob
Car
name:Bob
age:63
sex:male
name:Alice
age:21
sex:female
type:car
vendor:tesla
8
Wo finde ich meinen Graphen?
Usecases
9
Social Data
Alice
Carol Luke
Bob
Sam
Pete
10
Ein einziger Anwendungsfall?
Social Graph
11
Spatial Data
1
2 5
3
13
8
type:Hotel
name:Radisson Blu
lat:47.452549
long:8.564615
type:Hotel
name:Widder
lat:47.373517
long:8.539252
12
Schienennetz in Deutschland
13
Social & Spatial Data
Alice
Mat 5
Bob
13
8
type:Hotel
name:Radisson Blu
lat:47.452549
long:8.564615
14
Financial Data
Alice
Hotel Luke
Bank
ATM
Pete
15
Eine beliebige Business Domäne
Proces
s
KPI
Device
Activity
Function
Service
16
Neo4j
The Big Picture
17
Neo4j – Big Picture
• Die verbreiteste Graphendatenbank der Welt
– Robust: Im Betrieb 24/7 seit 2003
– Reifegrad: Vielfach in Produktion ausgerollt
– Community: Ecosystem mit Tools, Bindings, Frameworks
• Lizenzen
– AGPLv3 Community Edition – OpenSource
– Advanced/Enterprise – für kommerzielle Anwendungen
• Neo Technology
– Entwicklung & Support
– ~ 50 Personen / 6 Länder / 3 Kontinente
– Total 24 Mio $ VC Finanzierung
18
Eigenschaften
• Objektorientiert, flexible Netzwerkstruktur
• Support für ACID Transaktionen
• Horizontal skalierbar
• Java API
– Anbindung mittels Java, Groovy, Scala, JRuby
• Runtime
– Standalone Server
– Embedded Database
• Diskbasierter Storage Manager
• Support für Erweiterungen und Testing
19
Wie komme ich an meine Daten?
Querying
20
Graph Querying
• Wie erhalte ich die richtigen Nodes aus dem Graphen?
– Nenne mir alle Freunde und Freunde von Freunden
welche den Film XY mit mehr als 3 Sternen bewertet
haben.
– ...
• Queryingmethoden
– Traversing mit Neo4j API
– Traversal Descriptions
– Graphalgorithmen
– Index Queries
– Cypher Queries
21
Neo4j API
Node bob = ...;
for ((Relationship rel: bob.getRelationships(RelTypes.KNOWS)) {
Node friend = rel.getEndNode();
System.out.println(friend.getProperty("name"));
}
• Einfache, aber sehr „low level“ API
• Zu „verbose“ für komplexe Traversals
22
Traversal API
• Beschreibt Bewegungen durch den Graphen
• Callback basiert
• Abfrage API für Graphen
• Fluent API
• Konstrukte
• Neo4j implementiert folgende Algorithmen:
– A*
– Dijkstra
– pathsWithLength
– shortestPath
– allSimplePaths
– allPaths
23
Traversal API – Konstrukte
24
Beispiel: Traversal API
TraversalDescription directFriends = Traversal.description()
.breadthFirst()
.relationships(RelTypes.KNOWS)
.evaluator(Evaluators.toDepth(1))
.evaluator(Evaluators.excludeStartPosition());
for(Path p : directFriends.traverse(bob)) {
System.out.println(p.endNode().getProperty(„firstname“));
}
25
Index Queries
• Unterstützung von Node und
Relationship Indices
• Lucene als Standard-implementierung
node id property value
15 name Alice
15 yearOfBirth 1972
16 name Bob
46 name Carol
46 yearOfBirth 1983
26
Cypher Query Language
• Graph Query Language ähnlich SQL
• Deklarative Sprache
• Definiert das „Was“ – nicht das „Wie“
• Nutzt Pattern Matching
• Support für
– Filterung
– Paginierung
• Update-Funktionalität
27
Cypher Query Language – Elemente
Element Bedeutung
START Startelement(e) (Angabe von Index- o. Id-Lookup)
MATCH Pattern für zu findende Knoten, beschrieben durch
Pfade auf Identifiern (a) –[knows]-> (b)
WHERE Resultatsfilterung (boolean-Ausdruck)
SKIP LIMIT Paginierung
RETURN Definiert Rückgabe-Elemente
ORDER BY Sortierung nach Properties
PARAMETERS Parameter-Map, die im Cypher mittels Key oder
Position verwendet werden kann
CREATE Erzeugt einen Knoten
28
Beispiel: Cypher Query
String query = "START person=node(12) “
+ “MATCH person-[:KNOWS]-friend “
+ “RETURN friend“;
ExecutionEngine engine = new ExecutionEngine(graphDb);
ExecutionResult result = engine.execute(query);
Iterator<Object> column = result.columnAs("friend");
while(column.hasNext()) {
Node friendNode = (Node)column.next();
System.out.println(friendNode.getProperty(PROP_FIRSTNAME));
}
29
Beispiel: Cypher Create Query
CREATE (carol {name:“Carol“}) return carol;
+------------------------+
| carol |
+------------------------+
| Node[1]{name:“carol“} |
+------------------------+
START carol=node(1) CREATE (bob {name:“Bob"}),
(bob)-[:knows]->(carol) return carol;
START carol=node(1)
CREATE (apple {name:“Apple“,typ:“Fruit“}),
(carol)-[:owns {number: 5}]->(apple);
30
Wie lese und schreibe ich Daten?
Import / Export
31
Erzeugung von Nodes mit Java
org.neo4j.graphdb.GraphDatabaseService graphDb =
new GraphDatabaseFactory().newEmbeddedDatabase(DB_PATH);
Transaction tx = graphDb.beginTx();
try {
Node peter = createNode(graphDb, "Peter");
Node carol = createNode(graphDb, “Carol");
peter.createRelationshipTo(carol, RelTypes.KNOWS);
..
tx.success();
} finally {tx.finish();}
public Node createNode(GraphDatabaseService graphDb, String firstname) {
Node person = graphDb.createNode();
person.setProperty(„firstname“, firstname);
return person;
}
32
NeoClipse
33
Thinkerpop – Blueprint
Thinkerpop Blueprint
Extensions
• GraphML Reader/Writer
Library
• GraphSon Reader/Writer
Library
• GML Reader/Writer Library
• Java Universal
Network/Graph Framework
34
GraphML
• GraphML (http://graphml.graphdrawing.org/ )
– Standardisierte Beschreibungssprache für Graphen
– Modellierungswerkzeuge
– XML
<graph id="G" edgedefault="directed">
<node id="n0"/>
<node id="n1"/>
<edge source="n0" target="n1"/>
</graph>
35
Neo4j Bordmittel
• GraphML
– Gremlin Plugin
• CSV
– BatchInserter
– ParallelBatchInserter
36
Nützliche Helfer bei der täglichen Arbeit
Tools & APIs
37
Tools & APIs (2)
• Admin Web-Interface
– Datenübersicht
– Abfrage
– Commandline Tool
• Neo4j Shell
– Commandline Tool
– Send UNIX-like Commands via RMI (cd, ls, pwd)
– Support für Cypher Queries
• REST API
– Zugriff mittels HTTP und JSON
– Clients für div. Sprache (Java, .NET, PHP, Ruby,...)
• Neoclipse
– Eclipse basiertes Tool für graphische Darstellung
– Filteroptionen für Teilgraphendarstellung
38
Tools & APIs (3)
• Gremlin Plugin
– Groovy basierte Graph Traversal Language via REST
API
– Graph importer
• Indexing
– Lucene
• Third Party Libraries
– Thinkerpop
– Spring Data Neo4j (SDN)
• ...
39
Gibt es nur EINEN zentralen Datentopf?
Polyglot Persistence
40
Polyglot Persistence
Applikation
User Sessions Shopping Card Recommendations
Product Catalog Analytics Financial Data
Redis Riak Neo4j
MongoDB Casandra MySQL
41
Challenges and Highlights
42
Challenges
• Developer Onboarding
• Indexierung
• “Schemaänderungen” -> Migrationen
• Extrem viele Daten
• Oft neue Neo4j Releases
• Bugs – keine Showstopper
• Übersicht im Modell nicht verlieren / Dokumentation pflegen
43
Highlights
• Community mit gutem Support
• Sourcen auf Github
• Gute Performance
• Whiteboard friendliness
• Spring Programmier-Modell mit Spring Data Neo4j
44
Q&A
45
Herzlichen Dank!
Patrick Baumgartner, @patbaumgartner
patrick.baumgartner [at] swiftmind [dot] com
http://www.swiftmind.com @swiftmind

More Related Content

Similar to Daten natuerlich modellieren und verarbeiten mit Neo4j

Echtzeitvisualisierung von Twitter & Co
Echtzeitvisualisierung von Twitter & CoEchtzeitvisualisierung von Twitter & Co
Echtzeitvisualisierung von Twitter & CoOliver Lemm
 
Ist Gradle auch für die APEX-Projekte?
Ist Gradle auch für die APEX-Projekte?Ist Gradle auch für die APEX-Projekte?
Ist Gradle auch für die APEX-Projekte?MT AG
 
LINQ - Einheitlicher Datenzugriff in .NET
LINQ - Einheitlicher Datenzugriff in .NETLINQ - Einheitlicher Datenzugriff in .NET
LINQ - Einheitlicher Datenzugriff in .NETGFU Cyrus AG
 
Graphing mit Graphite (Webinar vom 06.11.2013)
Graphing mit Graphite (Webinar vom 06.11.2013)Graphing mit Graphite (Webinar vom 06.11.2013)
Graphing mit Graphite (Webinar vom 06.11.2013)NETWAYS
 
Schweine latein-vortrag
Schweine latein-vortragSchweine latein-vortrag
Schweine latein-vortragRamon Wartala
 
Yes zu NoSQL mit MongoDB für .NET-Entwickler
Yes zu NoSQL mit MongoDB für .NET-EntwicklerYes zu NoSQL mit MongoDB für .NET-Entwickler
Yes zu NoSQL mit MongoDB für .NET-EntwicklerGregor Biswanger
 
MongoDB Munich 2012: Spring Data MongoDB
MongoDB Munich 2012: Spring Data MongoDBMongoDB Munich 2012: Spring Data MongoDB
MongoDB Munich 2012: Spring Data MongoDBTobias Trelle
 
20181210_ITTage2018_OracleNoSQLDB_KPatenge
20181210_ITTage2018_OracleNoSQLDB_KPatenge20181210_ITTage2018_OracleNoSQLDB_KPatenge
20181210_ITTage2018_OracleNoSQLDB_KPatengeKarin Patenge
 
Cloud Native und Java EE: Freund oder Feind?
Cloud Native und Java EE: Freund oder Feind?Cloud Native und Java EE: Freund oder Feind?
Cloud Native und Java EE: Freund oder Feind?Josef Adersberger
 
Cloud Native & Java EE: Freund oder Feind?
Cloud Native & Java EE: Freund oder Feind?Cloud Native & Java EE: Freund oder Feind?
Cloud Native & Java EE: Freund oder Feind?QAware GmbH
 
Data Scraping with Excel - Campixx 2013 - Maik Schmidt
Data Scraping with Excel - Campixx 2013 - Maik SchmidtData Scraping with Excel - Campixx 2013 - Maik Schmidt
Data Scraping with Excel - Campixx 2013 - Maik SchmidtMaik Schmidt
 
Pandas und matplotlib im praktischen Einsatz
Pandas und matplotlib im praktischen EinsatzPandas und matplotlib im praktischen Einsatz
Pandas und matplotlib im praktischen EinsatzThomas Koch
 
Python in Computational Neuroscience & Modular toolkit for Data Processing (MDP)
Python in Computational Neuroscience & Modular toolkit for Data Processing (MDP)Python in Computational Neuroscience & Modular toolkit for Data Processing (MDP)
Python in Computational Neuroscience & Modular toolkit for Data Processing (MDP)nwilbert
 
Java und Go im Vergleich
Java und Go im VergleichJava und Go im Vergleich
Java und Go im VergleichQAware GmbH
 
Perl Renaissance Reloaded
Perl Renaissance ReloadedPerl Renaissance Reloaded
Perl Renaissance ReloadedGregor Goldbach
 
Never Code Alone: Von Symfony Forms zu einer SPA auf APIs
Never Code Alone: Von Symfony Forms zu einer SPA auf APIsNever Code Alone: Von Symfony Forms zu einer SPA auf APIs
Never Code Alone: Von Symfony Forms zu einer SPA auf APIsStefan Adolf
 
Oliver Hofmann: Office Graph
Oliver Hofmann: Office GraphOliver Hofmann: Office Graph
Oliver Hofmann: Office GraphDavid Schneider
 
2008 - Basta!: DAL DIY
2008 - Basta!: DAL DIY2008 - Basta!: DAL DIY
2008 - Basta!: DAL DIYDaniel Fisher
 
.NET Datenzugriff einfach und performant mit Micro O/R Mappern
.NET Datenzugriff einfach und performant mit Micro O/R Mappern .NET Datenzugriff einfach und performant mit Micro O/R Mappern
.NET Datenzugriff einfach und performant mit Micro O/R Mappern André Krämer
 
REST: Versprechen, Wirklichkeit & Alternativen: GraphQL, GRPC, JSON RPC...
REST: Versprechen, Wirklichkeit & Alternativen: GraphQL, GRPC, JSON RPC...REST: Versprechen, Wirklichkeit & Alternativen: GraphQL, GRPC, JSON RPC...
REST: Versprechen, Wirklichkeit & Alternativen: GraphQL, GRPC, JSON RPC...predic8
 

Similar to Daten natuerlich modellieren und verarbeiten mit Neo4j (20)

Echtzeitvisualisierung von Twitter & Co
Echtzeitvisualisierung von Twitter & CoEchtzeitvisualisierung von Twitter & Co
Echtzeitvisualisierung von Twitter & Co
 
Ist Gradle auch für die APEX-Projekte?
Ist Gradle auch für die APEX-Projekte?Ist Gradle auch für die APEX-Projekte?
Ist Gradle auch für die APEX-Projekte?
 
LINQ - Einheitlicher Datenzugriff in .NET
LINQ - Einheitlicher Datenzugriff in .NETLINQ - Einheitlicher Datenzugriff in .NET
LINQ - Einheitlicher Datenzugriff in .NET
 
Graphing mit Graphite (Webinar vom 06.11.2013)
Graphing mit Graphite (Webinar vom 06.11.2013)Graphing mit Graphite (Webinar vom 06.11.2013)
Graphing mit Graphite (Webinar vom 06.11.2013)
 
Schweine latein-vortrag
Schweine latein-vortragSchweine latein-vortrag
Schweine latein-vortrag
 
Yes zu NoSQL mit MongoDB für .NET-Entwickler
Yes zu NoSQL mit MongoDB für .NET-EntwicklerYes zu NoSQL mit MongoDB für .NET-Entwickler
Yes zu NoSQL mit MongoDB für .NET-Entwickler
 
MongoDB Munich 2012: Spring Data MongoDB
MongoDB Munich 2012: Spring Data MongoDBMongoDB Munich 2012: Spring Data MongoDB
MongoDB Munich 2012: Spring Data MongoDB
 
20181210_ITTage2018_OracleNoSQLDB_KPatenge
20181210_ITTage2018_OracleNoSQLDB_KPatenge20181210_ITTage2018_OracleNoSQLDB_KPatenge
20181210_ITTage2018_OracleNoSQLDB_KPatenge
 
Cloud Native und Java EE: Freund oder Feind?
Cloud Native und Java EE: Freund oder Feind?Cloud Native und Java EE: Freund oder Feind?
Cloud Native und Java EE: Freund oder Feind?
 
Cloud Native & Java EE: Freund oder Feind?
Cloud Native & Java EE: Freund oder Feind?Cloud Native & Java EE: Freund oder Feind?
Cloud Native & Java EE: Freund oder Feind?
 
Data Scraping with Excel - Campixx 2013 - Maik Schmidt
Data Scraping with Excel - Campixx 2013 - Maik SchmidtData Scraping with Excel - Campixx 2013 - Maik Schmidt
Data Scraping with Excel - Campixx 2013 - Maik Schmidt
 
Pandas und matplotlib im praktischen Einsatz
Pandas und matplotlib im praktischen EinsatzPandas und matplotlib im praktischen Einsatz
Pandas und matplotlib im praktischen Einsatz
 
Python in Computational Neuroscience & Modular toolkit for Data Processing (MDP)
Python in Computational Neuroscience & Modular toolkit for Data Processing (MDP)Python in Computational Neuroscience & Modular toolkit for Data Processing (MDP)
Python in Computational Neuroscience & Modular toolkit for Data Processing (MDP)
 
Java und Go im Vergleich
Java und Go im VergleichJava und Go im Vergleich
Java und Go im Vergleich
 
Perl Renaissance Reloaded
Perl Renaissance ReloadedPerl Renaissance Reloaded
Perl Renaissance Reloaded
 
Never Code Alone: Von Symfony Forms zu einer SPA auf APIs
Never Code Alone: Von Symfony Forms zu einer SPA auf APIsNever Code Alone: Von Symfony Forms zu einer SPA auf APIs
Never Code Alone: Von Symfony Forms zu einer SPA auf APIs
 
Oliver Hofmann: Office Graph
Oliver Hofmann: Office GraphOliver Hofmann: Office Graph
Oliver Hofmann: Office Graph
 
2008 - Basta!: DAL DIY
2008 - Basta!: DAL DIY2008 - Basta!: DAL DIY
2008 - Basta!: DAL DIY
 
.NET Datenzugriff einfach und performant mit Micro O/R Mappern
.NET Datenzugriff einfach und performant mit Micro O/R Mappern .NET Datenzugriff einfach und performant mit Micro O/R Mappern
.NET Datenzugriff einfach und performant mit Micro O/R Mappern
 
REST: Versprechen, Wirklichkeit & Alternativen: GraphQL, GRPC, JSON RPC...
REST: Versprechen, Wirklichkeit & Alternativen: GraphQL, GRPC, JSON RPC...REST: Versprechen, Wirklichkeit & Alternativen: GraphQL, GRPC, JSON RPC...
REST: Versprechen, Wirklichkeit & Alternativen: GraphQL, GRPC, JSON RPC...
 

More from Patrick Baumgartner

Neo4j Introduction (for Techies)
Neo4j Introduction (for Techies)Neo4j Introduction (for Techies)
Neo4j Introduction (for Techies)Patrick Baumgartner
 
How to use NoSQL in Enterprise Java Applications - NoSQL Roadshow Basel
How to use NoSQL in Enterprise Java Applications - NoSQL Roadshow BaselHow to use NoSQL in Enterprise Java Applications - NoSQL Roadshow Basel
How to use NoSQL in Enterprise Java Applications - NoSQL Roadshow BaselPatrick Baumgartner
 
How to use NoSQL in Enterprise Java Applications - NoSQL Roadshow Zurich
How to use NoSQL in Enterprise Java Applications - NoSQL Roadshow ZurichHow to use NoSQL in Enterprise Java Applications - NoSQL Roadshow Zurich
How to use NoSQL in Enterprise Java Applications - NoSQL Roadshow ZurichPatrick Baumgartner
 
BED-Con - Tools für den täglichen Kampf als Entwickler
BED-Con - Tools für den täglichen Kampf als EntwicklerBED-Con - Tools für den täglichen Kampf als Entwickler
BED-Con - Tools für den täglichen Kampf als EntwicklerPatrick Baumgartner
 
JFS 2011 - Top 10 Tools & Methoden - Baumgartner, Oehmichen
JFS 2011 - Top 10 Tools & Methoden - Baumgartner, OehmichenJFS 2011 - Top 10 Tools & Methoden - Baumgartner, Oehmichen
JFS 2011 - Top 10 Tools & Methoden - Baumgartner, OehmichenPatrick Baumgartner
 
OSGi für Praktiker - Web Applikationen und verteilte Systeme mit OSGi
OSGi für Praktiker - Web Applikationen und verteilte Systeme mit OSGiOSGi für Praktiker - Web Applikationen und verteilte Systeme mit OSGi
OSGi für Praktiker - Web Applikationen und verteilte Systeme mit OSGiPatrick Baumgartner
 
Pax – Tools für den OSGi Alltag
Pax – Tools für den OSGi AlltagPax – Tools für den OSGi Alltag
Pax – Tools für den OSGi AlltagPatrick Baumgartner
 

More from Patrick Baumgartner (10)

Customer is king
Customer is kingCustomer is king
Customer is king
 
Neo4j Introduction (for Techies)
Neo4j Introduction (for Techies)Neo4j Introduction (for Techies)
Neo4j Introduction (for Techies)
 
How to use NoSQL in Enterprise Java Applications - NoSQL Roadshow Basel
How to use NoSQL in Enterprise Java Applications - NoSQL Roadshow BaselHow to use NoSQL in Enterprise Java Applications - NoSQL Roadshow Basel
How to use NoSQL in Enterprise Java Applications - NoSQL Roadshow Basel
 
How to use NoSQL in Enterprise Java Applications - NoSQL Roadshow Zurich
How to use NoSQL in Enterprise Java Applications - NoSQL Roadshow ZurichHow to use NoSQL in Enterprise Java Applications - NoSQL Roadshow Zurich
How to use NoSQL in Enterprise Java Applications - NoSQL Roadshow Zurich
 
BED-Con - Tools für den täglichen Kampf als Entwickler
BED-Con - Tools für den täglichen Kampf als EntwicklerBED-Con - Tools für den täglichen Kampf als Entwickler
BED-Con - Tools für den täglichen Kampf als Entwickler
 
JFS 2011 - Top 10 Tools & Methoden - Baumgartner, Oehmichen
JFS 2011 - Top 10 Tools & Methoden - Baumgartner, OehmichenJFS 2011 - Top 10 Tools & Methoden - Baumgartner, Oehmichen
JFS 2011 - Top 10 Tools & Methoden - Baumgartner, Oehmichen
 
OSGi für Praktiker - Web Applikationen und verteilte Systeme mit OSGi
OSGi für Praktiker - Web Applikationen und verteilte Systeme mit OSGiOSGi für Praktiker - Web Applikationen und verteilte Systeme mit OSGi
OSGi für Praktiker - Web Applikationen und verteilte Systeme mit OSGi
 
Pax – Tools für den OSGi Alltag
Pax – Tools für den OSGi AlltagPax – Tools für den OSGi Alltag
Pax – Tools für den OSGi Alltag
 
OSGi with the Spring Framework
OSGi with the Spring FrameworkOSGi with the Spring Framework
OSGi with the Spring Framework
 
Whats New In Spring 3.0 ?
Whats New In Spring 3.0 ?Whats New In Spring 3.0 ?
Whats New In Spring 3.0 ?
 

Daten natuerlich modellieren und verarbeiten mit Neo4j

  • 1. Neo4j Daten natürlich modellieren und verarbeiten mit Neo4j Berlin Expert Days 2013 | Berlin | 04.04.2013
  • 2. 2 Speaker Profil Patrick Baumgartner • Senior Software Consultant | Partner @ Swiftmind • Spring Framework, OSGi, Neo4j • Spring Trainer • Co-Autor von „OSGi für Praktiker“ • Agile Projektmethoden & Praktiken • Scrum.org Trainer - PSD Java • @patbaumgartner
  • 3. 3 Swiftmind Ihre Experten für Enterprise Java Spezialgebiete • Java EE • Spring Framework • OSGi • Agile Projektmethoden • Software Engineering Best Practices Standort • Zürich, Schweiz • @swiftmind • http://www.swiftmind.com
  • 4. 4 Agenda • Einführung • Usecases • Neo4j • Querying • Import / Export • Tools und APIs • Polyglot Persistence • Highlights & Challenges beim Einsatz • Q & A
  • 5. 5 New Types of Data Stores
  • 6. 6 NoSQL Datengrösse Datenkomplexität Key-Value Stores Column Family Document Databases Graph Databases Relational Databases 90% aller Usecases
  • 7. 7 Property Graph Modell • Graphen bestehen aus – Knoten / Nodes – Beziehungen / Relations – Eigenschafen / Properties Alice Bob Car name:Bob age:63 sex:male name:Alice age:21 sex:female type:car vendor:tesla
  • 8. 8 Wo finde ich meinen Graphen? Usecases
  • 11. 11 Spatial Data 1 2 5 3 13 8 type:Hotel name:Radisson Blu lat:47.452549 long:8.564615 type:Hotel name:Widder lat:47.373517 long:8.539252
  • 13. 13 Social & Spatial Data Alice Mat 5 Bob 13 8 type:Hotel name:Radisson Blu lat:47.452549 long:8.564615
  • 15. 15 Eine beliebige Business Domäne Proces s KPI Device Activity Function Service
  • 17. 17 Neo4j – Big Picture • Die verbreiteste Graphendatenbank der Welt – Robust: Im Betrieb 24/7 seit 2003 – Reifegrad: Vielfach in Produktion ausgerollt – Community: Ecosystem mit Tools, Bindings, Frameworks • Lizenzen – AGPLv3 Community Edition – OpenSource – Advanced/Enterprise – für kommerzielle Anwendungen • Neo Technology – Entwicklung & Support – ~ 50 Personen / 6 Länder / 3 Kontinente – Total 24 Mio $ VC Finanzierung
  • 18. 18 Eigenschaften • Objektorientiert, flexible Netzwerkstruktur • Support für ACID Transaktionen • Horizontal skalierbar • Java API – Anbindung mittels Java, Groovy, Scala, JRuby • Runtime – Standalone Server – Embedded Database • Diskbasierter Storage Manager • Support für Erweiterungen und Testing
  • 19. 19 Wie komme ich an meine Daten? Querying
  • 20. 20 Graph Querying • Wie erhalte ich die richtigen Nodes aus dem Graphen? – Nenne mir alle Freunde und Freunde von Freunden welche den Film XY mit mehr als 3 Sternen bewertet haben. – ... • Queryingmethoden – Traversing mit Neo4j API – Traversal Descriptions – Graphalgorithmen – Index Queries – Cypher Queries
  • 21. 21 Neo4j API Node bob = ...; for ((Relationship rel: bob.getRelationships(RelTypes.KNOWS)) { Node friend = rel.getEndNode(); System.out.println(friend.getProperty("name")); } • Einfache, aber sehr „low level“ API • Zu „verbose“ für komplexe Traversals
  • 22. 22 Traversal API • Beschreibt Bewegungen durch den Graphen • Callback basiert • Abfrage API für Graphen • Fluent API • Konstrukte • Neo4j implementiert folgende Algorithmen: – A* – Dijkstra – pathsWithLength – shortestPath – allSimplePaths – allPaths
  • 23. 23 Traversal API – Konstrukte
  • 24. 24 Beispiel: Traversal API TraversalDescription directFriends = Traversal.description() .breadthFirst() .relationships(RelTypes.KNOWS) .evaluator(Evaluators.toDepth(1)) .evaluator(Evaluators.excludeStartPosition()); for(Path p : directFriends.traverse(bob)) { System.out.println(p.endNode().getProperty(„firstname“)); }
  • 25. 25 Index Queries • Unterstützung von Node und Relationship Indices • Lucene als Standard-implementierung node id property value 15 name Alice 15 yearOfBirth 1972 16 name Bob 46 name Carol 46 yearOfBirth 1983
  • 26. 26 Cypher Query Language • Graph Query Language ähnlich SQL • Deklarative Sprache • Definiert das „Was“ – nicht das „Wie“ • Nutzt Pattern Matching • Support für – Filterung – Paginierung • Update-Funktionalität
  • 27. 27 Cypher Query Language – Elemente Element Bedeutung START Startelement(e) (Angabe von Index- o. Id-Lookup) MATCH Pattern für zu findende Knoten, beschrieben durch Pfade auf Identifiern (a) –[knows]-> (b) WHERE Resultatsfilterung (boolean-Ausdruck) SKIP LIMIT Paginierung RETURN Definiert Rückgabe-Elemente ORDER BY Sortierung nach Properties PARAMETERS Parameter-Map, die im Cypher mittels Key oder Position verwendet werden kann CREATE Erzeugt einen Knoten
  • 28. 28 Beispiel: Cypher Query String query = "START person=node(12) “ + “MATCH person-[:KNOWS]-friend “ + “RETURN friend“; ExecutionEngine engine = new ExecutionEngine(graphDb); ExecutionResult result = engine.execute(query); Iterator<Object> column = result.columnAs("friend"); while(column.hasNext()) { Node friendNode = (Node)column.next(); System.out.println(friendNode.getProperty(PROP_FIRSTNAME)); }
  • 29. 29 Beispiel: Cypher Create Query CREATE (carol {name:“Carol“}) return carol; +------------------------+ | carol | +------------------------+ | Node[1]{name:“carol“} | +------------------------+ START carol=node(1) CREATE (bob {name:“Bob"}), (bob)-[:knows]->(carol) return carol; START carol=node(1) CREATE (apple {name:“Apple“,typ:“Fruit“}), (carol)-[:owns {number: 5}]->(apple);
  • 30. 30 Wie lese und schreibe ich Daten? Import / Export
  • 31. 31 Erzeugung von Nodes mit Java org.neo4j.graphdb.GraphDatabaseService graphDb = new GraphDatabaseFactory().newEmbeddedDatabase(DB_PATH); Transaction tx = graphDb.beginTx(); try { Node peter = createNode(graphDb, "Peter"); Node carol = createNode(graphDb, “Carol"); peter.createRelationshipTo(carol, RelTypes.KNOWS); .. tx.success(); } finally {tx.finish();} public Node createNode(GraphDatabaseService graphDb, String firstname) { Node person = graphDb.createNode(); person.setProperty(„firstname“, firstname); return person; }
  • 33. 33 Thinkerpop – Blueprint Thinkerpop Blueprint Extensions • GraphML Reader/Writer Library • GraphSon Reader/Writer Library • GML Reader/Writer Library • Java Universal Network/Graph Framework
  • 34. 34 GraphML • GraphML (http://graphml.graphdrawing.org/ ) – Standardisierte Beschreibungssprache für Graphen – Modellierungswerkzeuge – XML <graph id="G" edgedefault="directed"> <node id="n0"/> <node id="n1"/> <edge source="n0" target="n1"/> </graph>
  • 35. 35 Neo4j Bordmittel • GraphML – Gremlin Plugin • CSV – BatchInserter – ParallelBatchInserter
  • 36. 36 Nützliche Helfer bei der täglichen Arbeit Tools & APIs
  • 37. 37 Tools & APIs (2) • Admin Web-Interface – Datenübersicht – Abfrage – Commandline Tool • Neo4j Shell – Commandline Tool – Send UNIX-like Commands via RMI (cd, ls, pwd) – Support für Cypher Queries • REST API – Zugriff mittels HTTP und JSON – Clients für div. Sprache (Java, .NET, PHP, Ruby,...) • Neoclipse – Eclipse basiertes Tool für graphische Darstellung – Filteroptionen für Teilgraphendarstellung
  • 38. 38 Tools & APIs (3) • Gremlin Plugin – Groovy basierte Graph Traversal Language via REST API – Graph importer • Indexing – Lucene • Third Party Libraries – Thinkerpop – Spring Data Neo4j (SDN) • ...
  • 39. 39 Gibt es nur EINEN zentralen Datentopf? Polyglot Persistence
  • 40. 40 Polyglot Persistence Applikation User Sessions Shopping Card Recommendations Product Catalog Analytics Financial Data Redis Riak Neo4j MongoDB Casandra MySQL
  • 42. 42 Challenges • Developer Onboarding • Indexierung • “Schemaänderungen” -> Migrationen • Extrem viele Daten • Oft neue Neo4j Releases • Bugs – keine Showstopper • Übersicht im Modell nicht verlieren / Dokumentation pflegen
  • 43. 43 Highlights • Community mit gutem Support • Sourcen auf Github • Gute Performance • Whiteboard friendliness • Spring Programmier-Modell mit Spring Data Neo4j
  • 45. 45 Herzlichen Dank! Patrick Baumgartner, @patbaumgartner patrick.baumgartner [at] swiftmind [dot] com http://www.swiftmind.com @swiftmind

Editor's Notes

  1. Structured and unstructured dataMassive amounts of data Inexpensive horizontal scalingApps and data in the cloudSocial network features