我的数据库有两种类型的节点:用户和图表。如果图形和用户之间存在关系(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 数组?