如何改善Cypher Query的运行时间

时间:2018-08-22 23:52:11

标签: optimization graph neo4j cypher

我在一个大型EC2盒(244G Ram和32核)上有一个非常大的图形(1.4个Bil +节点)。该图的性质由6种类型的第三方ID和1个第一方ID(又名“用户”)组成。我正在尝试收集由2个或更多第三方ID连接的第一方ID集。我的查询速度很快,限制为40,但更改为限制100并没有完成。查询如下:

Match (u:User)-[]->(id)<-[]-(u2:User)
Match (u)-[]->(id2)<-[]-(u2)
WHERE u<>u2 and id<>id2
RETURN u,id,id2,u2
LIMIT 40

具有限制40的查询几乎立即返回,但是将限制更改为100会使查询永久运行。关于如何扩展此查询的任何想法吗?我的conf如下:

dbms.memory.heap.initial_size=150g
dbms.memory.heap.max_size=150g
dbms.memory.pagecache.size=60g

我发现问题与仅与少数第三方ID连接的100个第一方uid有关,有没有一种方法可以限制查询以忽略一些与100个第一方uid连接的第三方ID? / p>

1 个答案:

答案 0 :(得分:0)

您在搜索类似的内容吗?

MATCH (u:User)-->(id)<--(u2:User),
      (u)-->(id2)<--(u2)
WHERE NOT id(id)=id(id2) AND 
      id(u) < id(u2) AND 
      size((id)<--()) < 100 AND 
      size((id2)<--()) < 100
RETURN u,id,id2,u2

有两件事,有两个变化:

  • id(u) < id(u2)是为了避免计算从uu2,然后从u2u的结果
  • size((id)<--())以避免超级节点