使用Neo4j批量插入

时间:2012-12-11 16:13:42

标签: java mysql graph neo4j batch-processing

我从表中导入了2.3亿个关系,导入速度不是很快,每小时5Million,完成迁移需要20天。我听说过neo4j批量插入和batch insert utility。该实用程序通过从csv文件导入来做有趣的事情,但最新的代码是一些破坏和不运行的。

我在neo4j中有大约100M的关系,我必须检查是否没有重复的关系。

如何加快neo4j中的事情

目前的代码就像

begin transaction
for 50K relationships
create or get user node for user A
create or get user node for user B
check there is relationship KNOW between A to B if not create the relationhsip
end transaction

我还阅读了以下内容:

2 个答案:

答案 0 :(得分:3)

如果是关系,假设你有足够的存储空间,我会尝试在导入阶段没有建立独特的关系 - 现在我实际上也在导入一个带有〜3mil记录的SQL表但是我总是创建一个关系并且不要介意它是否是重复的。

你可以在导入之后稍后执行一个cypher查询,这会产生这样的独特关系:

START n=node(*) MATCH n-[:KNOW]-m
CREATE UNIQUE n-[:KNOW2]-m;

START r=rel(*) where type(r)='KNOW' delete r;

现在至少这是我的方法,运行后来的cypher查询只需要几分钟。问题可能是当你真的有节点的数量时,cypher查询可能会陷入内存错误(取决于你为neo4j引擎设置了多少缓存)

答案 1 :(得分:0)

如何“获取用户A的用户节点”,从索引查找?索引查找确实减慢了批量插入速度。尝试在索引的“前面”的简单HashMap中尽可能地缓存用户的大部分,或者使用BatchInserterIndex #setCacheCapacity