Java neo4j中的图回归检测

Java neo4j中的图回归检测,java,neo4j,Java,Neo4j,我有一张这样尺寸的图 75 millions of nodes 238 millions of relationships 好几年了 我定期从外部数据重新生成它(通过导入csv) 然后我对所有最短路径进行批量搜索,单个搜索需要几毫秒。但整批10万次搜索通常需要5-10分钟 前一段时间,批量搜索速度慢了好几倍——总是30+分钟 有什么工具可以调查这个问题吗?我使用cypher和java驱动程序,当时没有neo4j更新(现在是4.0.11) 我尝试了使用Oracle linux而不是Debian的

我有一张这样尺寸的图

75 millions of nodes
238 millions of relationships
好几年了

我定期从外部数据重新生成它(通过导入csv)

然后我对所有最短路径进行批量搜索,单个搜索需要几毫秒。但整批10万次搜索通常需要5-10分钟

前一段时间,批量搜索速度慢了好几倍——总是30+分钟

有什么工具可以调查这个问题吗?我使用cypher和java驱动程序,当时没有neo4j更新(现在是4.0.11)

我尝试了使用Oracle linux而不是Debian的beefier服务器,以及使用neo4j 4.2.4而不是4.0.11,但都没有用。所以,问题可能在图中

我已经为慢速搜索设置了日志记录,但没有任何搜索速度低于几十毫秒。不幸的是,我不能回到旧的(更快的)图表来测量平均时间

更新:

旧搜索

MATCH (one:Obj{oid:'id1'}) with one MATCH (two:Obj{oid:'anyOf100kId'}), path=allshortestPaths((one) -[*0..4]-(two)) WHERE ALL (x IN RELATIONSHIPS(path) WHERE x.val<130) return path limit 100;
+----------------------------------------------------------------------------------------------------------+
| Plan      | Statement   | Version      | Planner | Runtime       | Time | DbHits | Rows | Memory (Bytes) |
+----------------------------------------------------------------------------------------------------------+
| "PROFILE" | "READ_ONLY" | "CYPHER 4.2" | "COST"  | "INTERPRETED" | 44   | 82495  | 7    | 7707104        |
+----------------------------------------------------------------------------------------------------------+


+----------------------------+-------------------------------------------------------------------------------------------------+----------------+------+---------+----------------+------------------------+
| Operator                   | Details                                                                                         | Estimated Rows | Rows | DB Hits | Memory (Bytes) | Page Cache Hits/Misses |
+----------------------------+-------------------------------------------------------------------------------------------------+----------------+------+---------+----------------+------------------------+
| +ProduceResults@graph.db   | path                                                                                            |              1 |    7 |     224 |                |                    0/0 |
| |                          +-------------------------------------------------------------------------------------------------+----------------+------+---------+----------------+------------------------+
| +Limit@graph.db            | 100                                                                                             |              1 |    7 |       0 |                |                    0/0 |
| |                          +-------------------------------------------------------------------------------------------------+----------------+------+---------+----------------+------------------------+
| +ShortestPath@graph.db     | path = (one)-[anon_112*0..4]-(two) WHERE all(x IN RELATIONSHIPS(path) WHERE x.val < $autoint_2) |              1 |    7 |   82267 |        7707104 |                    0/0 |
| |                          +-------------------------------------------------------------------------------------------------+----------------+------+---------+----------------+------------------------+
| +CartesianProduct@graph.db |                                                                                                 |              1 |    1 |       0 |                |                    0/0 |
| |\                         +-------------------------------------------------------------------------------------------------+----------------+------+---------+----------------+------------------------+
| | +NodeIndexSeek@graph.db  | two:Obj(oid) WHERE oid = $autostring_1                                                          |              1 |    1 |       2 |                |                    0/0 |
| |                          +-------------------------------------------------------------------------------------------------+----------------+------+---------+----------------+------------------------+
| +NodeIndexSeek@graph.db    | one:Obj(oid) WHERE oid = $autostring_0                                                          |              1 |    1 |       2 |                |                    0/0 |
+----------------------------+-------------------------------------------------------------------------------------------------+----------------+------+---------+----------------+------------------------+

7 rows available after 0 ms, consumed after another 44 ms

MATCH(one:Obj{oid:'id1'})与一个匹配(two:Obj{oid:'anyOf100kId'}),path=allshortestpath((one)-[*0..4]-(two)),其中ALL(x在关系(path)中,其中x.val不是一个真正的答案:我没有找到/创建一个检测大型节点集群的工具。通过添加更多的RAM来适应所有64GB的数据,问题得到了解决

此外,他们花了几天时间试图进一步提高性能,但都失败了。 不同的JVM设置几乎不起任何作用(大堆、大页面缓存)。
Community edition似乎很难限制为10个核心,但有效限制甚至更低,因为4和10-20个核心模式之间的差异只有几个百分点。

因为它能够完成,所以可以分析查询,并将扩展的查询计划添加到您的问题中。(发布的个人资料)感谢您的时间。不幸的是,我无法对old(fast)进行基准测试图表。可能这些对从一开始就“慢”。现在在每个“慢”批中,我只有0-4个慢检查,但它们仍然在相当令人印象深刻的5-40毫秒内完成。我担心所有查询的平均速度都会出现问题,但不会出现两个慢检查。计划是针对单个对。您是如何在所有(或子集)上运行这些检查的成对的?您是否在Cypher中完成了所有这些(两个匹配或一个匹配模式来捕获2的所有组合)或者您是在从客户端按配对调用查询吗?我从java应用程序运行100k请求,以查找node1和任何100k节点之间的所有路径。这些100k节点没有连接。像这样的100k查询不会很好地执行。相反,尝试用一个查询处理所有查询,尝试传入100k节点(或查找它们)通过参数作为列表。展开列表,然后执行匹配。请阅读本文以供参考:
final String qu = "MATCH (one:Obj {oid: 'id1' }) WITH one UNWIND $batch AS row MATCH (two:Obj {oid:row}), path=allshortestPaths((one) -[*0..4]-(two)) WHERE ALL (x IN RELATIONSHIPS(path) WHERE x.val<130) return path limit 10000";

Result r = session.run(qu, parameters("batch", orgs));