#neo4j #graph-databases
#neo4j #графические базы данных
Вопрос:
Я запускаю два разных сервера 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
, это не сбрасывает этот счетчик. Единственный способ, который я нашел для его сброса, — перезапустить сервер, что не совсем практично.
Я думаю, что самым простым способом решить мою проблему было бы создать скрипт, который стирает все числа, которым предшествует _ , но не будет ли это в очень специфических ситуациях генерировать ложные срабатывания? Например, если запросы были очень похожи и в том же порядке, но обновляли разные узлы.
У кого-нибудь есть альтернатива получше? Может быть, команда для сброса этого счетчика узлов?
Ответ №1:
В итоге я использовал регулярные выражения в 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