application modeling with graph databases - relationships are cool
DESCRIPTION
My slides on Application Modeling with Graph Databases at JUG Saxony Day 2014.TRANSCRIPT
Application Modeling with Graph Databases – Relationships are cool!
Lars Martin, JUG Saxony Day, 04.04.2014
Application Modeling with Graph Databases – Relationships are cool!
§ Developer, Architect, Consultant
§ Java Enterprise, Eclipse, Continuous …
§ Entrepreneur since 1998
Who’s the guy?
Agenda
² Status Quo
² SQL Join Hell
² Graph Basics
² Application Modeling
Application Modeling with Graph Databases – Relationships are cool!
Application Modeling with Graph Databases – Relationships are cool!
Status Quo
http://db-engines.com/en/ranking_definition
Application Modeling with Graph Databases – Relationships are cool!
SQL Join Hell (1)
Customer Id Name Address
1 Robert 3 2 Lars 7 3 Michael 23
Address Id Location
3 Berlin 4 Munich 7 Dresden
23 Leipzig
CustomerAddress CId AId
1 3 2 7 2 8 3 23
Address Id Location
3 Berlin 7 Dresden 8 New York
23 Leipzig
Address Id Customer Location
3 1 Berlin 7 2 Dresden 8 2 New York
23 3 Leipzig
Customer Id Name
1 Robert 2 Lars 3 Michael
1:1 Relationship
m:n Relationship
1:n Relationship
Customer Id Name
1 Robert 2 Lars 3 Michael
Application Modeling with Graph Databases – Relationships are cool!
SQL Join Hell (2)
Application Modeling with Graph Databases – Relationships are cool!
SQL Join Hell (3)
all JOINs are executed every time you query (traverse) the relationship
executing a JOIN means to search for a key in another table
with Indices executing a JOIN means to lookup a key
B-Tree Index: O(log(n))
more entries è more lookups è slower JOINs
Application Modeling with Graph Databases – Relationships are cool!
Graphs – a Crash Course in Coolness
G = (V, E) G
raph
Vert
ex
Edge
h"p://de.wikipedia.org/wiki/Graph_(Graphentheorie)
Application Modeling with Graph Databases – Relationships are cool!
Graphs – a Crash Course in Coolness
Application Modeling with Graph Databases – Relationships are cool!
Graphs – a Crash Course in Coolness
Vertices • unique identifier • outgoing edges • incoming edges • key/value pairs
Edges • unique identifier • start vertex • end vertex • type • key/value pairs
https://github.com/tinkerpop/gremlin/wiki/Defining-a-Property-Graph
index-free adjacency (≈ O(1))
Application Modeling with Graph Databases – Relationships are cool!
Real World Graphs (1)
maps closely to the data model noun = vertex verb = edge
Application Modeling with Graph Databases – Relationships are cool!
Real World Graphs (2)
“whiteboard” friendly
Application Modeling with Graph Databases – Relationships are cool!
Ø Social: Facebook, Twitter, LinkedIn
Ø Recommendations: Amazon, MovieDB
Ø Logistics: Package Routing
Ø Financial: Fraud Detection
Ø Software: Dependency Management
Ø Authorization & Access Control:
Ø …
Real World Graphs (3)
Application Modeling with Graph Databases – Relationships are cool!
Ø Social: Facebook, Twitter, LinkedIn
Ø Recommendations: Amazon, MovieDB
Ø Logistics: Package Routing
Ø Financial: Fraud Detection
Ø Software: Dependency Management
Ø Authorization & Access Control:
Ø …
Real World Graphs (3)
our area of activities
Application Modeling with Graph Databases – Relationships are cool!
Application Modeling
Spring Data – projects.spring.io/spring-data
ü Spring Data Neo4j supports property graph features
XO - eXtended Objects – github.com/buschmais/xo
ü Lightweight Datastore-agnostic ORM
ü Implementation of “Composite Pattern”
ü Interface based (no POJOS), multiple inheritance
ü XO-Neo4j supports property graph features
Application Modeling with Graph Databases – Relationships are cool!
Application Modeling
Application Modeling with Graph Databases – Relationships are cool!
Application Modeling
@Labelpublic interface User { @Indexed(unique = true) String getName(); void setName(String name); @Relation("POSTED") @Outgoing Set<Tweet> getTweets(); @Relation("FOLLOWS") @Outgoing Set<User> getFollowing();}
@Labelpublic interface Tweet { @Indexed(unique = true) long getTweetId(); void setTweetId(long id); String getText(); void setText(String text); @Relation("POSTED") @Incoming User getSender(); void setSender(User sender); @Relation("MENTIONED") @Outgoing Set<User> getMentions();
…}
MATCH(me)-[:POSTED]->(tweet)-[:MENTIONED]->(user)
WHEREme.name = 'Neo4j’ AND NOT (me)-[:FOLLOWS]->(user)
WITHuser ORDER BY user.name
RETURNDISTINCT user
Application Modeling with Graph Databases – Relationships are cool!
Application Modeling
@ResultOf@Cypher("MATCH (me)-[:POSTED]->(tweet)-[:MENTIONED]->(user) WHERE id(me) = id({this}) AND NOT (me)-[:FOLLOWS]->(user) WITH user ORDER BY user.name RETURN DISTINCT user")Result<User> suggestFriends();
Demo
Application Modeling with Graph Databases – Relationships are cool!
Application Modeling
Relational Database • tabular data structures
Graph Database
• connected data, esp. multiple degrees
• schema-less
Application Modeling with Graph Databases – Relationships are cool!
Application Modeling
“A relational database may tell you the average age of everyone in this place …
… but a graph database will tell you who is most likely to buy you a beer.”
SMB GmbH – Plauenscher Ring 21 – D-01187 Dresden
Dipl.-Inf. Lars Martin +49-(0)173-64 24 461 [email protected]