先前实验室项目上以及个人小论文的实验都需要用到Neo4j图数据库这个工具,项目以及实验所涉及的数据量达到千万级别以上,在参考比较了一下几种方法之后,选择了官方提供的Neo4j-import方法。
- Cypher CREATE 语句,为每一条数据写一个CREATE
- Cypher LOAD CSV 语句,将数据转成CSV格式,通过LOAD CSV读取数据。
- Batch Inserter
- Batch Import 工具
- neo4j-import 工具
具体的几种方式的异同点请见参考资料,这里只介绍第5种方式的具体操作步骤。
操作步骤
一、数据预处理
neo4j-import官方要求的数据格式为csv文件,我所要处理的数据是来自DBpedia,主要就是分成两个文件entity.csv edge.csv
其中entity.csv中包含了实体的id,实体的name,以及标签LABEL,具体格式如下:
"node_id:ID","name",":LABEL"
"carBrand1","Anasagasti","Entity"
"carBrand2","Andino","Entity"
"carBrand3","Hispano-Argentina","Entity"
"carBrand4","Eniak","Entity"
"carBrand5","Industrias_Aeronáuticas_y_Mecánicas_del_Estado","Entity"
"carBrand6","Industrias_Kaiser_Argentina","Entity"
"carBrand7","Alpha_Sports","Entity"
"carBrand8","Amuza","Entity"
"carBrand9","Birchfield","Entity"
edge.csv文件包含了起始节点id,结束节点id,关系的name,以及标签LABEL,具体格式如下:
":START_ID","name",":END_ID",":TYPE"
"4565904","homepage","0","Predicate"
"4654000","homepage","0","Predicate"
"2254843","homepage","0","Predicate"
"2346995","homepage","0","Predicate"
"3535680","homepage","0","Predicate"
"2090446","homepage","0","Predicate"
二、导入
预处理得到以上两个文件之后,将文件上传至服务器:
scp entity.csv root@10.1.18.222:/rdf_csv_data
scp edge.csv root@10.1.18.222:/rdf_csv_data
需要注意的是,neo4j-import导入方法的前提条件是数据库不存在,因此先删除已有的数据库:
cd /usr/local/neo4j-community-3.3.3/data/databases
rm -rf graph.db
确保数据库已经删除之后进行导入,进入neo4j主目录:
cd /usr/local/neo4j-community-3.3.3
./bin/neo4j-import --into [PATH] --nodes [nodeA.csv] --nodes [nodeB.csv] --relationships [C.csv]
其中 [PATH] 为neo4j数据库所在目录,[nodeA.csv]和[nodeB.csv]是实体节点文件,[C.csv]是边关系文件,所以此处我该写的命令是:
./bin/neo4j-import --into /usr/local/neo4j-community-3.3.3/data/databases/graph.db --nodes /rdf_csv_data/entity.csv --nodes /rdf_csv_data/entity_car.csv --nodes /rdf_csv_data/entity_car_model.csv --nodes /rdf_csv_data/entity_language.csv --nodes /rdf_csv_data/type.csv --relationships /rdf_csv_data/edge_no_string_complete.csv
之后一切正常的话将出现这个画面:
说明导入成功。
至此,neo4j-import导入大量数据就成功了。
参考文献
Neo4j官方手册:neo4j-operations-manual-3.2.pdf