owf12/java ian robinson

50
#neo4j New Opportuni0es for Connected Data @ianSrobinson [email protected]

Upload: open-world-forum

Post on 01-Jun-2015

1.181 views

Category:

Documents


4 download

TRANSCRIPT

Page 1: OWF12/Java Ian robinson

#neo4j  

New  Opportuni0es  for  Connected  Data  

@ianSrobinson  [email protected]  

 

Page 2: OWF12/Java Ian robinson

#neo4j  

Agenda  

•  Data  complexity  •  Graph  databases  –  features  and  benefits  •  Querying  graph  data  •  Use  cases  

Page 3: OWF12/Java Ian robinson

#neo4j  

Data  Complexity  

complexity = f(size, semi-structure, connectedness)

Page 4: OWF12/Java Ian robinson

#neo4j  

complexity = f(size, semi-structure, connectedness)

Data  Complexity  

Page 5: OWF12/Java Ian robinson

#neo4j  

Semi-­‐Structure  

Page 6: OWF12/Java Ian robinson

#neo4j  

Semi-­‐Structure  

Email:  [email protected]  Email:  [email protected]  Twi*er:  @iansrobinson  Skype:  iansrobinson  

FIRST_NAME   LAST_NAME  USER_ID   EMAIL_1   EMAIL_2   TWITTER  FACEBOOK   SKYPE  

Ian   Robinson  315   [email protected]   [email protected]   @iansrobinson  NULL   iansrobinson  

USER  

CONTACT  

CONTACT_TYPE  

0..n  

Page 7: OWF12/Java Ian robinson

#neo4j  

Connectedness  

Page 8: OWF12/Java Ian robinson

#neo4j  

Page 9: OWF12/Java Ian robinson

#neo4j  

Page 10: OWF12/Java Ian robinson

#neo4j  

Page 11: OWF12/Java Ian robinson

#neo4j  

Page 12: OWF12/Java Ian robinson

#neo4j  

Page 13: OWF12/Java Ian robinson

#neo4j  

Page 14: OWF12/Java Ian robinson

#neo4j  

Page 15: OWF12/Java Ian robinson

#neo4j  

Graphs  Are  Everywhere  

Page 16: OWF12/Java Ian robinson

#neo4j  

Neo4j  is  a  Graph  Database  

•  Store  •  Manage  •  Query   data  

as  a  graph  

Page 17: OWF12/Java Ian robinson

#neo4j  

Property  Graph  Data  Model  

Page 18: OWF12/Java Ian robinson

#neo4j  

Graph  Database  Benefits  

Densely-­‐connected,  semi-­‐structured  domains  •  Lots  of  join  tables?  Connectedness  •  Lots  of  sparse  tables?  Semi-­‐structure  

Data  Model  Vola=lity  •  Easy  to  evolve  

Join  Complexity  and  Performance  •  Millions  of  ‘joins’  per  second  •  Consistent  query  0mes  as  dataset  grows  

Page 19: OWF12/Java Ian robinson

#neo4j  

Querying  Graph  Data  

•  A  language  for  describing  graphs  •  Crea0ng  nodes,  rela0onships  and  proper0es  •  Querying  data  

Page 20: OWF12/Java Ian robinson

#neo4j  

Describing  Graphs  

Page 21: OWF12/Java Ian robinson

#neo4j  

Cypher  

(graphs)<-[:INTERESTED_IN]-(ben)-[:INTERESTED_IN]->(rest),(ben)-[:WORKS_FOR]->(acme)

Page 22: OWF12/Java Ian robinson

#neo4j  

Cypher  

(ben)-[:INTERESTED_IN]->(graphs),(ben)-[:INTERESTED_IN]->(rest),(ben)-[:WORKS_FOR]->(acme)

Page 23: OWF12/Java Ian robinson

#neo4j  

Create  Some  Data  CREATE ben = { name : 'Ben' }, acme = { name : 'Acme' }, rest = { label : 'REST' }, graphs = { label : 'Graphs' }, ben-[:WORKS_FOR]->acme, ben-[:INTERESTED_IN]->rest, ben-[:INTERESTED_IN]->graphsRETURN ben

Page 24: OWF12/Java Ian robinson

#neo4j  

Create  Nodes  CREATE ben = { name : 'Ben' }, acme = { name : 'Acme' }, rest = { label : 'REST' }, graphs = { label : 'Graphs' }, ben-[:WORKS_FOR]->acme, ben-[:INTERESTED_IN]->rest, ben-[:INTERESTED_IN]->graphsRETURN ben

Page 25: OWF12/Java Ian robinson

#neo4j  

Create  Rela0onships  CREATE ben = { name : 'Ben' }, acme = { name : 'Acme' }, rest = { label : 'REST' }, graphs = { label : 'Graphs' }, ben-[:WORKS_FOR]->acme, ben-[:INTERESTED_IN]->rest, ben-[:INTERESTED_IN]->graphsRETURN ben

Page 26: OWF12/Java Ian robinson

#neo4j  

Return  Node  CREATE ben = { name : 'Ben' }, acme = { name : 'Acme' }, rest = { label : 'REST' }, graphs = { label : 'Graphs' }, ben-[:WORKS_FOR]->acme, ben-[:INTERESTED_IN]->rest, ben-[:INTERESTED_IN]->graphsRETURN ben

Page 27: OWF12/Java Ian robinson

#neo4j  

Eventually…  

Page 28: OWF12/Java Ian robinson

#neo4j  

Querying  a  Graph  

Graph  local:  •  One  or  more  start  nodes  •  Explore  surrounding  graph  •  Millions  of  joins  per  second  

Page 29: OWF12/Java Ian robinson

#neo4j  

Queries:  Pacern  Matching  

Pacern  

Page 30: OWF12/Java Ian robinson

#neo4j  

Start  Node  

Pacern  

Page 31: OWF12/Java Ian robinson

#neo4j  

Match  

Pacern  

Page 32: OWF12/Java Ian robinson

#neo4j  

Match  

Pacern  

Page 33: OWF12/Java Ian robinson

#neo4j  

Match  

Pacern  

Page 34: OWF12/Java Ian robinson

#neo4j  

Non-­‐Match  

Pacern  

Page 35: OWF12/Java Ian robinson

#neo4j  

Non-­‐Match  

Pacern  

Page 36: OWF12/Java Ian robinson

#neo4j  

Colleagues  Who  Share  My  Interests  

Page 37: OWF12/Java Ian robinson

#neo4j  

Cypher  Pacern  

me-[:INTERESTED_IN]->topic,me-[:WORKS_FOR]->company,colleague-[:INTERESTED_IN]->topic, colleague-[:WORKS_FOR]->company

Page 38: OWF12/Java Ian robinson

#neo4j  

Find  Colleagues  START me=node:users(name = "sarah")MATCH me-[:INTERESTED_IN]->topic, me-[:WORKS_FOR]->company, colleague-[:INTERESTED_IN]->topic, colleague-[:WORKS_FOR]->companyRETURN colleague.name AS name, count(topic) AS score, collect(topic.label) AS interestsORDER BY score DESC

Page 39: OWF12/Java Ian robinson

#neo4j  

Find  Start  Node  START me=node:users(name = "sarah")MATCH me-[:INTERESTED_IN]->topic, me-[:WORKS_FOR]->company, colleague-[:INTERESTED_IN]->topic, colleague-[:WORKS_FOR]->companyRETURN colleague.name AS name, count(topic) AS score, collect(topic.label) AS interestsORDER BY score DESC

Page 40: OWF12/Java Ian robinson

#neo4j  

Describe  Pacern  START me=node:users(name = "sarah")MATCH me-[:INTERESTED_IN]->topic, me-[:WORKS_FOR]->company, colleague-[:INTERESTED_IN]->topic, colleague-[:WORKS_FOR]->companyRETURN colleague.name AS name, count(topic) AS score, collect(topic.label) AS interestsORDER BY score DESC

Page 41: OWF12/Java Ian robinson

#neo4j  

Construct  Results  START me=node:users(name = "sarah")MATCH me-[:INTERESTED_IN]->topic, me-[:WORKS_FOR]->company, colleague-[:INTERESTED_IN]->topic, colleague-[:WORKS_FOR]->companyRETURN colleague.name AS name, count(topic) AS score, collect(topic.label) AS interestsORDER BY score DESC

Page 42: OWF12/Java Ian robinson

#neo4j  

Case  Studies  

Page 43: OWF12/Java Ian robinson

#neo4j  

Network  Impact  Analysis  

•  Which  parts  of  network  does  a  customer  depend  on?  

•  Who  will  be  affected  if  we  replace  a  network  element?  

Page 44: OWF12/Java Ian robinson

#neo4j  

Asset  Management  &  Access  Control  

•  Which  assets  can  an  admin  control?  

•  Who  can  change  my  subscrip0on?  

Page 45: OWF12/Java Ian robinson

#neo4j  

Logis0cs  

•  What’s  the  quickest  delivery  route  for  this  parcel?  

Page 46: OWF12/Java Ian robinson

#neo4j  

Social  Network  &  Recommenda0ons  

•  Which  assets  can  I  access?  

•  Who  shares  my  interests?  

Page 47: OWF12/Java Ian robinson

#neo4j  

Thank  You  

@iansrobinson  [email protected]  

 

Page 48: OWF12/Java Ian robinson

#neo4j  

Graph  Databases  

Graph  Storage   na0ve  non-­‐na0ve  

Graph  Processin

g  

na0ve  

FlockDB AllegroGraph

Page 49: OWF12/Java Ian robinson

#neo4j  

RDF  Triples  

Page 50: OWF12/Java Ian robinson

#neo4j  

Hypergraph