我import.csv
创造了许多节点和合并造成了巨大的笛卡尔积,并在运行的transaction timeout
由于数据增长如此之快。 我因为所有其他的查询是非常快的,不应该采取任何超过一秒钟来完成交易超时当前设置为1秒。
有没有一种方法来分割或执行中的小块这个特定的查询,以防止超时?
正在增加或禁用transaction timeout
在neo4j.conf
因为Neo4j的服务需要在配置的每次改变重新启动是不是一种选择。
查询打从我进口脚本超时:
MATCH (l:NameLabel)
MATCH (m:Movie {id: l.id,somevalue: l.somevalue})
MERGE (m)-[:LABEL {path: l.path}]->(l);
Nodecounts:1000电影,2500 Namelabel
你可以尝试安装APOC过程和使用过程apoc.periodic.commit 。
call apoc.periodic.commit("
MATCH (l:Namelabel)
WHERE NOT (l)-[:LABEL]->(:Movie)
WITH l LIMIT {limit}
MATCH (m:Movie {id: l.id,somevalue: l.somevalue})
MERGE (m)-[:LABEL {path: l.path}]->(l)
RETURN count(*)
",{limit:1000})
下面的查询将反复在单独的事务,直到它返回0被执行。
您可以更改的值{limit : 1000}
注:记住安装根据您所使用的Neo4j的版本APOC程序。 您可以在看版本兼容性 。
在你的数据库节点和标签的数量表明这是一个索引的问题。 你有两个电影和Namelabel约束(这应该是NameLabel,因为它是一个节点)的节点? 适当的约束要到位,活跃。
索引和性能
确保有指标,并宣布限制和在线为实体要匹配或合并功能
总是匹配和合并单个标签和索引的主键属性上
前缀使用周期性的负载COMMIT语句10000如果可能的话,从关系创建成不同的语句单独的节点创建
如果您导入缓慢或运行到内存问题,看到马克的博客文章上预先加载。
如果你的电影的节点有唯一的名字,然后使用CREATE UNIQUE
声明。 - 文档
如果一个结点是不是唯一的,但将在关系定义中使用,则CREATE INDEX ON
语句。 有了这样一个小的数据集,可能不是很明显你的查询是如何低效的。 尝试PROFILE
命令,看看有多少节点正在搜索。 你的MERGE
语句只应在每一步检查一对夫妇的节点。