【问题标题】:Neo4j Performance - IN Operator Cypher QueryNeo4j 性能 - IN 运算符密码查询
【发布时间】:2016-02-27 16:13:48
【问题描述】:

如果我有 100 万用户,并且如果我使用 IN 运算符搜索他们,并使用 1000 多个唯一索引的自定义 ID。

例如,在neo4j给出的电影数据库中 假设我需要获取我的演员列表 (> 1000) 应该在该电影中演出的所有电影,并按电影发行日期和不同的电影结果排序。

在数据库上执行该操作真的很好吗?如果我在单节点实例和 ha 集群中执行该操作,时间复杂度是多少。

【问题讨论】:

  • 你测试了什么?您是否通过匹配 100 或 1000 个用户来分析查询并查看差异?
  • 我没有测试过。我刚刚开始编写密码查询。我正在玩电影 db。任何理论上的答案如何执行?

标签: neo4j


【解决方案1】:

这将为您提供有关计算中涉及的计算复杂性的粗略指南。

对于您的每个 Actor,Neo 将查找来自该节点的所有 Acted_In 关系。让我们假设每个 Actor 的平均 Acted_In 关系数为 4。

因此 Neo 将需要每个 Actor 进行 4 次遍历。 因此,对于 1000 个 Actor,将是 4000 次遍历。 对于 Neo 来说这并不多(他们声称每秒大约 100 万次,但这当然取决于硬件)

然后,查询的 Distinct 方面对于 Neo 来说是微不足道的,因为它知道它访问了哪些节点,因此 Neo 会自动拥有唯一的电影节点列表,所以这会非常快。

如果电影的发行日期在 Neo 中被索引,那么结果的排序也会非常快。

所以理论上这个查询应该运行得很快(不到一秒)并且对数据库的影响最小

【讨论】:

  • 请注意,发布日期的索引不会更改,因为它们不用于订购
  • 上述问题的一部分表明电影是“按电影上映日期排序”...
  • 是的,我的意思是拥有索引不会对订单 bt 产生任何性能影响
  • 哦,可能是我理解不够。我认为当遍历查询完成并且 Neo 拥有 Movie 节点时,它使用 Release Date 字段上的索引来帮助在返回之前对节点进行排序。这是不正确的吗?
  • 是的,顺便说一句,这将是一个很好的改进。另请注意,排序会阻止流式传输结果,因为它必须首先收集所有元素,然后再对它们进行排序。
【解决方案2】:

这就是我要做的,我将从具有最低程度的演员开始遍历,即数据集的最高选择性。然后找到他演过的电影,并将这些电影与其他演员进行对比。

第二个选项可能更有效地实施。 (还有另一个技巧可以加快速度,当您有数据集进行测试时,请通过电子邮件告诉我)。

MATCH (n:Actor) WHERE n.id IN {ids}
WITH n, SIZE( (n)-[:ACTED_IN]->() ) as degree
ORDER BY degree ASC 
WITH collect(n) as actors WITH head(actors) as first, tail(actors) as rest, size(actors)-1 as number
// either
MATCH (n)-[:ACTED_IN]->(m)
WHERE size( (m)<-[:ACTED_IN]->() ) > number AND ALL(a in rest WHERE (a)-[:ACTED_IN]->(m))
RETURN m;

// or
MATCH (n)-[:ACTED_IN]->(m)
WHERE size( (m)<-[:ACTED_IN]->() ) > number
MATCH (m)<-[:ACTED_IN]-(a)
WHERE a IN rest
WITH m,count(*) as c, number
WHERE c = number
RETURN m;

【讨论】:

  • 我只了解收集演员的第一部分。我遇到的问题 1) 节点拥有的关系的大小是元数据,它将需要 1 db 命中 2) 我们为什么要这样做 size( (m)() ) > number 那句话是什么意思和 (m)
  • 不确定您的问题是否得到解答。这个答案是说首先按演员演过多少部电影来排序,然后从那些最少的人开始。因此,size( (m)&lt;-[:ACTED_IN]-&gt;() ) 获取演员 m 参演的电影数量。
猜你喜欢
  • 1970-01-01
  • 2014-11-18
  • 1970-01-01
  • 2013-02-05
  • 1970-01-01
  • 2011-09-21
  • 1970-01-01
  • 2016-12-22
  • 2013-09-29
相关资源
最近更新 更多