【发布时间】:2014-11-23 04:30:53
【问题描述】:
我想将一张带有自引用的表从 PostgreSQL 移动到 Neo4j。
PostgreSQL:
COPY (SELECT * FROM "public".empbase) TO '/tmp/empbase.csv' WITH CSV header;
结果:
$ cat /tmp/empbase.csv | head
e_id,e_name,e_bossid
1,emp_no_1,
2,emp_no_2,
3,emp_no_3,
4,emp_no_4,
5,emp_no_5,3
6,emp_no_6,2
7,emp_no_7,3
8,emp_no_8,1
9,emp_no_9,4
尺寸:
$ du -h /tmp/empbase.csv
631M /tmp/empbase.csv
我将数据导入 neo4j:
neo4j-sh (?)$ USING PERIODIC COMMIT 1000
> LOAD CSV WITH HEADERS FROM "file:/tmp/empbase.csv" AS row
> CREATE (:EmpBase:_EmpBase { neo_eb_id: toInt(row.e_id),
> neo_eb_bossID: toInt(row.e_bossid),
> neo_eb_name: row.e_name});
这很好用:
+-------------------+
| No data returned. |
+-------------------+
Nodes created: 20505764
Properties set: 61517288
Labels added: 41011528
846284 ms
Neo4j 控制台显示:
Location:
/home/neo4j/data/graph.db
Size:
5.54 GiB
但是我想继续每个emp 有一个boss 的关系。如此简单的emp->bossid SELF 参考。
现在我这样做:
LOAD CSV WITH HEADERS FROM "file:/tmp/empbase.csv" AS row
MATCH (employee:EmpBase:_EmpBase {neo_eb_id: toInt(row.e_id)})
MATCH (manager:EmpBase:_EmpBase {neo_eb_id: toInt(row.e_bossid)})
MERGE (employee)-[:REPORTS_TO]->(manager);
但这可以工作 5-6 个小时,最后会因系统故障而中断,它会冻结系统。 我认为这可能是非常错误的。
1.我做错了什么还是No4j的错误?
2。为什么现在我从 631 MB 的 csv 中得到了 5.5 GB?
EDIT1:
$ du -h /home/neo4j/data/
20K /home/neo4j/data/graph.db/index
899M /home/neo4j/data/graph.db/schema/index/lucene/1
899M /home/neo4j/data/graph.db/schema/index/lucene
899M /home/neo4j/data/graph.db/schema/index
27M /home/neo4j/data/graph.db/schema/label/lucene
27M /home/neo4j/data/graph.db/schema/label
925M /home/neo4j/data/graph.db/schema
6,5G /home/neo4j/data/graph.db
6,5G /home/neo4j/data/
解决方案:
- 等到控制台中的
:schema显示ONLINEe 而不是POPULATING - 更改配置文件中的日志大小
- 在第二个 csv 导入中添加
USING PERIODIC COMMIT 1000 - 索引仅在
label
【问题讨论】: