在 neo4j-shell 的转储上重置节点计数器
Reset node counter on neo4j-shell's dump
我 运行 两个不同的 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
清理它时它不会重置这个计数器。我发现重置它的唯一方法是重新启动服务器,这不太实用。
我想解决我的问题的最简单方法是编写一个脚本来擦除所有以 _ 开头的数字,但在非常特殊的情况下,它不会产生误报吗?就像查询非常相似且顺序相同但更新了不同的节点一样。
有没有人有更好的选择?也许是重置此节点计数器的命令?
最终在 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
我 运行 两个不同的 Neo4j 服务器和 运行 以相同的顺序对它们进行相同的查询。
我想检查两个数据库是否相同,为此我生成了整个数据库的转储(我确实意识到这不是大型数据库的真正替代品) bin/neo4j-shell -c "dump" > /home/my_user/dump.txt
和他们比较用 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