Today's complex data is not only big, but also semi-structured and densely connected. In this session we'll look at how size, structure and connectedness have converged to change the way we work with data. We'll then go on to look at some of the new opportunities for creating end-user value that have emerged in a world of connected data, illustrated with practical examples implemented using Neo4j, the world's leading graph database.
Speaker: Ian Robinson, Director of Customer Success, Neo Technology
Ian is an engineer at Neo Technology, currently working on research and development for future versions of the Neo4j graph database. Prior to joining the engineering team, Ian served as Neo's Director of Customer Success, managing training, professional services and support, and working with customers to design and develop graph database solutions. He is a co-author of 'Graph Databases' (O'Reilly) and 'REST in Practice' (O'Reilly), and a contributor to 'REST: From Research to Practice' (Springer) and 'Service Design Patterns' (Addison-Wesley). He presents at conferences worldwide on REST and the graph capabilities of Neo4j, and blogs at http://iansrobinson.com.
22. #neo4j
Graph
Database
Benefits
“Minutes
to
milliseconds”
performance
• Millions
of
‘joins’
per
second
• Consistent
query
0mes
as
dataset
grows
Fit
for
the
domain
• Lots
of
join
tables?
Connectedness
• Lots
of
sparse
tables?
Semi-‐structure
Business
responsiveness
• Easy
to
evolve
23. #neo4j
Querying
Graph
Data
• Describing
graphs
• Crea0ng
nodes,
rela0onships
and
proper0es
• Querying
graphs
47. #neo4j
Find
Colleagues
MATCH (company)<-[:WORKS_FOR]-(me:person)
-[:HAS_SKILL]->(skill),
(company)<-[:WORKS_FOR]-(colleague)
-[:HAS_SKILL]->(skill)
WHERE me.name = 'Ian'
RETURN colleague.name AS name,
count(skill) AS score,
collect(skill.name) AS skills
ORDER BY score DESC
48. #neo4j
Find
Colleagues
MATCH (company)<-[:WORKS_FOR]-(me:person)
-[:HAS_SKILL]->(skill),
(company)<-[:WORKS_FOR]-(colleague)
-[:HAS_SKILL]->(skill)
WHERE me.name = 'Ian'
RETURN colleague.name AS name,
count(skill) AS score,
collect(skill.name) AS skills
ORDER BY score DESC
49. #neo4j
Find
Colleagues
MATCH (company)<-[:WORKS_FOR]-(me:person)
-[:HAS_SKILL]->(skill),
(company)<-[:WORKS_FOR]-(colleague)
-[:HAS_SKILL]->(skill)
WHERE me.name = 'Ian'
RETURN colleague.name AS name,
count(skill) AS score,
collect(skill.name) AS skills
ORDER BY score DESC
50. #neo4j
Find
Colleagues
MATCH (company)<-[:WORKS_FOR]-(me:person)
-[:HAS_SKILL]->(skill),
(company)<-[:WORKS_FOR]-(colleague)
-[:HAS_SKILL]->(skill)
WHERE me.name = 'Ian'
RETURN colleague.name AS name,
count(skill) AS score,
collect(skill.name) AS skills
ORDER BY score DESC
52. #neo4j
Search
the
En0re
Network
MATCH (me:person)-[:HAS_SKILL]->(skill),
(company)<-[:WORKS_FOR]-(person)
-[:HAS_SKILL]->(skill)
WHERE me.name = 'Ian'
RETURN person.name AS name,
company.name AS company,
count(skill) AS score,
collect(skill.name) AS skills
ORDER BY score DESC
53. #neo4j
Search
the
En0re
Network
MATCH (me:person)-[:HAS_SKILL]->(skill),
(company)<-[:WORKS_FOR]-(person)
-[:HAS_SKILL]->(skill)
WHERE me.name = 'Ian'
RETURN person.name AS name,
company.name AS company,
count(skill) AS score,
collect(skill.name) AS skills
ORDER BY score DESC
55. #neo4j
Find
People
With
Matching
Skills
MATCH p=(me:person)-[:WORKED_ON*2..4]-(person)
-[:HAS_SKILL]->(skill)
WHERE me.name = 'Ian'
AND person <> me
AND skill.name IN ['Java','Clojure','SQL']
WITH person, skill, min(length(p)) as pathLength
RETURN person.name AS name,
count(skill) AS score,
collect(skill.name) AS skills,
((pathLength - 1)/2) AS distance
ORDER BY score DESC
56. #neo4j
Find
People
With
Matching
Skills
MATCH p=(me:person)-[:WORKED_ON*2..4]-(person)
-[:HAS_SKILL]->(skill)
WHERE me.name = 'Ian'
AND person <> me
AND skill.name IN ['Java','Clojure','SQL']
WITH person, skill, min(length(p)) as pathLength
RETURN person.name AS name,
count(skill) AS score,
collect(skill.name) AS skills,
((pathLength - 1)/2) AS distance
ORDER BY score DESC
59. #neo4j
Network
Impact
Analysis
• Which
parts
of
network
does
a
customer
depend
on?
• Who
will
be
affected
if
we
replace
a
network
element?
60. #neo4j
Asset
Management
&
Access
Control
• Which
assets
can
an
admin
control?
• Who
can
change
my
subscrip0on?
61. #neo4j
Logis0cs
• What’s
the
quickest
delivery
route
for
this
parcel?
62. #neo4j
Social
Network
&
Recommenda0ons
• Which
assets
can
I
access?
• Who
shares
my
interests?
63. #neo4j
Download
the
free
book
from
O’Reilly
hfp://graphdatabases.com
Ian Robinson,
Jim Webber & Emil Eifrem
Graph
Databases
h
Com
plim
ents
ofNeo
Technology
Thank
you
@ianSrobinson
ian@neotechnology.com
github.com/iansrobinson