2014-01-20 2 views
0

Я создаю узлы Город со свойствами Имя и идентификатор. Узел узла может быть проиндексирован на Id.I нужен уникальный узел.Neo4j Cypher Unique Constrain vs Indexing

Теперь, когда вы заполняете базу данных, я хочу получить узел «Город», если он есть, иначе я хочу создать узел «Город».

Каков наилучший способ сделать это?

Создайте механизм выполнения Cypher и уникальное ограничение. И затем используйте MERGE для создания уникального узла.

Или что-то вроде

Check if the City with that id is present **Match 
START n=node:City(id = { id }) RETURN n** 

if n==null Create the Node 

Что быстро? Что делать, если я не индексирует город?

ответ

0

Cypher безопасен, так как он принимает правильные замки.

Версия Java, вероятно, будет немного быстрее, но вы должны сами создать блокировки записи для одного элемента root-lock, чтобы убедиться, что в любом сценарии более одного потока обращается к этому коду/данным.

Без индекса вы должны отсканировать всю базу данных, чтобы проверить наличие дубликатов.

+0

Предположим, что я проиндексировал идентификаторы. Тогда какой из них будет лучшим? Первый или второй? – Atul

0

использовать данные в http://docs.neo4j.org/chunked/stable/query-merge.html

MERGE (aCity:CITY {Id: '1', Name: 'aName') return aCity; 

это будет только создать узел, если он не существует. Если узел уже существует, он возвращает существующий узел.

ПРИМЕЧАНИЕ. Если имя написано по-разному, новый узел будет создан, даже если Идентификатор совпадает с существующим узлом (выполняется полное совпадение всех полей). Если это не функциональность, которую вы хотите, вам необходимо использовать функциональность ON MATCH, описанную в приведенной выше ссылке, и установить уникальное ограничение на Id

+0

Но похоже, что поиск подходящего узла займет много времени? Это хороший способ, если у меня будет большая база данных? – Atul

+0

Обычно с меткой будет автоматическая индексация, поэтому он сразу же найдет узел. Если вы хотите быть более конкретным, вы можете выполнить 'create index on: CITY (Id)'. Это обеспечило бы, что поле Id используется для поиска узла. – joe