2015-04-03 1 views
10

Насколько я понимаю, идентификаторы, данные Neo4j (ID(node)), нестабильны и ведут себя как номера строк в SQL. Поскольку идентификаторы в основном используются для отношений в SQL, и они легко смоделированы в Neo4j, для идентификаторов, похоже, не так много, но тогда как вы решаете поиск определенных узлов? Наличие REST API, который должен иметь уникальные маршруты для каждого узла (например, /api/concept/23), кажется довольно стандартным случаем для веб-приложений. Но, несмотря на это быть настолько фундаментальным, единственным реальным способом я нашел, были либо с помощьюAuto increment property in Neo4j

  • специальных языковых структур
  • в ненагруженном узел, который поддерживает приращения:
// get unique id 
MERGE (id:UniqueId{name:'Person'}) 
ON CREATE SET id.count = 1 
ON MATCH SET id.count = id.count + 1 
WITH id.count AS uid 
// create Person node 
CREATE (p:Person{id:uid,firstName:'Gabriel',lastName:'Smith'}) 
RETURN p AS person 

Источник:http://www.neo4j.org/graphgist?8012859

Действительно ли нет более простого способа, а если нет, i Есть ли для этого особая причина? Является ли мой подход анти-шаблоном в контексте Neo4j?

ответ

7

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

И действительно, их использование для внешнего использования не рекомендуется. Я знаю, что в Neo есть некоторые намерения реализовать такую ​​функцию.

В основном люди, как правило, используют два решения для этого:

  1. Использование генератора UUID на уровне приложений, как для PHP: https://packagist.org/packages/rhumsaa/uuid и добавить ярлык/UUID уникальное ограничение на всех узлах.

  2. Использование очень горсть Neo4j плагин как https://github.com/graphaware/neo4j-uuid который добавит UUID свойства на лету, поэтому удалить вас бремя справиться с этим на уровне приложений и легче управлять сохранением состояния вашего узла объектов

+2

Это не отвечает на вопрос. Auto increment id может использоваться для сортировки объектов в порядке их создания, что невозможно сделать с uuid's –

+2

. В какой части вопроса ответит ваш комментарий? –

+0

Я полагаю, что добавление отметки времени unix или какого-то префикса даты-времени в случайную уникальную строку устранит проблему сортировки. – Guy

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

  • Нет связанных вопросов^_^