5

我正在从一个表中导入 23 亿个关系,导入速度不是很快,每小时 500 万个,这需要 20 天才能完成迁移。我听说过 neo4j 批量插入和批量插入实用程序。该实用程序通过从 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

我还阅读了以下内容:

4

2 回答 2

3

在关系的情况下,假设你有足够的存储空间,我会尽量不在导入阶段建立唯一的关系——现在我实际上也在导入一个包含约 3 百万条记录的 SQL 表,但我总是创建一个关系并且不介意它是否是重复的。

您可以稍后在导入后简单地执行密码查询,这将创建这样的独特关系:

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

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

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

于 2012-12-12T09:36:52.233 回答
0

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

于 2012-12-11T20:27:52.197 回答