工作中需要将 A 图数据库的数据完全导出,并插入到 B 图数据库中。查找资料,好多都是通过导入,导出 CSV 文件来实现。然而,经过仔细研究发现,导出的节点/关系 都带有 id 属性 ,因为 A B 两个库的节点和关系是各自生成的,它们数据的 id 有重复。因此我担心通过CSV 的方式插入数据库 会造成数据的覆盖或者某些数据导入不成功之类的问题,所以,就一直想找一种方式,通过 命令的方式来导入导出数据。也就是说:把 数据库 A 中的节点/关系的创建命令导出来,在 B 中运行,从而会自动生成新的节点和关系,这样就不会有 id 冲突的问题。经过查找资料,步骤如下:

Neo4j 图数据库通过命令导入导出数据库

首先 阅读一下该文档

https://github.com/jexp/neo4j-shell-tools#cypher-import

一 安装 neo4j-shell-tools
cd /path/to/neo4j-community-3.0.1
curl http://dist.neo4j.org/jexp/shell/neo4j-shell-tools_3.0.1.zip -o neo4j-shell-tools.zip
unzip neo4j-shell-tools.zip -d lib

二 重启数据库

cd /path/to/neo4j-community-3.0.1
sudo ./bin/neo4j restart

三 关闭数据库,导出命令

suo ./neo4j stop
sudo ./neo4j-shell -path /opt/neo4j/data/databases/graph.db

会显示如下内容:

an@an-virtual-machine:/opt/neo4j/bin$ sudo ./neo4j-shell -path /opt/neo4j/data/databases/graph.db
NOTE: Local Neo4j graph database service at '/opt/neo4j/data/databases/graph.db'
Welcome to the Neo4j Shell! Enter 'help' for a list of commands. Please note that neo4j-shell is deprecated and to be replaced by cypher-shell. neo4j-sh (?)$

四 导出命令

neo4j-sh (?)$ export-cypher -r -o /home/an/sisi.cypher match(n)-[r]-(m)return n,r,m

命令运行完毕,会显示如下输出,并生成相应文件 /home/an/sisi.cypher.
经测试,(n)-[r]-(m) 虽然没有指定方向,但是由于程序会生成一些特殊的label,从而确保不会出现双方向重复匹配情况。能够确保数据的单一性。
Wrote Nodes 0. 100%: nodes = 167276 rels = 1915138 properties = 0 time 15891 ms total 15891 ms
Wrote Relationships 1. 100%: nodes = 167276 rels = 2082410 properties = 190061 time 3139 ms total 19030 ms
Wrote to Cypher-file /home/an/sisi.cypher 2. 100%: nodes = 167276 rels = 2082410 properties = 190061 time 2 ms total 19032 ms

五 修改导出的命令文件

导出的命令文件内容是 一些 cypher 命令,和一些事务相关命令。这些命令是要在 cypher-shell中运行的,因此要适合它的要求。

修改内容如下:
1. begin => :begin
2. commit => :commit
3. 删掉 schema await 语句

六 打开数据库,运行命令

打开数据库,并进入 cypher-shell 界面

sudo ./bin/neo4j start
sudo ./cypher-shell -u neo4j -p neo4j //用户名 密码
显示如下:
an@an-virtual-machine:/opt/neo4j/bin$ sudo ./cypher-shell -u neo4j -p root
Connected to Neo4j 3.2.0 at bolt://localhost:7687 as user neo4j.
Type :help for a list of available commands or :exit to exit the shell.
Note that Cypher queries must end with a semicolon.
neo4j>
为什么之前要修改导出的命令文件,在begin和commit前加 : ,是因为如下原因:
neo4j> :help Available commands:
:begin Open a transaction
:commit Commit the currently open transaction
:exit Exit the logger
:help Show this help message
:history Print a list of the last commands executed
:param Set the value of a query parameter
:params Prints all currently set query parameters and their values
:rollback Rollback the currently open transaction

这里如果发现无法启动数据库,就看一看刚才打开的 neo4j-shell 终端有没有关闭,如果没有关闭,首先关闭该终端,然后在重启数据库。

七 运行命令

将导出文件sisi.cypher 中的 cypher 命令 贴入 cypher-shell` 终端并运行即可。

导出的文件应该是 :begin 为起始行,:commit 为结束行。

如果,你有更好的方式来实现类似的需求,请一定要告诉我,不胜感激。

neo4j 数据库导入导出的更多相关文章

  1. neo4j数据库迁移---------Neo4j数据库导入导出的方法

    Neo4j数据进行备份.还原.迁移的操作时,首先要关闭neo4j; /usr/share/neo4j/bin neo4j stop 如果出现 Neo4j not running 出现这种情况, Neo ...

  2. MYSQL数据库导入导出(可以跨平台)

    MYSQL数据库导入导出.sql文件 转载地址:http://www.cnblogs.com/cnkenny/archive/2009/04/22/1441297.html 本人总结:直接复制数据库, ...

  3. Oracle数据库——常用命令(用户管理、数据库导入导出)

    --==cmd控制台==-- --==日常用户管理SQL==-- --连接到SQLPLUS >sqlplus /nolog --以dba身份连接 sql>conn / as sysdba ...

  4. oracle数据库导入导出命令!(转)

    oracle数据库导入导出命令! Oracle数据导入导出imp/exp 功能:Oracle数据导入导出imp/exp就相当与oracle数据还原与备份. 大多情况都可以用Oracle数据导入导出完成 ...

  5. JAE京东云引擎Git上传管理代码教程和京东云数据库导入导出管理

    文章目录 Git管理准备工作 Git工具上传代码 发布代码装程序 mywebsql管理 京东云引擎小结   JAE京东云引擎是京东推出的支持Java.Ruby.Python.PHP.Node.js多语 ...

  6. Mysql:数据库导入导出

    Mysql:数据库导入导出 Mysql数据库导出 mysqldump -h IP -u 用户名 -p 数据库名 > 导出的文件名 1.mysqldump是在cmd下的命令,需要在linux命令行 ...

  7. 数据库导入导出expdp,impdp

    数据库操作 (1)数据库导入导出expdp,impdp 在导入导出数据库的时候,经常会用到exp和imp,在数据量小的情况下可以随意使用,但是当数据量大,表中数据有百万,千万条的时候,就要等好久好久好 ...

  8. 180620-mysql之数据库导入导出

    文章链接:https://liuyueyi.github.io/hexblog/2018/06/20/180620-mysql之数据库导入导出/ mysql之数据库导入导出 实际工作中,需要做一下数据 ...

  9. oracle数据库导入导出方法

    Oracle Database 10g以后引入了最新的数据泵(Data Dump)技术,使DBA或开发人员可以将数据库元数据(对象定义)和数据快速移动到另一个oracle数据库中. 数据泵导出导入(E ...

随机推荐

  1. 连接Oracle数据库的时候报了“Got minus one from a read call”

    (转) 出现这种问题基本上就以下几种原因,可以查一下系统日志看看:1:数据库连接满了,扩大数据库连接池2:所登录的机子IP不在sqlnet.ora内,加入后重启listerner即可3:数据库负载均衡 ...

  2. 3.Node.js 自定义微信菜单

    文章目录:         1.Node.js 接入微信公众平台开发         2.Node.js access_token的获取.存储及更新         3.Node.js 自定义微信菜单 ...

  3. PHPstrom的Disable Power Save Mode

    1.安装好phpstorm之后 发现代码高亮和函数自动提示都失效了 网上有人说可能是Power save mode的原因开始没找到这个设置在哪 后来在底部面板的信息提示处发现有一条系统消息: 17:0 ...

  4. java基础(一章)

    java基础(一章) 1.            java是一种面向对象的高级编程语言. 2.            java包括:              javase(java基础)       ...

  5. struts2+hibernate+spring配置版框架搭建以及简单测试(方便脑补)

    为了之后学习的日子里加深对框架的理解和使用,这里将搭建步奏简单写一下,目的主要是方便以后自己回来脑补: 1:File--->New--->Other--->Maven--->M ...

  6. mysql revise

    DATABASE create database db_name; use db_name; alter database db_name; drop database db_name; show d ...

  7. java原生实现屏幕设备遍历和屏幕采集(捕获)等功能

    前言:本章中屏幕捕获使用原生java实现,屏幕图像显示采用javacv1.3的CanvasFrame 一.实现的功能 1.屏幕设备遍历 2.本地屏幕图像采集(也叫屏幕图像捕获) 3.播放本地图像(采用 ...

  8. win10下面visual studio, sublime ctrl+shift+f快捷键失效的原因

    在visual studio 和sublime中,经常遇到ctrl+shift+f不能用,然后输入法总是自动切换成繁体中文. 实在百思不得其解. 今天才发现,我用的windows 10自带的微软拼音输 ...

  9. 模拟jquery底层链式编程

    //特点1:快级作用域,程序启动自动执行 //内部的成员变量,外部无法访问(除了var) //简单的函数链式调用 function Dog(){ this.run=function(){ alert( ...

  10. python学习笔记之列表与元组

    一.概述 python包含6种内建的序列,其中列表和元组是最常用的两种类型.列表和元组的主要区别在于,列表可以修改,元组则不能修改 使用上,如果要根据要求来添加元素,应当使用列表:而由于要求序列不可修 ...