9. User
User
name: “Jenny”
name: “Peter”
DROVE
date: 2014-01-27
ipsum
DROVE
date: 2014-01-29
User
DROVE
date: 2014-01-29
RODE_TOGETHER
User
name: “Alice”
FRIEND_OF
name: “Michael”
RODE_TOGETHER
User
name: “Laura”
FRIEND_OF
10. User
name: “Jenny”
User
name: “Peter”
DRIVER
Ride
Ride
date: 2014-01-27
from: “Brighton”
to: “Hastings”
date: 2014-01-29
from: “London”
to: “Nottingham”
PASSENGER
PASSENGER
DRIVER
ipsum
PASSENGER
User
User
name: “Alice”
FRIEND_OF
name: “Michael”
User
name: “Laura”
FRIEND_OF
12. User
name: “Jenny”
User
name: “Peter”
DRIVER
Ride
Ride
date: 2014-01-27
from: “Brighton”
to: “Hastings”
date: 2014-01-29
from: “London”
to: “Nottingham”
PASSENGER
PASSENGER
DRIVER
ipsum
PASSENGER
User
User
name: “Alice”
FRIEND_OF
name: “Michael”
User
name: “Laura”
FRIEND_OF
13. User
name: “Jenny”
User
name: “Peter”
DRIVER
Ride
Ride
date: 2014-01-27
from: “Brighton”
to: “Hastings”
date: 2014-01-29
from: “London”
to: “Nottingham”
DRIVER
ipsum
RATED
rating: 5
RATED
rating: 3
PASSENGER
PASSENGER
PASSENGER
User
User
name: “Alice”
FRIEND_OF
name: “Michael”
User
name: “Laura”
FRIEND_OF
14. User
name: “Jenny”
User
name: “Peter”
DRIVER
Ride
Ride
date: 2014-01-27
from: “Brighton”
to: “Hastings”
date: 2014-01-29
from: “London”
to: “Nottingham”
DRIVER
ipsum
RATED
rating: 5
RATED
rating: 3
PASSENGER
PASSENGER
User
name: “Alice”
PASSENGER
User
name: “Michael”
User
FRIEND_OF
name: “Laura”
15. User
name: “Jenny”
User
name: “Peter”
DRIVER
Ride
Ride
date: 2014-01-27
from: “Brighton”
to: “Hastings”
date: 2014-01-29
from: “London”
to: “Nottingham”
DRIVER
ipsum
RATED
rating: 5
RATED
rating: 3
PASSENGER
PASSENGER
User
name: “Alice”
PASSENGER
User
name: “Michael”
User
FRIEND_OF
name: “Laura”
28. Node Record in the Node Store (9 bytes), first bit = inUse flag
next
relationship
(35 bits)
next
property
(36 bits)
Relationship Record in the Relationship Store (33 bytes), first bit = inUse flag, second bit unused
first node's
first node's
second
second
type
previous
next
node's first
node's next next property
first node
second node
(16
relationship relationship relationship relationship
(36 bits)
(35 bits)
(35 bits)
bits)
(35 bits)
(35 bits)
(35 bits)
(35 bits)
Neo4j Data Layout
GraphAware
TM
29. Traversal APIs
Neo4j APIs allow developers to
completely ignore relationship direction
when querying the graph.
GraphAware
TM
38. User
Qualifying by
Properties
name: “Jenny”
User
name: “Peter”
DRIVER
Ride
Ride
date: 2014-01-27
from: “Brighton”
to: “Hastings”
date: 2014-01-29
from: “London”
to: “Nottingham”
DRIVER
ipsum
RATED
rating: 5
RATED
rating: 3
PASSENGER
PASSENGER
User
name: “Alice”
PASSENGER
User
name: “Michael”
User
FRIEND_OF
name: “Laura”
39. Who liked the ride? (Cypher)
START
ride=node({id})
MATCH
(ride)<-‐[r:RATED]-‐(passenger)
WHERE
r.rating
>
3
RETURN
passenger
GraphAware
TM
40. Who liked the ride? (Java)
for
(Relationship
r
:
ride.getRelationships(INCOMING,
RATED))
{
if
((int)
r.getProperty("rating")
>
3)
{
Node
passenger
=
r.getStartNode();
//do
something
with
it
}
}
GraphAware
TM
41. User
Qualifying by
Relationship Type
name: “Jenny”
User
name: “Peter”
DRIVER
Ride
Ride
date: 2014-01-27
from: “Brighton”
to: “Hastings”
DRIVER
date: 2014-01-29
from: “London”
to: “Nottingham”
LOVED
NEUTRAL
PASSENGER
PASSENGER
User
name: “Alice”
PASSENGER
User
name: “Michael”
User
FRIEND_OF
name: “Laura”
42. Who liked the ride? (Cypher)
START
ride=node({id})
MATCH
(ride)<-‐[r:LIKED|LOVED]-‐(passenger)
RETURN
passenger
GraphAware
TM
43. Who liked the ride? (Java)
for
(Relationship
r
:
ride.getRelationships(INCOMING,
LIKED,
LOVED))
{
Node
passenger
=
r.getStartNode();
//do
something
with
it
}
GraphAware
TM
61. Next
meetup
• The
transport
graph
– Roads,
Nodes
and
Automobiles
(Jacqui
Read)
– Transport
Network
Route
Finding
Using
A
Graph
(Ian
Cartwright
&
Ben
Earlham)
th
February
2014
26
•
• Here!
GraphAware
TM