优化 - 关系与属性?

时间:2013-09-08 14:16:45

标签: neo4j cypher

我的数据库有两种类型的节点:用户和图形。如果图形和用户之间存在关系(OWNS_GRAPH或HAS_ACCESS),则用户可以访问图形。很简单。因此,使用Cypher查询,我可以通过两种方式搜索用户可以访问的图表,我很好奇哪个方法更有效。

第一种方式使用关系。所以它是这样的:

START g=node:node_auto_index('type:graph AND ...'), u=node({id})
WHERE (u)-[:OWNS_GRAPH|HAS_ACCESS]->(g) RETURN g;

第二种方法涉及使用我为每个图分配的唯一ID。由于我知道用户可以访问哪些图表,因此我可以在运行时创建一组数组并使用IN运算符,如下所示:

START g=node:node_auto_index('type:graph AND ...')
WHERE g.id IN ["foo", "bar", "none"] RETURN g;

显然,我必须依旧用Java而不是Cypher来遍历关系。但是让我们忽略这一点,因为我可以通过一些聪明的滴答来缓解这个问题。哪个查询更有效?遍历关系或使用ID数组?

1 个答案:

答案 0 :(得分:3)

第一个(遍历关系)将比属性查找和比较更有效。