Post on 22-May-2020
transcript
Introductionto
GraphDataManagementwithneo4j
Tobias.Lindaaker@neo4j.com@thobe#neo4j
1
Whygraphs?
Theworldisagraph–everythingisconnected
• people,places,events
• companies,markets
• countries,history,politics• lifesciences,bioinformatics,clinicaldata
• art,teaching
• technology,networks,machines, applications,users
• software,code,dependencies,architecture,deployments
• criminals,fraudstersandtheirbehavior5
6
Thetopologyofthedataisatleastasimportantas
thedataitself
Humansthinkingraphs
• Weunderstandandlearnby• howsomethingnewissimilartowhatwealreadyknow
• howitdiffers• i.e.byrelatingthings
• inagraph!
7
Whatarepeopleusinggraphdatabasesfor?
UseCases
InternalApplicationsMasterDataManagement
Networkand ITOperations
FraudDetection
Customer-FacingApplicationsReal-TimeRecommendations
Graph-BasedSearch
IdentityandAccessManagement
SocialNetwork
ImpactAnalysis
Logistics&Routing
Recommendations
AccessControl
FraudAnalysis
Modellingtranslationsandcomplexaccessrules
16
EN:house
house
building
EN:building
ES:edificio DE:Gebäude
SE:byggnad
ES:casa
DE:Hause
SE:hus
WhiteboardFriendliness
Easy to design and model, direct representation of the model
Whiteboardfriendliness
Tom Hanks Hugo Weaving
Cloud AtlasThe Matrix
Lana Wachowski
ACTED_IN
ACTED_IN ACTED_IN
DIRECTED
DIRECTED
Whiteboardfriendliness
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
Whiteboardfriendliness
Introtothepropertygraphmodel
Neo4jFundamentals
• Nodes
• Relationships
• Properties
• Labels
Car
PropertyGraphModelComponents
Nodes• Representtheobjectsinthegraph• Canbelabeled
Person Person
Car
DRIVES
PropertyGraphModelComponents
Nodes• Representtheobjectsinthegraph• Canbelabeled
Relationships• Relatenodesbytypeanddirection
LOVES
LOVES
LIVESWITH
OWNS
Person Person
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
Summaryofthegraphbuildingblocks
• Nodes-Entitiesandcomplexvaluetypes
• Relationships-Connectentitiesandstructuredomain
• Properties-Entityattributes,relationshipqualities,metadata
• Labels-Groupnodesbyrole
GraphQuerying
WhynotSQL?
• SQLisinefficientinexpressinggraphpatternqueriesInparticularforqueriesthat• arerecursive• canacceptpathsofmultipledifferentlengths
• Graphpatternsaremoreintuitiveanddeclarativethanjoins
• SQLcannothandlepathvalues
29
30
Apatternmatchingquerylanguagemadeforgraphs
• Declarative
• Expressive
• PatternMatching
Cypher
PatterninourGraphModel
LOVES
Dan Ann
NODE NODERelationship
Cypher:ExpressGraphPatterns
(:Personname:"Dan")-[:LOVES]->(:Personname:"Ann")
LOVES
Dan Ann
LABEL PROPERTY
NODE NODE
LABEL PROPERTY
Relationship
Cypher:CREATEGraphPatterns
CREATE(:Personname:"Dan")-[:LOVES]->(:Personname:"Ann")
LOVES
Dan Ann
LABEL PROPERTY
NODE NODE
LABEL PROPERTY
Relationship
Cypher:MATCHGraphPatterns
MATCH(:Personname:"Dan")-[:LOVES]->(whom)RETURNwhom
LOVES
Dan ?
VARIABLE
NODE NODE
LABEL PROPERTY
Relationship
Agraphqueryexample
Asocialrecommendation
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
TheSyntax
Nodes
Nodesaredrawnwithparentheses.
()
Relationships
Relationshipsaredrawnasarrows,withadditionaldetailinbrackets.
-->-[:DIRECTED]->
Patterns
Patternsaredrawnbyconnectingnodesandrelationshipswithhyphens,optionallyspecifyingadirectionwith>and<signs. ()-[]-()()-[]->()()<-[]-()
ThecomponentsofaCypherquery
MATCH(m:Movie)RETURNmMATCHandRETURNareCypherkeywords misavariable:Movieisanodelabel
ThecomponentsofaCypherquery
MATCH(p:Person)-[r:ACTED_IN]->(m:Movie)RETURNp,r,mMATCHandRETURNareCypherkeywords p,r,andmarevariables :Movieisanodelabel :ACTED_INisarelationshiptype
ThecomponentsofaCypherquery
MATCHpath=(:Person)-[:ACTED_IN]->(:Movie)RETURNpathMATCHandRETURNareCypherkeywords pathisavariable:Movieisanodelabel :ACTED_INisarelationshiptype
MATCH(m:Movie)RETURNm
GraphversusTabularresults
MATCH(m:Movie)RETURNm.title,m.releasedPropertiesareaccessedwithvariable.property_key
GraphversusTabularresults
Casesensitive Nodelabels
Relationshiptypes
Propertykeys
Caseinsensitive Cypherkeywords
Casesensitivity
Casesensitive :Person
:ACTED_IN
name
Caseinsensitive MaTcH
return
Casesensitivity
Writequeries
TheCREATEClause
CREATE(m:Movietitle:'MysticRiver',released:2003)
RETURNm
TheSETClause
MATCH(m:Movietitle:'MysticRiver')
SETm.tagline='Weburyoursinshere,Dave.Wewashthemclean.'
RETURNm
TheCREATEClause
MATCH(m:Movietitle:'MysticRiver')
MATCH(p:Personname:'KevinBacon')
CREATE(p)-[r:ACTED_INroles:['Sean']]->(m)
RETURNp,r,m
TheMERGEClause
MERGE(p:Personname:'TomHanks')
RETURNp
TheMERGEClause
MERGE(p:Personname:'TomHanks',oscar:true)
RETURNp
TheMERGEClause
MERGE(p:Personname:'TomHanks',oscar:true)
RETURNpThereisnota:Personnodewithname:'TomHanks'andoscar:trueinthegraph,butthereisa:Personnodewithname:'TomHanks'. Whatdoyouthinkwillhappenhere?
TheMERGEClause
MERGE(p:Personname:'TomHanks')
SETp.oscar=true
RETURNp
TheMERGEClause
MERGE(p:Personname:'TomHanks')-[:ACTED_IN]
->(m:Movietitle:'TheTerminal')
RETURNp,m
TheMERGEClause
MERGE(p:Personname:'TomHanks')-[:ACTED_IN]
->(m:Movietitle:'TheTerminal')
RETURNp,m
Thereisnota:Movienodewithtitle:"TheTerminal"inthegraph,butthereisa:Personnodewithname:"TomHanks". Whatdoyouthinkwillhappenhere?
MERGE(p:Personname:'TomHanks')
MERGE(m:Movietitle:'TheTerminal')
MERGE(p)-[r:ACTED_IN]->(m)
RETURNp,r,m
TheMERGEClause
MERGE(p:Personname:'YourName')
ONCREATESETp.created=timestamp(),p.updated=0
ONMATCHSETp.updated=p.updated+1
RETURNp.created,p.updated;
ONCREATEandONMATCH
Indexes
Wecreateindexesto:
• allowfastlookupofnodeswhichmatchlabel-propertypairs.CREATEINDEXON:Label(property)
Whatarethesefastlookups?
Thefollowingpredicatesuseindexes:
• Equality• STARTSWITH
• CONTAINS
• ENDSWITH
• Rangesearches
• (Non-)existencechecks
Howareindexesusedinneo4j?
Indexesareonlyusedtofindthestartingpointsforqueries.
Useindexscanstolookuprowsintablesandjointhemwithrowsfromothertables
Useindexestofindthestartingpointsforaquery.
Relational Graph
GraphModeling
Models
Themodelingworkflow
1.Derivethequestion
2.Obtainthedata
3.Developamodel
4.Ingestthedata
5.Query/Proveourmodel
Developingthemodelandthequery
1.Identifyapplication/end-usergoals2.Figureoutwhatquestionstoaskofthedomain3.Identifyentitiesineachquestion4.Identifyrelationshipsbetweenentitiesineachquestion5.Convertentitiesandrelationshipstopaths
- Thesebecomethebasisofthedatamodel6.Expressquestionsasgraphpatterns
- Thesebecomethebasisforqueries
67
1.Application/End-UserGoals
68
As an employeeI want to know who in the company has similar skills to meSo that we can exchange knowledge
2.QuestionstoaskoftheDomain
69
As an employeeI want to know who in the company has similar skills to meSo that we can exchange knowledge
Whichpeople,whoworkforthesamecompanyasme,havesimilarskillstome?
3.IdentifyEntities
Which people, who work for the same company as me, have similar skills to me?
• Person• Company• Skill
70
4.IdentifyRelationshipsBetweenEntities
Which people, who work for the same company as me, have similar skills to me?
• PersonWORKSFORCompany• PersonHASSKILLSkill
71
5.ConverttoCypherPaths
•Person WORKS FOR Company
•Person HAS SKILL Skill
72
5.ConverttoCypherPaths
•Person WORKS FOR Company
•Person HAS SKILL Skill
72
Relationship
NodeNode Relationship
Node Node
5.ConverttoCypherPaths
•Person WORKS FOR Company
•Person HAS SKILL Skill
• (:Person)-[:WORKS_FOR]->(:Company),• (:Person)-[:HAS_SKILL]->(:Skill)
72
Relationship
NodeNode Relationship
Node Node
5.ConverttoCypherPaths
•Person WORKS FOR Company
•Person HAS SKILL Skill
• (:Person)-[:WORKS_FOR]->(:Company),• (:Person)-[:HAS_SKILL]->(:Skill)
72
Relationship
NodeNode Relationship
Node Node
Label Label
Label Label
Relationship Type
Relationship Type
ConsolidatePattern
(:Person)-[:WORKS_FOR]->(:Company),(:Person)-[:HAS_SKILL]->(:Skill)
(:Company)<-[:WORKS_FOR]-(:Person)-[:HAS_SKILL]->(:Skill)
73
Person SkillCompany
WORKS_FOR HAS_SKILL
CandidateDataModel(:Company)<-[:WORKS_FOR]-(:Person)-[:HAS_SKILL]->(:Skill)
74
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
6.ExpressQuestionasGraphPattern
Which people, who work for the same company as me, have similar skills to me?
75
skill
company
Company
colleagueme
PersonWORK
S_FOR
WORKS_FOR
Skill
HAS_SKILL HAS_SKILL
Person
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
76
skill
company
Company
colleagueme
PersonWORK
S_FOR
WORKS_FOR
Skill
HAS_SKILL HAS_SKILL
Person
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
77
skill
company
Company
colleagueme
PersonWORK
S_FOR
WORKS_FOR
Skill
HAS_SKILL HAS_SKILL
Person
1.Graph pattern
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=$name
RETURNcolleague.nameASname,
count(skill)ASscore,collect(skill.name)ASskillsORDERBYscoreDESC
78
skill
company
Company
colleagueme
PersonWORK
S_FOR
WORKS_FOR
Skill
HAS_SKILL HAS_SKILL
Person
1. Graph pattern
2.Filter, using index if available
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)ASskills
ORDERBYscoreDESC
79
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
FirstMatch
80
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
SecondMatch
81
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
ThirdMatch
82
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
ResultoftheQuery
+-------------------------------------+ | name | score | skills | +-------------------------------------+ | "Ian" | 2 | ["Scala","Neo4j"] | | "Jacob" | 1 | ["Neo4j"] | +-------------------------------------+ 2 rows
83
Modelingexercise:Moviegenres
Thequestion:shouldwemodelthemaspropertiesorasnodes?
Addingmoviegenres
vs
MATCH(m:Movietitle:'TheMatrix')SETm.genre=['Action','Sci-Fi']RETURNm
Genresasproperties
MATCH(m:Movietitle:'MysticRiver')SETm.genre=['Action','Mystery']RETURNm
Genresasproperties
Accessingamovie’sgenresisquickandeasy.
MATCH(m:Movietitle:"TheMatrix")RETURNm.genre;
Thegoodsideofproperties
FindingmoviesthatsharegenresispainfulandwehaveadisconnectedpatternintheMATCHclause-asuresignyouhaveamodelingissue.
MATCH(m1:Movie),(m2:Movie)WHEREany(xINm1.genreWHERExINm2.genre)ANDm1<>m2RETURNm1,m2;
Thebadsideofproperties
MATCH(m:Movietitle:"TheMatrix")MERGE(action:Genrename:"Action")MERGE(scifi:Genrename:"Sci-Fi")MERGE(m)-[:IN_GENRE]->(action)MERGE(m)-[:IN_GENRE]->(scifi)
Genresasnodes
MATCH(m:Movietitle:"MysticRiver")MERGE(action:Genrename:"Action")MERGE(mystery:Genrename:"Mystery")MERGE(m)-[:IN_GENRE]->(action)MERGE(m)-[:IN_GENRE]->(mystery)
Genresasnodes
Findingmoviesthatsharegenresisanaturalgraphpattern.
MATCH(m1:Movie)-[:IN_GENRE]->(g:Genre),(m2:Movie)-[:IN_GENRE]->(g)RETURNm1,m2,g
Thegoodsideofnodes
Accessingthegenresofmoviesrequiresabitmoretyping.
MATCH(m:Movietitle:"TheMatrix"),(m)-[:IN_GENRE]->(g:Genre)RETURNg.name;
The(nottoo)badsideofnodes
GenericvsSpecificRelationshiptypes
RelationshipGranularity
SymmetricRelationships
Symmetricrelationships
OR
BidirectionalRelationships
Usesinglerelationshipandignoredirectioninqueries
MATCH(:Personname:'Eric')-[:MARRIED_TO]-(p2)RETURNp2
openCypher
thestandardgraphquerylanguage
100
BecominganindustrystandardforGraphQuerying
• CypheroriginallydesignedbyNeo4j
• Implementedandsupportedby• SAPHANA• Redis• BitnineAgensGraph• Gradoop
• Moresystemscoming• Spark
101
openCypher
• Openlanguagedesignprocess
• Implementationsformultiplesystems
• Compatibilitytestsuite
• Grammarspecification
• Referenceimplementation
• DefiningthenextversionofCypher
https://github.com/openCypher/openCypher http://opencypher.org
102
6/20/2016 https://s3.amazonaws.com/artifacts.opencypher.org/railroad/Cypher.svg
https://s3.amazonaws.com/artifacts.opencypher.org/railroad/Cypher.svg 1/1
QueryOptions CREATE Index
DROP Index
CREATE UniqueConstraint
DROP UniqueConstraint
CREATE NodePropertyExistenceConstraint
DROP NodePropertyExistenceConstraint
CREATE RelationshipPropertyExistenceConstraint
DROP RelationshipPropertyExistenceConstraint
LoadCSV
Start
Match
Unwind
Merge
Create
Set
Delete
Remove
Foreach
With
Return
ALL UNION
BulkImportQuery
;
Formalsemantics
• NadimeFrancis,PaoloGuagliardo,LeonidLibkin
• Formallydefinesa(large)coreofCypher
103
Futureimprovements
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 10105
Furtherimprovements
• Supportforqueryingfrommultiplegraphs• Supportforreturninggraphs• Supportfordefiningviews
• IntegrationwithSQL
106
RelationaltoGraph
Relationalissimple...untilitgetscomplicated...
RelationaltoGraph
!108
table1 table2join-table
Youknowrelational...nowconsiderrelationships...
RelationaltoGraph
!109
actors moviesactor_movie
• Entity-TablesbecomeNodes
• ForeignKeysbecomeRelationships
• LinkTablesbecomeRelationships
• RemoveartificialPrimaryKeysandForeignKeys
NormalizedRelationalModeltoGraphModel
• Cannotmodelorstoredataandrelationshipswithoutcomplexity
• Performancedegradeswithnumberandlevelsofrelationships,anddatabasesize
• QuerycomplexitygrowswithneedforJOINs
• Addingnewtypesofdataandrelationshipsrequiresschemaredesign,increasingtimetomarket
RDBMScan’thandlerelationshipswell
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
• Modelyourdatanaturallyasagraphofdataandrelationships• Drivegraphmodelfromdomainanduse-cases
• Userelationshipinformationinreal-timetotransformyourbusiness• Addnewrelationshipsontheflytoadapttoyourchangingrequirements
UnlockingValuefromYourDataRelationships
• Relationshipsarefirstclasscitizen
• Noneedforjoins,justfollowpre-materializedrelationshipsofnodes
• Query&Data-locality–navigateoutfromyourstartingpoints
• Onlyloadwhat’sneeded
• Aggregateandprojectresultsasyougo• Optimizeddiskandmemorymodelforgraphs
HighQueryPerformancewithaNativeGraphDB
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
NativeGraphs
116
Neo4jpreservesrelationships
• Therelationshipsinyourmodelexistasfirst-classentitiesinthedatabase
• First-classentitiesinmemory
• First-classentitiesondisk
117
Index-freeadjacency
Neo4j• Index→Node[O(logN)]
• Node→Properties[O(1)]• Node→Edges(bytype)[O(1)]thisincludesdegreeinformation
• Edgesbytype→Edges[O(1)]
• Edge→Properties[O(1)]• Edge→source/targetNode[O(1)]
118
RelationalDatabases• Everythingisanindex
• (sometimesatablescan)
• typicallyO(logn)• (sometimeshash:O(1))• Stillindirectionthroughindex
Graphsatscale
119
Queriesscalewithdatasetsize
• Index-freeadjacencymeansqueryexecutiontimeneverdependsontotaldatasize
• Queryexecutiononlydependonthenumberofedgesactuallyrelatedtothenodesactuallyfound
• Expectedexecutiontimebasedonaveragedegree
120
Graphsscaleupeasierthanscalingout
• Neo4jtriviallyhandlesseveralbillionnodesandedgesinasinglegraph
• RAMsizethemainfactorforperformance
• BigRAMisnotexpensive• TerabyteRAMisreadilyavailable(evenonAWS)
• RAMsizegrowingfasterthandatasetsizes
121
Neo4jscalesoutqueries
• Replicatedcluster
• Faulttolerance
• Queryprocessingcapacityscaleout
122
Neo4jscalesinreality
• Realcustomers,suchasAlbumprinterhavegraphsinproduction thatarelargerthan• 1billionnodes• 2.5billionedges
• Othercustomershavehad>90%ofthesocialgraphofFacebookreplicatedinNeo4j(beforeFacebookrestrictedtheirdatausepolicies)
123
LearnmoreaboutNeo4j
1. DownloadNeo4j:http://neo4j.com/download/
2. Starttheserver.
3. Itshouldberunningon:http://localhost:7474
4. Log-inwithdefaultcredentialsuser:neo4j password:neo4j
5. Chooseanewpassword
We’regoodtogo!
GettingstartedwithNeo4j
• :playintro-tolearntheNeo4jqueryinterface
• :playmovies-simpleexamplesonasimpledataset
• :playnorthwind-graph-theclassicnorthwindexampleasagraph• :playhttp://guides.neo4j.com/fundamentals/cypher_the_basics.html introductiontoCypher
• :playhttp://guides.neo4j.com/modeling_airportsatutorialongraphdatamodeling
• :playhttp://guides.neo4j.com/reco/fileatutorialonhowtouseNeo4jforrecommendations
TutorialsforlearningNeo4j
126
DeveloperPages
neo4j.com/developer
• IntrotoGraphs
• RDBMStoGraphs
• DataImport&DataModeling
• LanguageGuides&Drivers• Visualization• Neo4jEcosystem
GraphAcademy
neo4j.com/graphacademy
• Online&ClassroomTraining
• UniversityProgram
• Certification
• Webinars• GraphDays,GraphTalks
neo4j.com/graphacademy/neo4j-certification/1hourcertificationexamcovers:
• Cypher
• DataModeling
• Clustering• andmore...
BecomeaNeo4jCertifiedProfessional
neo4j.com/docs/cypher-refcard/current/
CypherReferenceCard
neo4j.com/docs neo4j.com/docs/developer-manual/current neo4j.com/docs/operations-manual/current
DeveloperDocumentation
neo4j.com/developer/kb• FrequentlyAskedQuestionsandAnswers
• CanonicalSource• MaintainedbyourSupportandFieldteam
• Tagged• Versionspecific
KnowledgeBase
github.com/neo4j github.com/neo4j-contrib github.com/neo4j-examples
GitHub
stackoverflow.com/questions/tagged/neo4j
StackOverflow
• Haveaninterestingproject,use-case?• Wecanhelpyoupromoteitwitharticles,talks,webinars
• Wroteatool,library,connector?• We’dlovetomakeitknowninourcommunity
• Havequestionsaboutlicensing&pricing?• Reachoutwithyourquestions,wecanhelpclarify
• WanttoworkonNeo4j?• Wehavemanycooljobs,pleaseapply• Wealsohaveopenresearchtopics
• Emailme• tobias@neo4j.com
Talktous
Researchtopics
thatweareinterestedincollaboratingon
140
GraphIndexes
• Topology-basedindexes• Pathindexes• Indexingofnodesbasedonrelatednodes
• Howtoensurecomplexindexesareconsistentwhenthedatachanges
• <yourideahere>• anythingthatcanbeusedtospeedupqueries
141
GraphPartitioning
• Howtosplitagraphintomultiplepartitionsinordertohandlelargergraphs
• Automaticpartitioning
• Schema-guidedpartitioning
• <yourideahere>
142
DistributedQueryExecution
• Dividingtheworkofonequeryovermultipleworkers
• Bothinapartitionedenvironment• andinareplicatedenvironment
143
EfficientDataStructures
• Betterwaysofrepresentinggraphsandindexes
• Onpersistentstorage
• Inmemory/cache
144
Semantic/Intentionallocking
• and/orotherwaysofensuringconsistentupdatesinaconcurrentsystem
• Bothwhenthedataispartitioned,• andwhenthedataisreplicated,• aswellasonasinglemachinewithmanythreads
145
GraphMetricsandStatistics
• thatwecancomputeandmaintainuptodatewhilethegraphisbeingupdatedwithlowcostoverhead
• thatcaneitherbeusedtodirectlyansweruserqueries
• ortobetteroptimisequeries
146
Queryoptimisation
• moreefficientwaystoevaluatequeries
• betteralgorithmsforfindingan“optimal”plan
147
GraphQueryLanguages
• EvolutionofCypher• Newwaysofqueryinggraphs
• Languagesandmodelsforexpressingalgorithmsongraphs
• <yourideahere>• anythingthatmakepeoplemoresuccessfulandefficientinmakingsenseofdata
148
FaultTolerance
• Resilientfaulttolerantsystems
• withaslowoverheadaspossible
149
Thankyou!Questions?
Tobias.Lindaaker@neo4j.com@thobe#neo4j
150