application modeling with graph databases - relationships are cool!
Post on 18-Oct-2015
8 Views
Preview:
DESCRIPTION
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
Whos 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 getTweets(); @Relation("FOLLOWS") @Outgoing Set 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 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 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
top related