我正在运行两个不同的Neo4j服务器,并以相同的顺序对它们运行相同的查询。
我想检查两个数据库是否相同,为此我用bin/neo4j-shell -c "dump" > /home/my_user/dump.txt
生成整个数据库的转储(我确实认为这不是大数据库的真正替代)他们将使用md5sum dump.txt
生成的md5哈希值进行比较。
生成的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
清除它时,它不会重置此计数器。我发现重置它的唯一方法是重新启动服务器,这是不切实际的。
我想解决我的问题最简单的方法是制作一个脚本来删除前面带有_的所有数字,但是在非常特殊的情况下,它会产生误报吗?就像查询非常相似且顺序相同但更新了不同的节点一样。
有没有人有更好的选择?也许是重置此节点计数器的命令?
答案 0 :(得分:0)
在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