7. 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
8.
9. Application Modeling with Graph Databases – Relationships are cool!
Graphs – a Crash Course in Coolness
G = (V, E)Graph
Vertex
Edgeh"p://de.wikipedia.org/wiki/Graph_(Graphentheorie)
10. Application Modeling with Graph Databases – Relationships are cool!
Graphs – a Crash Course in Coolness
11. 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))
12.
13. Application Modeling with Graph Databases – Relationships are cool!
Real World Graphs (1)
maps closely
to the data
model
noun = vertex
verb = edge
14. Application Modeling with Graph Databases – Relationships are cool!
Real World Graphs (2)
“whiteboard” friendly
16. 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
17.
18. 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
20. 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();
…
}
21. 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();
23. 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.”
24.
25. SMB GmbH – Plauenscher Ring 21 – D-01187 Dresden
Dipl.-Inf. Lars Martin
+49-(0)173-64 24 461
lars.martin@smb-tec.com