Introduction to Graph Data Management...Introduction to Graph Data Management with neo4j Tobias...

Post on 22-May-2020

22 views 0 download

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-examples

ExampleApplications

neo4j.meetup.com

MeetupGroups

neo4j.com/slack

Slack

github.com/neo4j github.com/neo4j-contrib github.com/neo4j-examples

GitHub

stackoverflow.com/questions/tagged/neo4j

StackOverflow

Books

neo4j.com/booksFree,highvaluee-booksThirdpartypublications

• 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