Neo4j 密码删除查询导致高内存使用率

Neo4j 密码删除查询导致高内存使用率,neo4j,cypher,Neo4j,Cypher,我们有一个由数据集(~500)和用户(~15)组成的图。当我尝试使用以下查询清除这两组节点时,Neo4J(v2.3.1)的内存使用量增加到1.5 GB以上,查询速度非常慢 MATCH (ds:DataSet), (u:User) OPTIONAL MATCH (ds)-[r1]-(), (u)-[r2]-() DELETE ds, u, r1, r2 意外地将查询拆分为以下两个查询: MATCH (ds:DataSet) OPTIONAL MATCH (ds)-[r]-() DELETE ds

我们有一个由数据集(~500)和用户(~15)组成的图。当我尝试使用以下查询清除这两组节点时,Neo4J(v2.3.1)的内存使用量增加到1.5 GB以上,查询速度非常慢

MATCH (ds:DataSet), (u:User)
OPTIONAL MATCH (ds)-[r1]-(), (u)-[r2]-()
DELETE ds, u, r1, r2
意外地将查询拆分为以下两个查询:

MATCH (ds:DataSet) OPTIONAL MATCH (ds)-[r]-() DELETE ds, r
MATCH (u:User) OPTIONAL MATCH (u)-[r]-() DELETE u, r
将内存保持在约240 MB。启动后的初始内存消耗约为230 MB

我的问题是第一个密码查询是否存在概念问题。同时删除多组节点是否会非常低效

tl/dr:


两个节点集(用户和数据集)不重叠,但链接在一起,即用户节点可以通过关系与数据集节点连接。

如果您分析两个查询,您会发现第一个查询会产生数据集和用户的笛卡尔积,因为此时它们是断开连接的模式(即使它们可能在基础图中相关,但模式并不表示这一点)


性能更好的查询不会做这样的事情——它们通过标签扫描和删除来查找节点。

如果您分析这两个查询,您会发现第一个查询的结果是DataSet和User的笛卡尔乘积,因为此时它们是断开连接的模式(即使它们可能在基础图中相关,但模式并不表示这一点)


性能更好的查询不会做这样的事情——它们通过标签扫描和删除来查找节点。

结果表明问题是
(ds)-[r1]-()
(u)-[r2]-()

的笛卡尔积问题是
(ds)-[r1]-()和
(u)-[r2]-()

数据集
和用户的笛卡尔积不是问题,它只会让约7000 db的点击率下降,这其实并不多。感谢您提供有关
数据集
和用户的笛卡尔积的提示。这不是问题,它只会让约7000 db的点击率下降,这其实并不多。Th有关
PROFILE