Graph Database Newbie Q- How to decide on the direction of a relation between 2 nodes -


how decide verb-direction of relation ?

e.g have country falling under sub region in turn under region. 1 better , there thumb rules on deciding direction.

(region)-[has]->(sub region)-[has]->(country)

or

(region)<-[belongs_to]-(sub region)<-[belongs_to]-(country)

regards san

i agree @inverfalcon directionality subjective decision. however, there may (at least) 1 situation in might want use specific direction, if make important use case faster.

this related fact if can make cypher pattern less specific (without affecting output), neo4j have less work , query faster.

for example, suppose entire data model consists of 2 node labels , 2 relationship types, below. (i use own data model, since don't know uses cases are.)

(:person)-[:acted_in]->(:movie) (:person)-[:directed]->(:movie) 

in order find movies actor acted in, query have following. (notice have specify acted_in type, because outgoing relationship of type directed. means neo4j has explicitly test every outgoing relationship type):

match (:person {id: 123})-[:acted_in]->(m:movie) return m; 

however, if data model replaced directed type directed_by type had opposite directionality, instead:

(:person)-[:acted_in]->(:movie) (:person)<-[:directed_by]-(:movie) 

with tweak, query simpler , faster (since neo4j not have test relationship types):

match (:person {id: 123})-->(m:movie) return m; 

and complete, notice in above 2 match patterns remove :movie label, since in both data models acted_in end node have movie label.


Comments

Popular posts from this blog

aws api gateway - SerializationException in posting new Records via Dynamodb Proxy Service in API -

asp.net - Problems sending emails from forum -