0

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

4

1 回答 1

3

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

于 2013-09-08T14:30:55.647 回答