property graphs: neo4j and...

110
Property Graphs: Neo4j and Cypher 1

Upload: others

Post on 12-Jul-2020

6 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Property Graphs: Neo4j and Cypherhomepages.inf.ed.ac.uk/libkin/teach/beijing2018/neo4j-beijing.pdf · Neo4j name: Ian name: ACME Person Company R L name: Jacob Person name: Tobias

PropertyGraphs:Neo4jandCypher

1

Page 2: Property Graphs: Neo4j and Cypherhomepages.inf.ed.ac.uk/libkin/teach/beijing2018/neo4j-beijing.pdf · Neo4j name: Ian name: ACME Person Company R L name: Jacob Person name: Tobias

Neo4j-themostcommonlyusedgraphDBMS,byfar

https://db-engines.com/en/ranking/graph+dbms

Model:propertygraphs(graphswithnodesandedgescarryingmultipledatavaluesarrangedaskey-valuepairs)

Querylanguage:Cypher.ASCII-artpatternmatching+usualdatabasefeatures

Page 3: Property Graphs: Neo4j and Cypherhomepages.inf.ed.ac.uk/libkin/teach/beijing2018/neo4j-beijing.pdf · Neo4j name: Ian name: ACME Person Company R L name: Jacob Person name: Tobias

Modellingtranslationsandcomplexaccessrules

3

EN:house

Page 4: Property Graphs: Neo4j and Cypherhomepages.inf.ed.ac.uk/libkin/teach/beijing2018/neo4j-beijing.pdf · Neo4j name: Ian name: ACME Person Company R L name: Jacob Person name: Tobias

Modellingtranslationsandcomplexaccessrules

3

EN:house

house

Page 5: Property Graphs: Neo4j and Cypherhomepages.inf.ed.ac.uk/libkin/teach/beijing2018/neo4j-beijing.pdf · Neo4j name: Ian name: ACME Person Company R L name: Jacob Person name: Tobias

Modellingtranslationsandcomplexaccessrules

3

EN:house

house

ES:casa

DE:Hause

SE:hus

Page 6: Property Graphs: Neo4j and Cypherhomepages.inf.ed.ac.uk/libkin/teach/beijing2018/neo4j-beijing.pdf · Neo4j name: Ian name: ACME Person Company R L name: Jacob Person name: Tobias

Modellingtranslationsandcomplexaccessrules

3

EN:house

house

building

EN:building

ES:edificio DE:Gebäude

SE:byggnad

ES:casa

DE:Hause

SE:hus

Page 7: Property Graphs: Neo4j and Cypherhomepages.inf.ed.ac.uk/libkin/teach/beijing2018/neo4j-beijing.pdf · Neo4j name: Ian name: ACME Person Company R L name: Jacob Person name: Tobias

WhiteboardFriendliness

Easy to design and model, direct representation of the model

Page 8: Property Graphs: Neo4j and Cypherhomepages.inf.ed.ac.uk/libkin/teach/beijing2018/neo4j-beijing.pdf · Neo4j name: Ian name: ACME Person Company R L name: Jacob Person name: Tobias

Whiteboardfriendliness

Page 9: Property Graphs: Neo4j and Cypherhomepages.inf.ed.ac.uk/libkin/teach/beijing2018/neo4j-beijing.pdf · Neo4j name: Ian name: ACME Person Company R L name: Jacob Person name: Tobias

Tom Hanks Hugo Weaving

Cloud AtlasThe Matrix

Lana Wachowski

ACTED_IN

ACTED_IN ACTED_IN

DIRECTED

DIRECTED

Whiteboardfriendliness

Page 10: Property Graphs: Neo4j and Cypherhomepages.inf.ed.ac.uk/libkin/teach/beijing2018/neo4j-beijing.pdf · Neo4j name: Ian name: ACME Person Company R L name: Jacob Person name: Tobias

name: Tom Hanks born: 1956

title: Cloud Atlas released: 2012

title: The Matrix released: 1999

name: Lana Wachowski born: 1965

ACTED_IN roles: Zachry

ACTED_IN roles: Bill Smoke

DIRECTED

DIRECTED

ACTED_IN roles: Agent Smith

name: Hugo Weaving born: 1960

Person

MovieMovie

Person Director

ActorPerson Actor

Whiteboardfriendliness

Page 11: Property Graphs: Neo4j and Cypherhomepages.inf.ed.ac.uk/libkin/teach/beijing2018/neo4j-beijing.pdf · Neo4j name: Ian name: ACME Person Company R L name: Jacob Person name: Tobias

Whiteboardfriendliness

Page 12: Property Graphs: Neo4j and Cypherhomepages.inf.ed.ac.uk/libkin/teach/beijing2018/neo4j-beijing.pdf · Neo4j name: Ian name: ACME Person Company R L name: Jacob Person name: Tobias

Introtothepropertygraphmodel

Page 13: Property Graphs: Neo4j and Cypherhomepages.inf.ed.ac.uk/libkin/teach/beijing2018/neo4j-beijing.pdf · Neo4j name: Ian name: ACME Person Company R L name: Jacob Person name: Tobias

Neo4jFundamentals

• Nodes

• Relationships

• Properties

• Labels

Page 14: Property Graphs: Neo4j and Cypherhomepages.inf.ed.ac.uk/libkin/teach/beijing2018/neo4j-beijing.pdf · Neo4j name: Ian name: ACME Person Company R L name: Jacob Person name: Tobias

Car

PropertyGraphModelComponents

Nodes• Representtheobjectsinthegraph• Canbelabeled

Person Person

Page 15: Property Graphs: Neo4j and Cypherhomepages.inf.ed.ac.uk/libkin/teach/beijing2018/neo4j-beijing.pdf · Neo4j name: Ian name: ACME Person Company R L name: Jacob Person name: Tobias

Car

DRIVES

PropertyGraphModelComponents

Nodes• Representtheobjectsinthegraph• Canbelabeled

Relationships• Relatenodesbytypeanddirection

LOVES

LOVES

LIVESWITH

OWNS

Person Person

Page 16: Property Graphs: Neo4j and Cypherhomepages.inf.ed.ac.uk/libkin/teach/beijing2018/neo4j-beijing.pdf · Neo4j name: Ian name: ACME Person Company R L name: Jacob Person name: Tobias

Car

DRIVES

name:“Dan”born:May29,1970twitter:“@dan”

name:“Ann”born:Dec5,1975

since: Jan10,2011

brand:“Volvo”model:“V70”

PropertyGraphModelComponents

Nodes• Representtheobjectsinthegraph• Canbelabeled

Relationships• Relatenodesbytypeanddirection

Properties• Name-valuepairsthatcangoonnodesandrelationships.

LOVES

LOVES

LIVESWITH

OWNS

Person Person

Page 17: Property Graphs: Neo4j and Cypherhomepages.inf.ed.ac.uk/libkin/teach/beijing2018/neo4j-beijing.pdf · Neo4j name: Ian name: ACME Person Company R L name: Jacob Person name: Tobias

Summaryofthegraphbuildingblocks

• Nodes-Entitiesandcomplexvaluetypes

• Relationships-Connectentitiesandstructuredomain

• Properties-Entityattributes,relationshipqualities,metadata

• Labels-Groupnodesbyrole

Page 18: Property Graphs: Neo4j and Cypherhomepages.inf.ed.ac.uk/libkin/teach/beijing2018/neo4j-beijing.pdf · Neo4j name: Ian name: ACME Person Company R L name: Jacob Person name: Tobias

GraphQuerying

Page 19: Property Graphs: Neo4j and Cypherhomepages.inf.ed.ac.uk/libkin/teach/beijing2018/neo4j-beijing.pdf · Neo4j name: Ian name: ACME Person Company R L name: Jacob Person name: Tobias

WhynotSQL?

• SQLisinefficientinexpressinggraphpatternqueriesInparticularforqueriesthat• arerecursive• canacceptpathsofmultipledifferentlengths

• Graphpatternsaremoreintuitiveanddeclarativethanjoins

• SQLcannothandlepathvalues

16

Page 20: Property Graphs: Neo4j and Cypherhomepages.inf.ed.ac.uk/libkin/teach/beijing2018/neo4j-beijing.pdf · Neo4j name: Ian name: ACME Person Company R L name: Jacob Person name: Tobias

17

Apatternmatchingquerylanguagemadeforgraphs

• Declarative

• Expressive

• PatternMatching

Cypher

Page 21: Property Graphs: Neo4j and Cypherhomepages.inf.ed.ac.uk/libkin/teach/beijing2018/neo4j-beijing.pdf · Neo4j name: Ian name: ACME Person Company R L name: Jacob Person name: Tobias

PatterninourGraphModel

LOVES

Dan Ann

NODE NODERelationship

Page 22: Property Graphs: Neo4j and Cypherhomepages.inf.ed.ac.uk/libkin/teach/beijing2018/neo4j-beijing.pdf · Neo4j name: Ian name: ACME Person Company R L name: Jacob Person name: Tobias

Cypher:ExpressGraphPatterns

LOVES

Dan Ann

Relationship

Page 23: Property Graphs: Neo4j and Cypherhomepages.inf.ed.ac.uk/libkin/teach/beijing2018/neo4j-beijing.pdf · Neo4j name: Ian name: ACME Person Company R L name: Jacob Person name: Tobias

Cypher:ExpressGraphPatterns

(:Person{name:"Dan"})-[:LOVES]->(:Person{name:"Ann"})

LOVES

Dan Ann

Relationship

Page 24: Property Graphs: Neo4j and Cypherhomepages.inf.ed.ac.uk/libkin/teach/beijing2018/neo4j-beijing.pdf · Neo4j name: Ian name: ACME Person Company R L name: Jacob Person name: Tobias

Cypher:ExpressGraphPatterns

(:Person{name:"Dan"})-[:LOVES]->(:Person{name:"Ann"})

LOVES

Dan Ann

LABEL PROPERTYLABEL PROPERTY

Relationship

Page 25: Property Graphs: Neo4j and Cypherhomepages.inf.ed.ac.uk/libkin/teach/beijing2018/neo4j-beijing.pdf · Neo4j name: Ian name: ACME Person Company R L name: Jacob Person name: Tobias

Cypher:ExpressGraphPatterns

(:Person{name:"Dan"})-[:LOVES]->(:Person{name:"Ann"})

LOVES

Dan Ann

LABEL PROPERTY

NODE NODE

LABEL PROPERTY

Relationship

Page 26: Property Graphs: Neo4j and Cypherhomepages.inf.ed.ac.uk/libkin/teach/beijing2018/neo4j-beijing.pdf · Neo4j name: Ian name: ACME Person Company R L name: Jacob Person name: Tobias

Cypher:CREATEGraphPatterns

LOVES

Dan Ann

Relationship

Page 27: Property Graphs: Neo4j and Cypherhomepages.inf.ed.ac.uk/libkin/teach/beijing2018/neo4j-beijing.pdf · Neo4j name: Ian name: ACME Person Company R L name: Jacob Person name: Tobias

Cypher:CREATEGraphPatterns

CREATE(:Person{name:"Dan"})-[:LOVES]->(:Person{name:"Ann"})

LOVES

Dan Ann

Relationship

Page 28: Property Graphs: Neo4j and Cypherhomepages.inf.ed.ac.uk/libkin/teach/beijing2018/neo4j-beijing.pdf · Neo4j name: Ian name: ACME Person Company R L name: Jacob Person name: Tobias

Cypher:CREATEGraphPatterns

CREATE(:Person{name:"Dan"})-[:LOVES]->(:Person{name:"Ann"})

LOVES

Dan Ann

LABEL PROPERTYLABEL PROPERTY

Relationship

Page 29: Property Graphs: Neo4j and Cypherhomepages.inf.ed.ac.uk/libkin/teach/beijing2018/neo4j-beijing.pdf · Neo4j name: Ian name: ACME Person Company R L name: Jacob Person name: Tobias

Cypher:CREATEGraphPatterns

CREATE(:Person{name:"Dan"})-[:LOVES]->(:Person{name:"Ann"})

LOVES

Dan Ann

LABEL PROPERTY

NODE NODE

LABEL PROPERTY

Relationship

Page 30: Property Graphs: Neo4j and Cypherhomepages.inf.ed.ac.uk/libkin/teach/beijing2018/neo4j-beijing.pdf · Neo4j name: Ian name: ACME Person Company R L name: Jacob Person name: Tobias

Cypher:MATCHGraphPatterns

LOVES

Dan ?

Relationship

Page 31: Property Graphs: Neo4j and Cypherhomepages.inf.ed.ac.uk/libkin/teach/beijing2018/neo4j-beijing.pdf · Neo4j name: Ian name: ACME Person Company R L name: Jacob Person name: Tobias

Cypher:MATCHGraphPatterns

MATCH(:Person{name:"Dan"})-[:LOVES]->(whom)RETURNwhom

LOVES

Dan ?

Relationship

Page 32: Property Graphs: Neo4j and Cypherhomepages.inf.ed.ac.uk/libkin/teach/beijing2018/neo4j-beijing.pdf · Neo4j name: Ian name: ACME Person Company R L name: Jacob Person name: Tobias

Cypher:MATCHGraphPatterns

MATCH(:Person{name:"Dan"})-[:LOVES]->(whom)RETURNwhom

LOVES

Dan ?

VARIABLELABEL PROPERTY

Relationship

Page 33: Property Graphs: Neo4j and Cypherhomepages.inf.ed.ac.uk/libkin/teach/beijing2018/neo4j-beijing.pdf · Neo4j name: Ian name: ACME Person Company R L name: Jacob Person name: Tobias

Cypher:MATCHGraphPatterns

MATCH(:Person{name:"Dan"})-[:LOVES]->(whom)RETURNwhom

LOVES

Dan ?

VARIABLE

NODE NODE

LABEL PROPERTY

Relationship

Page 34: Property Graphs: Neo4j and Cypherhomepages.inf.ed.ac.uk/libkin/teach/beijing2018/neo4j-beijing.pdf · Neo4j name: Ian name: ACME Person Company R L name: Jacob Person name: Tobias

Agraphqueryexample

Page 35: Property Graphs: Neo4j and Cypherhomepages.inf.ed.ac.uk/libkin/teach/beijing2018/neo4j-beijing.pdf · Neo4j name: Ian name: ACME Person Company R L name: Jacob Person name: Tobias

Asocialrecommendation

Page 36: Property Graphs: Neo4j and Cypherhomepages.inf.ed.ac.uk/libkin/teach/beijing2018/neo4j-beijing.pdf · Neo4j name: Ian name: ACME Person Company R L name: Jacob Person name: Tobias

MATCH(person:Person)-[:IS_FRIEND_OF]->(friend),(friend)-[:LIKES]->(restaurant),(restaurant)-[:LOCATED_IN]->(loc:Location),(restaurant)-[:SERVES]->(type:Cuisine)WHEREperson.name='Philip'ANDloc.location='NewYork'ANDtype.cuisine='Sushi'RETURNrestaurant.name

Asocialrecommendation

Page 37: Property Graphs: Neo4j and Cypherhomepages.inf.ed.ac.uk/libkin/teach/beijing2018/neo4j-beijing.pdf · Neo4j name: Ian name: ACME Person Company R L name: Jacob Person name: Tobias

TheSyntax

Page 38: Property Graphs: Neo4j and Cypherhomepages.inf.ed.ac.uk/libkin/teach/beijing2018/neo4j-beijing.pdf · Neo4j name: Ian name: ACME Person Company R L name: Jacob Person name: Tobias

Nodes

Nodesaredrawnwithparentheses.

()

Page 39: Property Graphs: Neo4j and Cypherhomepages.inf.ed.ac.uk/libkin/teach/beijing2018/neo4j-beijing.pdf · Neo4j name: Ian name: ACME Person Company R L name: Jacob Person name: Tobias

Relationships

Relationshipsaredrawnasarrows,withadditionaldetailinbrackets.

-->-[:DIRECTED]->

Page 40: Property Graphs: Neo4j and Cypherhomepages.inf.ed.ac.uk/libkin/teach/beijing2018/neo4j-beijing.pdf · Neo4j name: Ian name: ACME Person Company R L name: Jacob Person name: Tobias

Patterns

Patternsaredrawnbyconnectingnodesandrelationshipswithhyphens,optionallyspecifyingadirectionwith>and<signs. ()-[]-()()-[]->()()<-[]-()

Page 41: Property Graphs: Neo4j and Cypherhomepages.inf.ed.ac.uk/libkin/teach/beijing2018/neo4j-beijing.pdf · Neo4j name: Ian name: ACME Person Company R L name: Jacob Person name: Tobias

ThecomponentsofaCypherquery

MATCH(m:Movie)RETURNmMATCHandRETURNareCypherkeywords misavariable:Movieisanodelabel

Page 42: Property Graphs: Neo4j and Cypherhomepages.inf.ed.ac.uk/libkin/teach/beijing2018/neo4j-beijing.pdf · Neo4j name: Ian name: ACME Person Company R L name: Jacob Person name: Tobias

ThecomponentsofaCypherquery

MATCH(p:Person)-[r:ACTED_IN]->(m:Movie)RETURNp,r,mMATCHandRETURNareCypherkeywords p,r,andmarevariables :Movieisanodelabel :ACTED_INisarelationshiptype

Page 43: Property Graphs: Neo4j and Cypherhomepages.inf.ed.ac.uk/libkin/teach/beijing2018/neo4j-beijing.pdf · Neo4j name: Ian name: ACME Person Company R L name: Jacob Person name: Tobias

ThecomponentsofaCypherquery

MATCHpath=(:Person)-[:ACTED_IN]->(:Movie)RETURNpathMATCHandRETURNareCypherkeywords pathisavariable:Movieisanodelabel :ACTED_INisarelationshiptype

Page 44: Property Graphs: Neo4j and Cypherhomepages.inf.ed.ac.uk/libkin/teach/beijing2018/neo4j-beijing.pdf · Neo4j name: Ian name: ACME Person Company R L name: Jacob Person name: Tobias

MATCH(m:Movie)RETURNm

GraphversusTabularresults

Page 45: Property Graphs: Neo4j and Cypherhomepages.inf.ed.ac.uk/libkin/teach/beijing2018/neo4j-beijing.pdf · Neo4j name: Ian name: ACME Person Company R L name: Jacob Person name: Tobias

MATCH(m:Movie)RETURNm.title,m.releasedPropertiesareaccessedwith{variable}.{property_key}

GraphversusTabularresults

Page 46: Property Graphs: Neo4j and Cypherhomepages.inf.ed.ac.uk/libkin/teach/beijing2018/neo4j-beijing.pdf · Neo4j name: Ian name: ACME Person Company R L name: Jacob Person name: Tobias

Casesensitive Nodelabels

Relationshiptypes

Propertykeys

Caseinsensitive Cypherkeywords

Casesensitivity

Page 47: Property Graphs: Neo4j and Cypherhomepages.inf.ed.ac.uk/libkin/teach/beijing2018/neo4j-beijing.pdf · Neo4j name: Ian name: ACME Person Company R L name: Jacob Person name: Tobias

Casesensitive :Person

:ACTED_IN

name

Caseinsensitive MaTcH

return

Casesensitivity

Page 48: Property Graphs: Neo4j and Cypherhomepages.inf.ed.ac.uk/libkin/teach/beijing2018/neo4j-beijing.pdf · Neo4j name: Ian name: ACME Person Company R L name: Jacob Person name: Tobias

Writequeries

Page 49: Property Graphs: Neo4j and Cypherhomepages.inf.ed.ac.uk/libkin/teach/beijing2018/neo4j-beijing.pdf · Neo4j name: Ian name: ACME Person Company R L name: Jacob Person name: Tobias

TheCREATEClause

CREATE(m:Movie{title:'MysticRiver',released:2003})

RETURNm

Page 50: Property Graphs: Neo4j and Cypherhomepages.inf.ed.ac.uk/libkin/teach/beijing2018/neo4j-beijing.pdf · Neo4j name: Ian name: ACME Person Company R L name: Jacob Person name: Tobias

TheSETClause

MATCH(m:Movie{title:'MysticRiver'})

SETm.tagline='Weburyoursinshere,Dave.Wewashthemclean.'

RETURNm

Page 51: Property Graphs: Neo4j and Cypherhomepages.inf.ed.ac.uk/libkin/teach/beijing2018/neo4j-beijing.pdf · Neo4j name: Ian name: ACME Person Company R L name: Jacob Person name: Tobias

TheCREATEClause

MATCH(m:Movie{title:'MysticRiver'})

MATCH(p:Person{name:'KevinBacon'})

CREATE(p)-[r:ACTED_IN{roles:['Sean']}]->(m)

RETURNp,r,m

Page 52: Property Graphs: Neo4j and Cypherhomepages.inf.ed.ac.uk/libkin/teach/beijing2018/neo4j-beijing.pdf · Neo4j name: Ian name: ACME Person Company R L name: Jacob Person name: Tobias

TheMERGEClause

MERGE(p:Person{name:'TomHanks'})

RETURNp

Page 53: Property Graphs: Neo4j and Cypherhomepages.inf.ed.ac.uk/libkin/teach/beijing2018/neo4j-beijing.pdf · Neo4j name: Ian name: ACME Person Company R L name: Jacob Person name: Tobias

TheMERGEClause

MERGE(p:Person{name:'TomHanks',oscar:true})

RETURNp

Page 54: Property Graphs: Neo4j and Cypherhomepages.inf.ed.ac.uk/libkin/teach/beijing2018/neo4j-beijing.pdf · Neo4j name: Ian name: ACME Person Company R L name: Jacob Person name: Tobias

TheMERGEClause

MERGE(p:Person{name:'TomHanks',oscar:true})

RETURNpThereisnota:Personnodewithname:'TomHanks'andoscar:trueinthegraph,butthereisa:Personnodewithname:'TomHanks'. Whatdoyouthinkwillhappenhere?

Page 55: Property Graphs: Neo4j and Cypherhomepages.inf.ed.ac.uk/libkin/teach/beijing2018/neo4j-beijing.pdf · Neo4j name: Ian name: ACME Person Company R L name: Jacob Person name: Tobias

TheMERGEClause

MERGE(p:Person{name:'TomHanks'})

SETp.oscar=true

RETURNp

Page 56: Property Graphs: Neo4j and Cypherhomepages.inf.ed.ac.uk/libkin/teach/beijing2018/neo4j-beijing.pdf · Neo4j name: Ian name: ACME Person Company R L name: Jacob Person name: Tobias

TheMERGEClause

MERGE(p:Person{name:'TomHanks'})-[:ACTED_IN]

->(m:Movie{title:'TheTerminal'})

RETURNp,m

Page 57: Property Graphs: Neo4j and Cypherhomepages.inf.ed.ac.uk/libkin/teach/beijing2018/neo4j-beijing.pdf · Neo4j name: Ian name: ACME Person Company R L name: Jacob Person name: Tobias

TheMERGEClause

MERGE(p:Person{name:'TomHanks'})-[:ACTED_IN]

->(m:Movie{title:'TheTerminal'})

RETURNp,m

Thereisnota:Movienodewithtitle:"TheTerminal"inthegraph,butthereisa:Personnodewithname:"TomHanks". Whatdoyouthinkwillhappenhere?

Page 58: Property Graphs: Neo4j and Cypherhomepages.inf.ed.ac.uk/libkin/teach/beijing2018/neo4j-beijing.pdf · Neo4j name: Ian name: ACME Person Company R L name: Jacob Person name: Tobias

MERGE(p:Person{name:'TomHanks'})

MERGE(m:Movie{title:'TheTerminal'})

MERGE(p)-[r:ACTED_IN]->(m)

RETURNp,r,m

TheMERGEClause

Page 59: Property Graphs: Neo4j and Cypherhomepages.inf.ed.ac.uk/libkin/teach/beijing2018/neo4j-beijing.pdf · Neo4j name: Ian name: ACME Person Company R L name: Jacob Person name: Tobias

MERGE(p:Person{name:'YourName'})

ONCREATESETp.created=timestamp(),p.updated=0

ONMATCHSETp.updated=p.updated+1

RETURNp.created,p.updated;

ONCREATEandONMATCH

Page 60: Property Graphs: Neo4j and Cypherhomepages.inf.ed.ac.uk/libkin/teach/beijing2018/neo4j-beijing.pdf · Neo4j name: Ian name: ACME Person Company R L name: Jacob Person name: Tobias

GraphModeling

Page 61: Property Graphs: Neo4j and Cypherhomepages.inf.ed.ac.uk/libkin/teach/beijing2018/neo4j-beijing.pdf · Neo4j name: Ian name: ACME Person Company R L name: Jacob Person name: Tobias

Models

Page 62: Property Graphs: Neo4j and Cypherhomepages.inf.ed.ac.uk/libkin/teach/beijing2018/neo4j-beijing.pdf · Neo4j name: Ian name: ACME Person Company R L name: Jacob Person name: Tobias

Themodelingworkflow

1.Derivethequestion

2.Obtainthedata

3.Developamodel

4.Ingestthedata

5.Query/Proveourmodel

Page 63: Property Graphs: Neo4j and Cypherhomepages.inf.ed.ac.uk/libkin/teach/beijing2018/neo4j-beijing.pdf · Neo4j name: Ian name: ACME Person Company R L name: Jacob Person name: Tobias

Developingthemodelandthequery

1.Identifyapplication/end-usergoals2.Figureoutwhatquestionstoaskofthedomain3.Identifyentitiesineachquestion4.Identifyrelationshipsbetweenentitiesineachquestion5.Convertentitiesandrelationshipstopaths

- Thesebecomethebasisofthedatamodel6.Expressquestionsasgraphpatterns

- Thesebecomethebasisforqueries

51

Page 64: Property Graphs: Neo4j and Cypherhomepages.inf.ed.ac.uk/libkin/teach/beijing2018/neo4j-beijing.pdf · Neo4j name: Ian name: ACME Person Company R L name: Jacob Person name: Tobias

1.Application/End-UserGoals

52

As an employeeI want to know who in the company has similar skills to meSo that we can exchange knowledge

Page 65: Property Graphs: Neo4j and Cypherhomepages.inf.ed.ac.uk/libkin/teach/beijing2018/neo4j-beijing.pdf · Neo4j name: Ian name: ACME Person Company R L name: Jacob Person name: Tobias

2.QuestionstoaskoftheDomain

53

As an employeeI want to know who in the company has similar skills to meSo that we can exchange knowledge

Whichpeople,whoworkforthesamecompanyasme,havesimilarskillstome?

Page 66: Property Graphs: Neo4j and Cypherhomepages.inf.ed.ac.uk/libkin/teach/beijing2018/neo4j-beijing.pdf · Neo4j name: Ian name: ACME Person Company R L name: Jacob Person name: Tobias

3.IdentifyEntities

Which people, who work for the same company as me, have similar skills to me?

• Person• Company• Skill

54

Page 67: Property Graphs: Neo4j and Cypherhomepages.inf.ed.ac.uk/libkin/teach/beijing2018/neo4j-beijing.pdf · Neo4j name: Ian name: ACME Person Company R L name: Jacob Person name: Tobias

4.IdentifyRelationshipsBetweenEntities

Which people, who work for the same company as me, have similar skills to me?

• PersonWORKSFORCompany• PersonHASSKILLSkill

55

Page 68: Property Graphs: Neo4j and Cypherhomepages.inf.ed.ac.uk/libkin/teach/beijing2018/neo4j-beijing.pdf · Neo4j name: Ian name: ACME Person Company R L name: Jacob Person name: Tobias

5.ConverttoCypherPaths

56

Page 69: Property Graphs: Neo4j and Cypherhomepages.inf.ed.ac.uk/libkin/teach/beijing2018/neo4j-beijing.pdf · Neo4j name: Ian name: ACME Person Company R L name: Jacob Person name: Tobias

5.ConverttoCypherPaths

•Person WORKS FOR Company

•Person HAS SKILL Skill

56

Page 70: Property Graphs: Neo4j and Cypherhomepages.inf.ed.ac.uk/libkin/teach/beijing2018/neo4j-beijing.pdf · Neo4j name: Ian name: ACME Person Company R L name: Jacob Person name: Tobias

5.ConverttoCypherPaths

•Person WORKS FOR Company

•Person HAS SKILL Skill

56

NodeNode

Node Node

Page 71: Property Graphs: Neo4j and Cypherhomepages.inf.ed.ac.uk/libkin/teach/beijing2018/neo4j-beijing.pdf · Neo4j name: Ian name: ACME Person Company R L name: Jacob Person name: Tobias

5.ConverttoCypherPaths

•Person WORKS FOR Company

•Person HAS SKILL Skill

56

Relationship

NodeNode Relationship

Node Node

Page 72: Property Graphs: Neo4j and Cypherhomepages.inf.ed.ac.uk/libkin/teach/beijing2018/neo4j-beijing.pdf · Neo4j name: Ian name: ACME Person Company R L name: Jacob Person name: Tobias

5.ConverttoCypherPaths

•Person WORKS FOR Company

•Person HAS SKILL Skill

• (:Person)-[:WORKS_FOR]->(:Company),• (:Person)-[:HAS_SKILL]->(:Skill)

56

Relationship

NodeNode Relationship

Node Node

Page 73: Property Graphs: Neo4j and Cypherhomepages.inf.ed.ac.uk/libkin/teach/beijing2018/neo4j-beijing.pdf · Neo4j name: Ian name: ACME Person Company R L name: Jacob Person name: Tobias

5.ConverttoCypherPaths

•Person WORKS FOR Company

•Person HAS SKILL Skill

• (:Person)-[:WORKS_FOR]->(:Company),• (:Person)-[:HAS_SKILL]->(:Skill)

56

Relationship

NodeNode Relationship

Node Node

Label Label

Label Label

Page 74: Property Graphs: Neo4j and Cypherhomepages.inf.ed.ac.uk/libkin/teach/beijing2018/neo4j-beijing.pdf · Neo4j name: Ian name: ACME Person Company R L name: Jacob Person name: Tobias

5.ConverttoCypherPaths

•Person WORKS FOR Company

•Person HAS SKILL Skill

• (:Person)-[:WORKS_FOR]->(:Company),• (:Person)-[:HAS_SKILL]->(:Skill)

56

Relationship

NodeNode Relationship

Node Node

Label Label

Label Label

Relationship Type

Relationship Type

Page 75: Property Graphs: Neo4j and Cypherhomepages.inf.ed.ac.uk/libkin/teach/beijing2018/neo4j-beijing.pdf · Neo4j name: Ian name: ACME Person Company R L name: Jacob Person name: Tobias

ConsolidatePattern

(:Person)-[:WORKS_FOR]->(:Company),(:Person)-[:HAS_SKILL]->(:Skill)

(:Company)<-[:WORKS_FOR]-(:Person)-[:HAS_SKILL]->(:Skill)

57

Person SkillCompany

WORKS_FOR HAS_SKILL

Page 76: Property Graphs: Neo4j and Cypherhomepages.inf.ed.ac.uk/libkin/teach/beijing2018/neo4j-beijing.pdf · Neo4j name: Ian name: ACME Person Company R L name: Jacob Person name: Tobias

CandidateDataModel(:Company)<-[:WORKS_FOR]-(:Person)-[:HAS_SKILL]->(:Skill)

58

name:Neo4j

name:Ian

name:ACME

Person

Company

WO

RKS_

FOR

HAS_

SKILL

name:Jacob

Person

name:Tobias

Person

WORKS_F

OR WORKS_FOR

name:Scala

name:Python

name:C#

SkillSkillSkillSkillHA

S_SK

ILL

HAS_SKILLHAS_SKILL

HAS_SKILL

HAS_SKILLHAS_

SKILL

Page 77: Property Graphs: Neo4j and Cypherhomepages.inf.ed.ac.uk/libkin/teach/beijing2018/neo4j-beijing.pdf · Neo4j name: Ian name: ACME Person Company R L name: Jacob Person name: Tobias

6.ExpressQuestionasGraphPattern

Which people, who work for the same company as me, have similar skills to me?

59

skill

company

Company

colleagueme

PersonWORK

S_FOR

WORKS_FOR

Skill

HAS_SKILL HAS_SKILL

Person

Page 78: Property Graphs: Neo4j and Cypherhomepages.inf.ed.ac.uk/libkin/teach/beijing2018/neo4j-beijing.pdf · Neo4j name: Ian name: ACME Person Company R L name: Jacob Person name: Tobias

CypherQuery

Which people, who work for the same company as me, have similar skills to me?

MATCH(company)<-[:WORKS_FOR]-(me:Person)-[:HAS_SKILL]->(skill)(company)<-[:WORKS_FOR]-(colleague)-[:HAS_SKILL]->(skill)WHEREme.name=$nameRETURNcolleague.nameASname,count(skill)ASscore,collect(skill.name)ASskillsORDERBYscoreDESC

60

skill

company

Company

colleagueme

PersonWORK

S_FOR

WORKS_FOR

Skill

HAS_SKILL HAS_SKILL

Person

Page 79: Property Graphs: Neo4j and Cypherhomepages.inf.ed.ac.uk/libkin/teach/beijing2018/neo4j-beijing.pdf · Neo4j name: Ian name: ACME Person Company R L name: Jacob Person name: Tobias

CypherQuery

Which people, who work for the same company as me, have similar skills to me?

MATCH(company)<-[:WORKS_FOR]-(me:Person)-[:HAS_SKILL]->(skill)(company)<-[:WORKS_FOR]-(colleague)-[:HAS_SKILL]->(skill)WHEREme.name=$nameRETURNcolleague.nameASname,count(skill)ASscore,collect(skill.name)ASskillsORDERBYscoreDESC

61

skill

company

Company

colleagueme

PersonWORK

S_FOR

WORKS_FOR

Skill

HAS_SKILL HAS_SKILL

Person

1. Graph pattern

Page 80: Property Graphs: Neo4j and Cypherhomepages.inf.ed.ac.uk/libkin/teach/beijing2018/neo4j-beijing.pdf · Neo4j name: Ian name: ACME Person Company R L name: Jacob Person name: Tobias

CypherQuery

Which people, who work for the same company as me, have similar skills to me?

MATCH(company)<-[:WORKS_FOR]-(me:Person)-[:HAS_SKILL]->(skill)(company)<-[:WORKS_FOR]-(colleague)-[:HAS_SKILL]->(skill)WHEREme.name=$nameRETURNcolleague.nameASname,count(skill)ASscore,collect(skill.name)ASskillsORDERBYscoreDESC

62

skill

company

Company

colleagueme

PersonWORK

S_FOR

WORKS_FOR

Skill

HAS_SKILL HAS_SKILL

Person

1. Graph pattern

2. Filter, using index if available

Page 81: Property Graphs: Neo4j and Cypherhomepages.inf.ed.ac.uk/libkin/teach/beijing2018/neo4j-beijing.pdf · Neo4j name: Ian name: ACME Person Company R L name: Jacob Person name: Tobias

CypherQuery

Which people, who work for the same company as me, have similar skills to me?

MATCH(company)<-[:WORKS_FOR]-(me:Person)-[:HAS_SKILL]->(skill)(company)<-[:WORKS_FOR]-(colleague)-[:HAS_SKILL]->(skill)WHEREme.name=$nameRETURNcolleague.nameASname,count(skill)ASscore,collect(skill.name)ASskillsORDERBYscoreDESC

63

skill

company

Company

colleagueme

PersonWORK

S_FOR

WORKS_FOR

Skill

HAS_SKILL HAS_SKILL

Person

1. Graph pattern

2. Filter, using index if available

3. Create projection of result

Page 82: Property Graphs: Neo4j and Cypherhomepages.inf.ed.ac.uk/libkin/teach/beijing2018/neo4j-beijing.pdf · Neo4j name: Ian name: ACME Person Company R L name: Jacob Person name: Tobias

FirstMatch

64

name:Neo4j

name:Ian

name:ACME

Person

Company

WO

RKS_

FOR

HAS_

SKILL

name:Jacob

Person

name:Tobias

Person

WORKS_F

OR WORKS_FOR

name:Scala

name:Python

name:C#

SkillSkillSkillSkill

HAS_

SKILL

HAS_SKILLHAS_SKILL HAS_SKILL

HAS_SKILLHAS_

SKILL

skill

company

Company

colleagueme

Person

WORKS_

FOR WORKS_FOR

SkillHAS_SKILL

HAS_

SKILL

Person

Page 83: Property Graphs: Neo4j and Cypherhomepages.inf.ed.ac.uk/libkin/teach/beijing2018/neo4j-beijing.pdf · Neo4j name: Ian name: ACME Person Company R L name: Jacob Person name: Tobias

SecondMatch

65

name:Neo4j

name:Ian

name:ACME

Person

Company

WO

RKS_

FOR

HAS_

SKILL

name:Jacob

Person

name:Tobias

Person

WORKS_F

OR WORKS_FOR

name:Scala

name:Python

name:C#

SkillSkillSkillSkill

HAS_

SKILL

HAS_SKILLHAS_SKILL HAS_SKILL

HAS_SKILLHAS_

SKILL

skill

company

Company

colleagueme

Person

WORKS_

FOR WORKS_FOR

SkillHAS_SKILL

HAS_

SKILL

Person

Page 84: Property Graphs: Neo4j and Cypherhomepages.inf.ed.ac.uk/libkin/teach/beijing2018/neo4j-beijing.pdf · Neo4j name: Ian name: ACME Person Company R L name: Jacob Person name: Tobias

ThirdMatch

66

name:Neo4j

name:Ian

name:ACME

Person

Company

WO

RKS_

FOR

HAS_

SKILL

name:Jacob

Person

name:Tobias

Person

WORKS_F

OR WORKS_FOR

name:Scala

name:Python

name:C#

SkillSkillSkillSkill

HAS_

SKILL

HAS_SKILLHAS_SKILL HAS_SKILL

HAS_SKILLHAS_

SKILL

skill

company

Company

colleagueme

Person

WORKS_

FOR WORKS_FOR

SkillHAS_SKILL

HAS_

SKILL

Person

Page 85: Property Graphs: Neo4j and Cypherhomepages.inf.ed.ac.uk/libkin/teach/beijing2018/neo4j-beijing.pdf · Neo4j name: Ian name: ACME Person Company R L name: Jacob Person name: Tobias

ResultoftheQuery

+-------------------------------------+ | name | score | skills | +-------------------------------------+ | "Ian" | 2 | ["Scala","Neo4j"] | | "Jacob" | 1 | ["Neo4j"] | +-------------------------------------+ 2 rows

67

Page 86: Property Graphs: Neo4j and Cypherhomepages.inf.ed.ac.uk/libkin/teach/beijing2018/neo4j-beijing.pdf · Neo4j name: Ian name: ACME Person Company R L name: Jacob Person name: Tobias

Modelingexercise:Moviegenres

Page 87: Property Graphs: Neo4j and Cypherhomepages.inf.ed.ac.uk/libkin/teach/beijing2018/neo4j-beijing.pdf · Neo4j name: Ian name: ACME Person Company R L name: Jacob Person name: Tobias

Thequestion:shouldwemodelthemaspropertiesorasnodes?

Addingmoviegenres

vs

Page 88: Property Graphs: Neo4j and Cypherhomepages.inf.ed.ac.uk/libkin/teach/beijing2018/neo4j-beijing.pdf · Neo4j name: Ian name: ACME Person Company R L name: Jacob Person name: Tobias

MATCH(m:Movie{title:'TheMatrix'})SETm.genre=['Action','Sci-Fi']RETURNm

Genresasproperties

Page 89: Property Graphs: Neo4j and Cypherhomepages.inf.ed.ac.uk/libkin/teach/beijing2018/neo4j-beijing.pdf · Neo4j name: Ian name: ACME Person Company R L name: Jacob Person name: Tobias

MATCH(m:Movie{title:'MysticRiver'})SETm.genre=['Action','Mystery']RETURNm

Genresasproperties

Page 90: Property Graphs: Neo4j and Cypherhomepages.inf.ed.ac.uk/libkin/teach/beijing2018/neo4j-beijing.pdf · Neo4j name: Ian name: ACME Person Company R L name: Jacob Person name: Tobias

Accessingamovie’sgenresisquickandeasy.

MATCH(m:Movie{title:"TheMatrix"})RETURNm.genre;

Thegoodsideofproperties

Page 91: Property Graphs: Neo4j and Cypherhomepages.inf.ed.ac.uk/libkin/teach/beijing2018/neo4j-beijing.pdf · Neo4j name: Ian name: ACME Person Company R L name: Jacob Person name: Tobias

FindingmoviesthatsharegenresispainfulandwehaveadisconnectedpatternintheMATCHclause-asuresignyouhaveamodelingissue.

MATCH(m1:Movie),(m2:Movie)WHEREany(xINm1.genreWHERExINm2.genre)ANDm1<>m2RETURNm1,m2;

Thebadsideofproperties

Page 92: Property Graphs: Neo4j and Cypherhomepages.inf.ed.ac.uk/libkin/teach/beijing2018/neo4j-beijing.pdf · Neo4j name: Ian name: ACME Person Company R L name: Jacob Person name: Tobias

MATCH(m:Movie{title:"TheMatrix"})MERGE(action:Genre{name:"Action"})MERGE(scifi:Genre{name:"Sci-Fi"})MERGE(m)-[:IN_GENRE]->(action)MERGE(m)-[:IN_GENRE]->(scifi)

Genresasnodes

Page 93: Property Graphs: Neo4j and Cypherhomepages.inf.ed.ac.uk/libkin/teach/beijing2018/neo4j-beijing.pdf · Neo4j name: Ian name: ACME Person Company R L name: Jacob Person name: Tobias

MATCH(m:Movie{title:"MysticRiver"})MERGE(action:Genre{name:"Action"})MERGE(mystery:Genre{name:"Mystery"})MERGE(m)-[:IN_GENRE]->(action)MERGE(m)-[:IN_GENRE]->(mystery)

Genresasnodes

Page 94: Property Graphs: Neo4j and Cypherhomepages.inf.ed.ac.uk/libkin/teach/beijing2018/neo4j-beijing.pdf · Neo4j name: Ian name: ACME Person Company R L name: Jacob Person name: Tobias

Findingmoviesthatsharegenresisanaturalgraphpattern.

MATCH(m1:Movie)-[:IN_GENRE]->(g:Genre),(m2:Movie)-[:IN_GENRE]->(g)RETURNm1,m2,g

Thegoodsideofnodes

Page 95: Property Graphs: Neo4j and Cypherhomepages.inf.ed.ac.uk/libkin/teach/beijing2018/neo4j-beijing.pdf · Neo4j name: Ian name: ACME Person Company R L name: Jacob Person name: Tobias

Accessingthegenresofmoviesrequiresabitmoretyping.

MATCH(m:Movie{title:"TheMatrix"}),(m)-[:IN_GENRE]->(g:Genre)RETURNg.name;

The(nottoo)badsideofnodes

Page 96: Property Graphs: Neo4j and Cypherhomepages.inf.ed.ac.uk/libkin/teach/beijing2018/neo4j-beijing.pdf · Neo4j name: Ian name: ACME Person Company R L name: Jacob Person name: Tobias

SymmetricRelationships

Page 97: Property Graphs: Neo4j and Cypherhomepages.inf.ed.ac.uk/libkin/teach/beijing2018/neo4j-beijing.pdf · Neo4j name: Ian name: ACME Person Company R L name: Jacob Person name: Tobias

Symmetricrelationships

OR

Page 98: Property Graphs: Neo4j and Cypherhomepages.inf.ed.ac.uk/libkin/teach/beijing2018/neo4j-beijing.pdf · Neo4j name: Ian name: ACME Person Company R L name: Jacob Person name: Tobias

BidirectionalRelationships

Page 99: Property Graphs: Neo4j and Cypherhomepages.inf.ed.ac.uk/libkin/teach/beijing2018/neo4j-beijing.pdf · Neo4j name: Ian name: ACME Person Company R L name: Jacob Person name: Tobias

Usesinglerelationshipandignoredirectioninqueries

MATCH(:Person{name:'Eric'})-[:MARRIED_TO]-(p2)RETURNp2

Page 100: Property Graphs: Neo4j and Cypherhomepages.inf.ed.ac.uk/libkin/teach/beijing2018/neo4j-beijing.pdf · Neo4j name: Ian name: ACME Person Company R L name: Jacob Person name: Tobias

Formalsemantics

• NadimeFrancis,PaoloGuagliardo,LeonidLibkin

• Formallydefinesa(large)coreofCypher

82

Page 101: Property Graphs: Neo4j and Cypherhomepages.inf.ed.ac.uk/libkin/teach/beijing2018/neo4j-beijing.pdf · Neo4j name: Ian name: ACME Person Company R L name: Jacob Person name: Tobias

Futureimprovements

Page 102: Property Graphs: Neo4j and Cypherhomepages.inf.ed.ac.uk/libkin/teach/beijing2018/neo4j-beijing.pdf · Neo4j name: Ian name: ACME Person Company R L name: Jacob Person name: Tobias

RegularPathQueries

• Conjunctivebi-directionalRegularPathQuerieswithData• Plusspecificationofacostfunctionforpaths,whichallowsformoreinterestingnotionsofshortestpath

PATH PATTERN coauth=()-[:WROTE]->(b)<-[:WROTE]-(), (b)<-[sale:SELLS]-() COST min(sale.price)

MATCH (a)-/~coauth* COST x/->(b)ORDER BY x LIMIT 1084

Page 103: Property Graphs: Neo4j and Cypherhomepages.inf.ed.ac.uk/libkin/teach/beijing2018/neo4j-beijing.pdf · Neo4j name: Ian name: ACME Person Company R L name: Jacob Person name: Tobias

Furtherimprovements

• Supportforqueryingfrommultiplegraphs• Supportforreturninggraphs• Supportfordefiningviews

• IntegrationwithSQL

85

Page 104: Property Graphs: Neo4j and Cypherhomepages.inf.ed.ac.uk/libkin/teach/beijing2018/neo4j-beijing.pdf · Neo4j name: Ian name: ACME Person Company R L name: Jacob Person name: Tobias

RDBMSsandGraphs

86

Page 105: Property Graphs: Neo4j and Cypherhomepages.inf.ed.ac.uk/libkin/teach/beijing2018/neo4j-beijing.pdf · Neo4j name: Ian name: ACME Person Company R L name: Jacob Person name: Tobias

• Cannotmodelorstoredataandrelationshipswithoutcomplexity• Performancedegradeswithnumberandlevelsofrelationships,anddatabasesize

• QuerycomplexitygrowswithneedforJOINs• Addingnewtypesofdataandrelationshipsrequiresschemaredesign,increasingtimetomarket

RDBMScan’thandlerelationshipswell

Page 106: Property Graphs: Neo4j and Cypherhomepages.inf.ed.ac.uk/libkin/teach/beijing2018/neo4j-beijing.pdf · Neo4j name: Ian name: ACME Person Company R L name: Jacob Person name: Tobias

ExpressComplexQueriesEasilywithCypher

Findallmanagersandhowmanypeopletheymanage,upto3levelsdown.

MATCH(boss)-[:MANAGES*0..3]->(mgr)WHEREboss.name="JohnDoe"AND(mgr)-[:MANAGES]->()RETURNmgr.nameASManager,size((mgr)-[:MANAGES*1..3]->())ASTotal

Cypher SQL

Page 107: Property Graphs: Neo4j and Cypherhomepages.inf.ed.ac.uk/libkin/teach/beijing2018/neo4j-beijing.pdf · Neo4j name: Ian name: ACME Person Company R L name: Jacob Person name: Tobias

• Modelyourdatanaturallyasagraphofdataandrelationships• Drivegraphmodelfromdomainanduse-cases• Userelationshipinformationinreal-timetotransformyourbusiness• Addnewrelationshipsontheflytoadapttoyourchangingrequirements

UnlockingValuefromYourDataRelationships

Page 108: Property Graphs: Neo4j and Cypherhomepages.inf.ed.ac.uk/libkin/teach/beijing2018/neo4j-beijing.pdf · Neo4j name: Ian name: ACME Person Company R L name: Jacob Person name: Tobias

• Relationshipsarefirstclasscitizen• Noneedforjoins,justfollowpre-materializedrelationshipsofnodes• Query&Data-locality–navigateoutfromyourstartingpoints• Onlyloadwhat’sneeded• Aggregateandprojectresultsasyougo• Optimizeddiskandmemorymodelforgraphs

HighQueryPerformancewithaNativeGraphDB

Page 109: Property Graphs: Neo4j and Cypherhomepages.inf.ed.ac.uk/libkin/teach/beijing2018/neo4j-beijing.pdf · Neo4j name: Ian name: ACME Person Company R L name: Jacob Person name: Tobias

Theperformanceadvantageofmaterialisedrelationships

• asamplesocialgraphwith~1,000persons• average50friendsperperson• pathExists(a,b)limitedtodepth4• cacheswarmeduptoeliminatediskI/O

#persons querytime

Relationaldatabase 1,000 2000ms

Neo4j 1,000 2ms

Neo4j 1,000,000 2ms

Page 110: Property Graphs: Neo4j and Cypherhomepages.inf.ed.ac.uk/libkin/teach/beijing2018/neo4j-beijing.pdf · Neo4j name: Ian name: ACME Person Company R L name: Jacob Person name: Tobias

1. DownloadNeo4j:http://neo4j.com/download/

2. Starttheserver.

3. Itshouldberunningon:http://localhost:7474

4. Log-inwithdefaultcredentialsuser:neo4j password:neo4j

5. Chooseanewpassword

We’regoodtogo!

GettingstartedwithNeo4j