You are on page 1of 26

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
r
a
p
h

V
e
r
t
e
x

E
d
g
e

hup://de.wlklpedla.org/wlkl/Craph_(CraphenLheorle)
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
@Label
public interface User {

@Indexed(unique = true)
String getName();
void setName(String name);

@Relation("POSTED")
@Outgoing
Set<Tweet> getTweets();

@Relation("FOLLOWS")
@Outgoing
Set<User> getFollowing();

}
@Label
public 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)
WHERE
me.name = 'Neo4j’ AND NOT (me)-[:FOLLOWS]->(user)
WITH
user ORDER BY user.name
RETURN
DISTINCT 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
lars.martin@smb-tec.com