2015-06-30 3 views
1

Я выполняю запросы cypher для создания новых узлов в java.Neo4j Сброс узла ID счетчика

CREATE (п: пользователь {имя: 'луч', электронная почта: @ something.com '}) ВОЗВРАТ п

try (Transaction tx = server.graphDb1.beginTx()) 
     {   
      try 
      { 
       Result result = server.graphDb1.execute(readString);       
         while (result.hasNext()) 
         { 

Проблема у меня есть, что после выполнения

Выполнение это три раза приведет к

п: Узел [0]; n: Узел [1]; n: Узел [2]

В случае успеха сделки все замечательно. В случае отказа транзакции узлы не будут сохранены. Но идентификаторы узлов зарезервированы.

Следующие три запроса приведет к:

п: Узел [3]; n: Узел [4]; n: Узел [5];

У меня есть 6 идентификаторов узлов, но только 3 узла. Есть ли способ сбросить счетчик после сбоя транзакции?

ответ

3

Идентификатор узла (и его механизм назначения) - это полностью внутренняя вещь, которую вы, как пользователь базы данных, вообще не должны волновать. Единственное, что нужно помнить, - не хранить идентификатор узла нигде в сторонней системе.

В зависимости от версии Neo4j неиспользуемые идентификаторы будут повторно использоваться после перезапуска, но не полагаются на эту деталь реализации.

+0

Есть ли проблема с 3 кластерами Neo4j, содержащими данные с разными идентификаторами? Не связаны ли отношения с узлами с помощью идентификаторов? - Не нужно ли сохранять идентификаторы в любом месте, чтобы убедиться, что все 3 кластера получают одни и те же данные? – user2524707

+0

В кластере Neo4j тот же самый узел имеет одинаковый идентификатор для каждого члена кластера. Кластеризация полностью прозрачна для пользователя - это деталь реализации. –

+0

Только когда вы используете режим ha, а не когда я реализую свой собственный кластер – user2524707

Смежные вопросы