内存调优的Neo4j查询性能

时间:2016-06-03 19:10:36

标签: performance neo4j cypher graph-databases

我有一个图表(User- [Likes] - > Item),它有数百万个节点和数十亿个节点(大约50G的磁盘),它们构建在一台功能强大的机器上,内置256G RAM和40个核心。目前,我正在计算两个项目之间的allshortestpath()。

为了提高密码查询性能,我设置了dbms.pagecache.memory=100gwrapper.java.additional=-Xmx32g,希望整个neo4j可以加载到meomory中。但是,当我执行最短路径查询时,CPU使用率为1625%,而MEMORY使用率仅为5.7%,我没有看到密码查询的性能改进。我在设置中遗漏了什么吗?或者我可以设置一些东西来更快地运行查询?我已阅读开发人员手册中的性能调优指南,但未找到解决方案。

EDIT1: 密码查询用于计算同时拥有这两个项目的唯一用户数。完整模式将是(品牌) - [:Has] - >(项目)< - [:LIKES] - (用户) - [:LIKES] - >(项目)< - [:HAS] - (品牌)

profile 
MATCH p = allShortestPaths((p1:Brand {FID:'001'})-[*..4]-(p2:Brand {FID:'002'})) 
with [r in RELS(p)|type(r)] as relationshipPath, 
[n in nodes(p)|id(n)][2] as user, p1, p2  
return p1.FID, p2.FID, count(distinct user);

EDIT2: 以下是采样器查询计划。现在看来,我没有有效地使用shortestsPath(380,556,69 db命中)。我使用shortestsPath来获取开始/结束节点之间的公共用户节点,然后使用count(distinct)来获取唯一用户。是否有可能告诉cypher消除包含之前访问过的节点的路径?

enter image description here

1 个答案:

答案 0 :(得分:0)

您可以尝试运行此代码:

 vagrant ssh-config
Host default
  HostName 127.0.0.1
  User vagrant
  Port 2222
  UserKnownHostsFile /dev/null
  StrictHostKeyChecking no
  PasswordAuthentication no
  IdentityFile "C:/Users/muk_t/.vagrant.d/insecure_private_key"
  IdentitiesOnly yes
  LogLevel FATAL

这从用户开始并检查两个品牌,解释计划看起来好多了

MATCH (p1:Brand {FID:'001'}),(p2:Brand {FID:'002'})
MATCH (u:User)
WHERE (p1)-[:Has]->()<-[:LIKES]-(u) AND 
      (p2)-[:Has]->()<-[:LIKES]-(u)
RETURN p1,p2,count(u);