繁体   English   中英

Neo4j查询性能与内存调优

[英]Neo4j query performance with memory tuning

我有一个图表(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消除包含之前访问过的节点的路径?

在此输入图像描述

你可以尝试运行它:

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);

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

+----------------------+----------------+------------------------------------------+---------------------------+
| Operator             | Estimated Rows | Variables                                | Other                     |
+----------------------+----------------+------------------------------------------+---------------------------+
| +ProduceResults      |              0 | count(u), p1, p2                         | p1, p2, count(u)          |
| |                    +----------------+------------------------------------------+---------------------------+
| +EagerAggregation    |              0 | count(u) -- p1, p2                       | p1, p2                    |
| |                    +----------------+------------------------------------------+---------------------------+
| +SemiApply           |              0 | p2 -- p1, u                              |                           |
| |\                   +----------------+------------------------------------------+---------------------------+
| | +Expand(Into)      |              0 | anon[78] -- anon[87], anon[89], p1, u    | (p1)-[:Has]->()           |
| | |                  +----------------+------------------------------------------+---------------------------+
| | +Expand(All)       |              0 | anon[87], anon[89] -- p1, u              | (u)-[:LIKES]->()          |
| | |                  +----------------+------------------------------------------+---------------------------+
| | +Argument          |              1 | p1, u                                    |                           |
| |                    +----------------+------------------------------------------+---------------------------+
| +SemiApply           |              0 | p1 -- p2, u                              |                           |
| |\                   +----------------+------------------------------------------+---------------------------+
| | +Expand(Into)      |              0 | anon[119] -- anon[128], anon[130], p2, u | (p2)-[:Has]->()           |
| | |                  +----------------+------------------------------------------+---------------------------+
| | +Expand(All)       |              0 | anon[128], anon[130] -- p2, u            | (u)-[:LIKES]->()          |
| | |                  +----------------+------------------------------------------+---------------------------+
| | +Argument          |              1 | p2, u                                    |                           |
| |                    +----------------+------------------------------------------+---------------------------+
| +CartesianProduct    |              0 | u -- p1, p2                              |                           |
| |\                   +----------------+------------------------------------------+---------------------------+
| | +CartesianProduct  |              0 | p2 -- p1                                 |                           |
| | |\                 +----------------+------------------------------------------+---------------------------+
| | | +Filter          |              0 | p1                                       | p1.FID == {  AUTOSTRING0} |
| | | |                +----------------+------------------------------------------+---------------------------+
| | | +NodeByLabelScan |              0 | p1                                       | :Brand                    |
| | |                  +----------------+------------------------------------------+---------------------------+
| | +Filter            |              0 | p2                                       | p2.FID == {  AUTOSTRING1} |
| | |                  +----------------+------------------------------------------+---------------------------+
| | +NodeByLabelScan   |              0 | p2                                       | :Brand                    |
| |                    +----------------+------------------------------------------+---------------------------+
| +NodeByLabelScan     |              0 | u                                        | :User                     |
+----------------------+----------------+------------------------------------------+---------------------------+

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM