neo4j图数据库,如何清空或删除某个database?
发布于 作者:苏南大叔 来源:程序如此灵动~因为苏南大叔计划后续的文章写neo4j
的查询语句的写法,所以,不可避免的会不断清空数据库。所以,这里就先说说清空数据库的办法把。清空或删除一个neo4j
数据库的方法很多,本文中也是介绍其中的几个办法,仅供参考。
大家好,这里是苏南大叔的“程序如此灵动”博客,这里记录苏南大叔和计算机代码的故事。本文中,苏南大叔将介绍几个暴力清除neo4j
数据库的方式。使用的场景不同,看到看情况使用。
本文测试环境:win10
,neo4j@4.4.3社区版
。实验的过程中,可能会涉及到多次还原数据库,可以参考下面的文章链接:
本文中的介绍的操作,都比较危险,不要在生产环境上实验!一定要备份好数据后再操作!本文提到的这几种方式都是有局限性的,效果都不好!强迫症患者推荐使用删除/data/
目录的方式。非强迫症患者可以使用cypher
语句删除数据。
方案一:Cypher
语句 【有残余】
本条是neo4j
官方推荐的方式,但是,在苏南大叔的反复测试操作中,感觉这个方法也是有局限性的。
使用方式
进入neo4j
管理界面:
注意看清楚,当前操作的数据库是哪一个,可以使用下面的类似语句更改当前数据库。不过,对于社区版的neo4j
来说,一般来说也就一个可以操作的数据库实例(neo4j
)。
:use <db_name>
这里有两种cypher
语句可供参考:
MATCH (n) OPTIONAL MATCH (n)-[r]-() DELETE n,r
或者
match (n) detach delete n
执行的过程中,没有任何确认提示的。所以,一定要谨慎操作。执行之后,对应数据库实例就是个空壳,所以对应的数据库文件夹还存在,就是个清空的操作。
存在问题
问题一:identity
不归零
这两条语句执行完成后,如果不重启图数据库的话,插入新数据的时候,自带的identity
是不归零的,用以前的sql
的话来说,就是没有truncate
效果。如果清库之后,再重启一下数据库,identity
就自动归零了,完美。
问题二:左侧有残留使用痕迹
官方推荐的方式,还有个非常严重的问题,在browser
左侧会残余Node Labels
/Relationship Types
/Property Keys
。建立索引的时候,就会有前两者残余。
前两者可以使用apoc
提供的功能去除,而Property Keys
的去除,只能够使用neo4j-admin copy
的功能去除,然而!这个copy
功能只存在于企业版中!社区版中没有!非官方的store-utils
提供的copy
,只支持到3.5
系列,4
系列不更新了。
所以说对于强迫症患者又只能使用社区版的同学来说,这事儿简直不能接受。
方案二:直接删除对应图文件【可能有残余】
在上一篇文章中,大家可以知道:neo4j
中一个数据库就对应着两个文件夹,那么,非常简单暴力的操作方式就是:直接删除这两个文件夹。路径分别在:
- 一个在
/data/databases/
中 - 另外一个在
/data/transactions/
中。
当然,再删除之前,大家一定要想好自己在做什么,世界上没有卖后悔药的。而且删除之后,在browser
里面,还是能看到对应的数据库实例的名字的。如果删除的是neo4j
还可以,如果是neo4j2
/neo4j3
之类的话,就看着列表有些不舒服了。
方案三:直接删除整个/data/
目录【推倒重来】【推荐】
更加推荐更加野蛮的方式是:删除整个/data/
目录,一切推倒重来。如果把/data/
目录直接删除的话(里面还有system
实例),整个neo4j
会直接重建数据库,所有的配置包括用户名密码等,都是全部还原的。
如果/data/
目录无法删除的话,可能需要停止一下neo4j
服务。
注意,一定要删除/data/
目录,而不是/data/databases/
目录。否则,会导致无法启动neo4j
。显示错误信息:
An illegal reflective access operation has occurred
本方案虽然暴力,但是确实治标又治本。而且看了官方issue
里面的相关讨论,看上去官方并不想解决这个问题,默许大家物理删库重来。如果您有更加完美的方案,欢迎留言给苏南大叔。谢谢。
参考文献
综述
整体总结来说的话,如果仅仅是重新初始化同一组数据,关系属性等没变的话,就match (n) detach delete n
就可以了。如果不是同一组数据了,那么,最好的方法就是物理删除db
目录了。
在折腾neo4j
的过程中,就是要反复尝试,才会有收获。反复尝试的过程中,就需要不断的备份还原数据,对数据做各种实验。那么,这就是本文的主要应用场景了。
更多neo4j
的文章,请点击苏南大叔的博客:
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。