Neo4j数据导入
ㅤ | CREATE语句 | LOAD CSV语句 | Batch inserter | Batch import | Neo4j-import |
使用场景 | 1-1w nodes | 1w-10w nodes | 千万以上nodes | 千万以上nodes | 千万以上nodes |
速度 | 很慢(1000 nodes/s) | 一般(5000 nodes/s) | 非常快(数万 nodes/s) | 非常快(数万 nodes/s) | 非常快(数万 nodes/s) |
优点 | 使用方便,可实时插入 | 很方便,可以加载本地、远程csv;可以实时插入。 | 速度相比前两个,有数量级的提升。 | 基于Batch inserter,可以直接运行编译好的jar包,可以在已存在数据库中导入数据。 | 官方出品,比Batch import占用更少的资源。 |
缺点 | 速度慢 | 需要将数据转换成csv | 需要转成CSV;只能在JAVA中使用;且插入时必须停止neo4j | 需要转成CSV;必须停止neo4j | 需要转成CSV;必须停止neo4j;只能生成新的数据库,而不能在已存在的数据库中插入数据 |
Neo4j-import进行导入
前提条件
- graph.db需要清空;
- neo4j需要停掉;
- 接受CSV导入,而且格式较为固定;
- 试用场景:首次导入
- 节点名字需要唯一
// 数据准备 清空data/databases/graph.db文件夹(如果有),将清洗好的结点文件nodes.csv和关系文件rel.csv拷贝到宿主机/home/neo4j/import中 // docker以exec方式进入容器的交互式终端 docker exec -it container_name(or container_id) /bin/bash // 停掉neo4j bin/neo4j stop //使用如下命令导入 bin/neo4j-admin import \ --database=graph.db \ //指定导入的数据库,没有系统则会在data/databases下自动创建一个 --nodes ./import/nodes.csv //指定导入的节点文件位置 --relationships ./import/rel.csv //指定导入的关系文件位置 --skip-duplicate-nodes=true //设置重复节点自动过滤 --skip-bad-relationships=true //设置bad关系自动过滤 //可执行一行式终端命令 bin/neo4j-admin import --database=graph.db --nodes ./import/nodes.csv --relationships ./import/rel.csv --skip-duplicate-nodes=true --skip-bad-relationships=true // 容器内启动neo4j bin/neo4j start // 退出交互式终端但是保证neo4j后台继续运行 ctrl + P + Q //保险起见,重启neo4j容器 docker restart container_name(or container_id)
重启后使用另一台主机向服务器发送http请求进行远程登陆,在浏览器中输入
服务器ip:7474
切换连接模式为 bolt:/ ,输入用户名和密码进行登陆,登陆成功发现在数据库一栏没找到新导入的数据库graph.db
这是因为配置不够全,继续进到容器挂载到宿主机的/home/neo4j/conf中对neo4j.conf进行配置
//在文件末尾添加默认的数据库 dbms.active_database=graph.db // 保存后重启容器 docker restart container_name(or container_id)
重新进行远程连接,此时数据库的默认选择应该就切换到了新导入的graph.db。
数据清洗
- 数据如何清洗成两个符合neo4j-import导入格式的csv文件?
ownthink_kg 1.4亿数据快速导入Neo4j