Neo4j 约500个插入件后卡住

Neo4j 约500个插入件后卡住,neo4j,Neo4j,我正在将节点和关系插入neo4j数据库(graphenedb,但也在本地发生)。 大约500次插入后,插入固定支架。 在重新启动neo4j服务器后,相同的插入操作与往常一样有效,我可以继续执行下一个~500个插入操作 你知道它为什么会卡住吗 一条insert语句如下所示: MERGE (b0:Company{company_id:{b1},universal_name:{b2},company_name:{b3}}) ON CREATE SET b0.funding_total_usd = nu

我正在将节点和关系插入neo4j数据库(graphenedb,但也在本地发生)。 大约500次插入后,插入固定支架。 在重新启动neo4j服务器后,相同的插入操作与往常一样有效,我可以继续执行下一个~500个插入操作

你知道它为什么会卡住吗

一条insert语句如下所示:

MERGE (b0:Company{company_id:{b1},universal_name:{b2},company_name:{b3}})
ON CREATE SET b0.funding_total_usd = null
ON MATCH SET b0.funding_total_usd = null

MERGE (b13:Industry{name:{b12}})
MERGE (b0)-[:company_industry]->(b13)
MERGE (b15:Category{name:{b14}})
MERGE (b0)-[:company_category]->(b15)
MERGE (b17:Category{name:{b16}})
MERGE (b0)-[:company_category]->(b17)
MERGE (b19:Category{name:{b18}})
MERGE (b0)-[:company_category]->(b19)
MERGE (b21:Category{name:{b20}})
MERGE (b0)-[:company_category]->(b21)
MERGE (b23:Category{name:{b22}})
MERGE (b0)-[:company_category]->(b23)
MERGE (b25:Category{name:{b24}})
MERGE (b0)-[:company_category]->(b25)
MERGE (b27:Category{name:{b26}})
MERGE (b0)-[:company_category]->(b27)
索引如下:

Indexes
   ON :Category(name) ONLINE  (for uniqueness constraint)
   ON :Company(company_id) ONLINE  (for uniqueness constraint)
   ON :Company(universal_name) ONLINE  (for uniqueness constraint)
   ON :Industry(name) ONLINE  (for uniqueness constraint)

Constraints
   ON ( category:Category ) ASSERT category.name IS UNIQUE
   ON ( company:Company ) ASSERT company.company_id IS UNIQUE
   ON ( company:Company ) ASSERT company.universal_name IS UNIQUE
   ON ( industry:Industry ) ASSERT industry.name IS UNIQUE
我使用以下PHP代码提交声明:

    $config = \GraphAware\Bolt\Configuration::create()
                           ->withCredentials($user, $pw)
                           ->withTimeout($timeout);
    if($ssl) {
        $config = $config->withTLSMode(\GraphAware\Bolt\Configuration::TLSMODE_REQUIRED);
    }

    $driver = \GraphAware\Bolt\GraphDatabase::driver($uri, $config);
    $driver->session()->run($query, $binds);
测试版本:3.4.12和3.5.1


@编辑:添加了用于提交语句和neo4j版本的代码。

您应该批处理插入,而不应该为每个节点显式创建单独的变量。相反,请查看是否可以提供参数,这些参数包括可以使用“展开”一次性寻址的属性列表

看我们的一些节目

应用于查询时,每个批次的参数输入可以如下所示:

UNWIND $entries as entry
MERGE (c:Company{company_id:entry.companyId, universal_name:entry.universalName, company_name:entry.companyName})
SET c.funding_total_usd = null

MERGE (industry:Industry{name:entry.industry})
MERGE (c)-[:company_industry]->(industry)

WITH entry, c
UNWIND entry.categories as cat
MERGE (category:Category{name:cat.name})
MERGE (c)-[:company_category]->(category)
{条目:[{公司ID:12345,通用名称:'foo',公司名称:'bar', 行业:'industry',类别:[{name:'cat1'},{name:'cat2'}, {name:'cat3'}]}]}

每批执行的查询本身可能如下所示:

UNWIND $entries as entry
MERGE (c:Company{company_id:entry.companyId, universal_name:entry.universalName, company_name:entry.companyName})
SET c.funding_total_usd = null

MERGE (industry:Industry{name:entry.industry})
MERGE (c)-[:company_industry]->(industry)

WITH entry, c
UNWIND entry.categories as cat
MERGE (category:Category{name:cat.name})
MERGE (c)-[:company_category]->(category)

我的第一个猜测是你没有做出足够的承诺。尝试每100条语句提交一次。请参见
注意,查询将保留内存中的更改,直到整个查询完成执行。因此,大型查询将占用大量内存。
请参阅。我不使用Cypher进行更新,我使用嵌入式Java,但经常进行提交。@GuyCoder我不使用事务。(如果我的库在内部使用事务,重新启动后数据将不在数据库中。)我将语句转换成这样,现在速度从每秒10次插入提高到1000次。这个问题也不再发生了。非常感谢。