我正在运行两个不同的Neo4j服务器,并以相同的顺序在它们上运行相同的查询。
我想检查两个数据库是否等效,为此,我正在生成整个数据库的转储(并且我确实意识到这不是大型数据库的真正替代品),bin/neo4j-shell -c "dump" > /home/my_user/dump.txt
并且他们将生成的md5哈希值进行了比较md5sum dump.txt
。
生成的dump.txt
文件看起来几乎相同,除了用于标识节点的变量有时不同之外,这些变量当然会为每个文件生成完全不同的哈希。例子:
dump.txt#1
begin
commit
begin
create (_6:`Person` {`name`:"Arthur", `title`:"King"})
create (_7:`Person` {`name`:"Saladin", `title`:"Sultan"})
create (_8:`Army` {`name`:"Saxon army"})
create (_6)-[:`FIGHTS_AGAINST`]->(_8)
create (_7)-[:`LEADS`]->(_8)
;
commit
dump.txt#2
begin
commit
begin
create (_7:`Person` {`name`:"Arthur", `title`:"King"})
create (_8:`Person` {`name`:"Saladin", `title`:"Sultan"})
create (_9:`Army` {`name`:"Saxon army"})
create (_7)-[:`FIGHTS_AGAINST`]->(_9)
create (_8)-[:`LEADS`]->(_9)
;
commit
我猜现在它可以根据数据库到目前为止拥有的节点数来工作,而当我使用MATCH (n) DETACH DELETE n
它进行清理时,它不会重置此计数器。我发现重置它的唯一方法是通过重新启动服务器,这并不完全实用。
我猜想解决问题的最简单方法是编写一个脚本,以删除所有以_开头的数字,但是在非常特殊的情况下,它不会产生假阳性吗?就像查询的位置非常相似且顺序相同但更新了不同的节点一样。
有谁有更好的选择?也许是一个命令来重置此节点计数器?
最终在Bash上使用正则表达式来达到从文件中删除所有节点标识符的预期结果。
cat dump.txt | sed s/\(_[0-9]*/\(/g > dump_new.txt
从dump.txt
这样一个:
begin
commit
begin
create (_18:`Person` {`name`:"Arthur", `title`:"King"})
create (_19:`Person` {`name`:"Saladin", `title`:"Sultan"})
create (_20:`Army` {`name`:"Saxon army"})
create (_18)-[:`FIGHTS_AGAINST`]->(_20)
create (_19)-[:`LEADS`]->(_20)
;
commit
生成dump_new.txt
这样的一个:
begin
commit
begin
create (:`Person` {`name`:"Arthur", `title`:"King"})
create (:`Person` {`name`:"Saladin", `title`:"Sultan"})
create (:`Army` {`name`:"Saxon army"})
create ()-[:`FIGHTS_AGAINST`]->()
create ()-[:`LEADS`]->()
;
commit
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句