Download - Application modelling with graph databases
Application Modelingwith Graph Databases
@josh_adellhttp://www.servicetrade.com
http://blog.everymansoftware.com
http://github.com/jadell/neo4jphp
https://joind.in/10430
The Problem
The Solution?> -- First degree> SELECT actor_name FROM cast WHERE movie_title IN (SELECT DISTINCT movie_title FROM cast WHERE actor_name='Kevin Bacon')
> -- Second degree> SELECT actor_name FROM cast WHERE movie_title IN (SELECT DISTINCT movie_title FROM cast WHERE actor_name IN (SELECT actor_name FROM cast WHERE movie_title IN (SELECT DISTINCT movie_title FROM cast WHERE actor_name='Kevin Bacon')))
> -- Third degree> SELECT actor_name FROM cast WHERE movie_title IN(SELECT DISTINCT movie_title FROM cast WHERE actor_name IN (SELECT actor_name FROM cast WHERE movie_title IN (SELECT DISTINCT movie_title FROM cast WHERE actor_name IN (SELECT actor_name FROM cast WHERE movie_title IN (SELECT DISTINCT movie_title FROM cast WHERE actor_name='Kevin Bacon'))))
The TruthRelational databases aren't very good with relationships
Data
RDBMs
Try again?
Warning: Computer Science AheadA graph is an ordered pair G = (V, E)
where V is a set of vertices and
E is a set of edges,which are pairs of vertices in V.
If vertex pairs in E are ordered,the graph is directed.
Property Graph
Nodes have properties and labels
Relationships have properties, a type and direction
Relationships are first-class entitiesQueried just like Nodes
Indexes
Unique constraintsnew in Neo4j 2.0!
Graphs are Everywhere
Relational Databases are Graphs!
Everything is connected
Modeling "Whiteboard-Friendly"
Nouns => nodes, Verbs => relationships
Back to Bacon
MATCH p = shortestPath( (r:Actor) - [*] - (b:Actor) )
WHERE r.name=”Keanu Reeves” AND b.name=”Kevin Bacon”
RETURN p, LENGTH(p)/2
SocialMATCH
(:Person {name:"Josh"})-[:FRIEND_OF]-(p:Person),(m:Movie)
WHERE NOT(p)-[:HAS_WATCHED]->(m)
RETURN COUNT(p) as not_seen, m
ORDER BY not_seen DESC LIMIT 1
But Wait...There's More!Mutating (insert, update ~ create, merge)
Indexing (auto, full-text, spatial)
Batches and Transactions
Embedded (for JVM) or REST
Where fore art thou, RDB?Aggregation
Ordered data
Truly tabular data
Few or clearly defined relationships
Questions?
Resources● http://github.com/jadell/neo4jphp
● http://neo4j.org
● Jim Webber - A Little Graph Theory for the Busy Developer○ http://vimeo.com/76713692 - Jim Webber
● http://joshadell.com
● https://joind.in/10430