Disons que nous avons une base de données Neo4j avec plusieurs sous-graphes de 50 000 noeuds. Chaque sous-graphe a une racine. Je veux trouver tous les nœuds dans un sous-graphe.Étiquettes et propriétés Neo4j, et leurs différences
Une façon serait de marcher récursivement sur l'arbre. Cela fonctionne mais peut être des milliers de voyages à la base de données.
Une façon est d'ajouter un identifiant de sous-graphe à chaque noeud:
MATCH(n {subgraph_id:{my_graph_id}}) return n
Une autre façon serait de relier chaque noeud dans un sous-graphe à la racine du sous-graphe:
MATCH(n)-[]->(root:ROOT {id: {my_graph_id}}) return n
Cela se sent plus " graphie "si cela compte. Cela semble cher.
Ou, je pourrais ajouter une étiquette à chaque noeud. Si {} my_graph_id était « BOBS_QA_COPY », puis
MATCH(n:BOBS_QA_COPY) return n
serait PELLE tous les nœuds du sous-graphe.
Ma question est quand est-il approprié d'utiliser une propriété de type jardin, d'ajouter des relations ou de définir une étiquette?
Définir une étiquette pour identifier un sous-graphe particulier me fait me sentir bizarre, comme si j'abuse de l'outil. Je m'attends à ce que les étiquettes disent quel quelque chose est, pas quelle instance de quelque chose il est. Par exemple, si nous étions en train de représenter graphiquement des informations sur la voiture, je pourrais voir des parties portant la mention «FORD EXPLORER». Mais je suis moins sûr qu'il serait logique d'avoir des pièces étiquetées "TONYS FORD EXPLORER". Maintenant, je pouvais voir (ID utilisateur: « Tony ») ayant une relation avec un graphique FORD EXPLORER ...
je être d'avoir un combat de « cerveau SQL » ...
50K nœuds, c'est beaucoup - en avez-vous vraiment besoin tous en même temps? –