在neo4j-shell的转储上重置节点计数器

时间:2016-10-21 15:35:57

标签: neo4j graph-databases

我正在运行两个不同的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清除它时,它不会重置此计数器。我发现重置它的唯一方法是重新启动服务器,这是不切实际的。

我想解决我的问题最简单的方法是制作一个脚本来删除前面带有_的所有数字,但是在非常特殊的情况下,它会产生误报吗?就像查询非常相似且顺序相同但更新了不同的节点一样。

有没有人有更好的选择?也许是重置此节点计数器的命令?

1 个答案:

答案 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