工作中需要将 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. arcgis sde 导出栅格文件失败,提示“Database user name and current user schema do not match ”.

    具体错误/警告如下: 翻译一下:数据库用户名和当前用户数据库对象的集合不匹配 没有空间参考存在 数据库表没找到 主要还是第一句的问题. 解决方法:切换当前sde账户为能够写入sde的账户,这块不是很了 ...

  2. 一天搞定HTML----标签类型与类型转换05

    标签类型: 标签只有两类:行内元素和块元素 行内元素:内容撑开宽高 块元素:默认独占一行 注意: 在使用display时,会遇到一种inline-block类型的标签.这种标签不属于标签的分类. 1. ...

  3. 【锋利的jQuery】表单验证插件踩坑

    和前几篇博文提到的一样,由于版本原因,[锋利的jQuery]表单验证插件部分又出现照着敲不出效果的情况. 书中的使用方法: 1. 引入jquery源文件, 2. 引入表单验证插件js文件, 3. 在f ...

  4. 写JS自执行函数时要注意的

    JS是非强类型语言,且IDE也不够智能,所以经常会在语句结束时漏写了分号,一般情况下这是不影响运行的, 但如果后面跟上的是一段自执行的函数,就会报出 "..... is not functi ...

  5. angular表单验证实例----可用的代码

    前段时间,公司做一个单页面,就是一个表单验证,早开始在菜鸟教程上关注了angular,所以下派上用场了 angular里面对于表单验证,设置了很多指令. 也就是说不用自己写一些逻辑,直接绑定指令就行. ...

  6. Hibernate入门(四)

    一 Hibernate缓存 缓存是介于应用程序和数据库之间,对数据库中的数据复制一份到缓存中,其作用就是为了减少应用程序对数据库的访问,访问数据库时先从缓存中取,提高了程序的性能.Hibernate缓 ...

  7. ionic 项目中使用ngCordova插件$cordovaCamera筛选手机图库图片显示出来并上传

    原文档请看http://www.ncloud.hk/%E6%8A%80%E6%9C%AF%E5%88%86%E4%BA%AB/ionic%E5%9B%BE%E7%89%87%E4%B8%8A%E4%B ...

  8. Oracle数据库web维护客户端管理工具软件

    TreeSoft数据库管理系统使用JAVA开发,采用稳定通用的springMVC +JDBC架构,实现基于WEB方式对 MySQL,Oracle,PostgreSQL 等数据库进行维护管理操作. 功能 ...

  9. 统计dir_path下所有文件类型的文件数量

    #!/bin/bash #!文件名为countfile.sh ]; then echo "Usage is $0 basepath"; exit fi path=$ declare ...

  10. 【LeetCode】118. Pascal's Triangle

    题目: Given numRows, generate the first numRows of Pascal's triangle. For example, given numRows = 5,R ...