【发布时间】:2015-11-14 17:32:35
【问题描述】:
我有一个大型数据集(大约 1B 个节点和数十亿个关系),我正在尝试将其导入 Neo4j。我正在使用 Neo4j 导入工具。节点在一小时内完成了导入,但是从那时起,导入器在节点索引准备阶段(除非我错误地读取下面的输出)停留了超过 12 个小时。
... 有效内存: 可用机器内存:184.49 GB 最大堆内存:26.52 GB
节点 [>:23.39 MB/s---|属性|节点:|LAB|*v:37.18 MB/s------------------------- --------------------] 1B 1h 7m 18s 54ms 完成 准备节点索引 [*排序:11.52 GB-------------------------------------------- ------------------------------------]881M ...
我的问题是如何加快速度?我在想以下几点: 1. 拆分节点和关系的导入命令并进行节点导入。 2.在节点上创建索引 3. 进行合并/匹配以摆脱欺骗 4. 做 rels 导入。
这会有帮助吗?还有什么我应该尝试的吗?堆大小是否太大(我认为不是,但想征求意见)?
谢谢。
更新
我还尝试在同一台机器上准确导入一半的数据,但它在大致相同的时间(按比例)再次卡在该阶段。所以我基本上已经消除了磁盘空间和内存的问题。
我还检查了我的标题(因为我注意到其他人在标题不正确时遇到了这个问题),他们对我来说似乎是正确的。关于我还应该看什么的任何建议?
进一步更新
好吧,现在它变得有点荒谬了。我将数据大小减少到只有一个大文件(大约 3G)。它只包含单一类型的节点,并且只有 id。所以数据看起来像这样
1|作者
2|作者
3|作者
并且标题(在单独的文件中)看起来像这样
authorID:ID(Author)|:LABEL
而且我的导入仍然停留在排序阶段。我很确定我在这里做错了什么。但我真的不知道是什么。这是我的命令行来调用这个
/var/lib/neo4j/bin/neo4j-import --into data/db/graph.db --id-type string --delimiter "|" \
--bad-tolerance 1000000000 --skip-duplicate-nodes true --stacktrace true --ignore-empty-strings true \
--nodes:作者 "data/author/author_header_label.csv,data/author/author_half_label.csv.gz"
大多数错误容忍和跳过重复节点的选项都在那里,看看我是否可以让它通过导入至少一次。
【问题讨论】:
-
这是 Neo4j 的哪个版本?
-
最新的2.3.1
-
我收回了。它是 2.2.5
-
嘎...它是 2.3(Ent 试用版)。我感到困惑的原因是我检查了 README 文件,并且出于某种原因说 2.2.5。即使我的安装是从这里neo4j.com/artifact.php?name=neo4j-enterprise-2.3.0-unix.tar.gz
-
您能看到此时是否有许多 CPU 处于活动状态?它的进展是否超过了 881M ?您能否在此时获取线程转储并附加到此处?
标签: neo4j