application modelling with graph databases

19
Application Modeling with Graph Databases

Upload: josh-adell

Post on 10-May-2015

4.158 views

Category:

Technology


1 download

DESCRIPTION

Applications are built around domain and business concepts. As developers, we model these concepts and their relationships all the time in our heads, on whiteboards, and in code. Then we perform mental gymnastics translating objects and relationships into tables, rows and columns. Wouldn't it be better if our data storage thought the same way we do? This talk will describe a few types of problems that relational databases and many contemporary NOSQL solutions have trouble modeling, and how graph databases are a solution to those problems. Along the way, attendees will be introduced to the graph database Neo4j, will see how to interact with it via the Cypher query language, and learn how they can start modeling their own application domains as graphs.

TRANSCRIPT

Page 1: Application modelling with graph databases

Application Modelingwith Graph Databases

Page 2: Application modelling with graph databases

@josh_adellhttp://www.servicetrade.com

http://blog.everymansoftware.com

http://github.com/jadell/neo4jphp

https://joind.in/10430

Page 3: Application modelling with graph databases

The Problem

Page 4: Application modelling with graph databases

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'))))

Page 5: Application modelling with graph databases

The TruthRelational databases aren't very good with relationships

Data

RDBMs

Page 6: Application modelling with graph databases

Try again?

Page 7: Application modelling with graph databases
Page 8: Application modelling with graph databases

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.

Page 9: Application modelling with graph databases

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!

Page 10: Application modelling with graph databases

Graphs are Everywhere

Page 11: Application modelling with graph databases

Relational Databases are Graphs!

Page 12: Application modelling with graph databases

Everything is connected

Page 13: Application modelling with graph databases

Modeling "Whiteboard-Friendly"

Nouns => nodes, Verbs => relationships

Page 14: Application modelling with graph databases

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

Page 15: Application modelling with graph databases

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

Page 16: Application modelling with graph databases

But Wait...There's More!Mutating (insert, update ~ create, merge)

Indexing (auto, full-text, spatial)

Batches and Transactions

Embedded (for JVM) or REST

Page 17: Application modelling with graph databases

Where fore art thou, RDB?Aggregation

Ordered data

Truly tabular data

Few or clearly defined relationships

Page 18: Application modelling with graph databases

Questions?

Page 19: Application modelling with graph databases

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