Автоинкрементный идентификатор Neo4j для извлечения элементов в порядке вставки - PullRequest
0 голосов
/ 29 апреля 2019

Недавно я экспериментирую с Neo4j. Мне нравится идея, но я сталкиваюсь с проблемой, с которой я никогда не сталкивался с реляционными базами данных. Я хочу выполнить эти вставки, а затем вернуть их точно в порядке вставки.
Вставить элементы:

create(p1:Person {name:"Marc"})
create(p2:Person {name:"John"})
create(p3:Person {name:"Paul"})
create(p4:Person {name:"Steve"})
create(p5:Person {name:"Andrew"})
create(p6:Person {name:"Alice"})
create(p7:Person {name:"Bob"})

Пока их вернуть:

match(p:Person) return p order by id(p)

Я получаю элементы в следующем порядке:

Paul
Andrew
Marc
John
Steve
Alice
Bob

Замечу, что эти элементы не возвращаются в соответствии с порядком вставки запроса (через функцию id).

На самом деле идентификаторы моих элементов следующие:
Марк: 18221
Джон: 18222
Пол: 18208
Стив: 18223
Андрей: 18209
Алиса: 18224
Боб: 18225

Как работает функция Neo4j id? Я читал, что он генерирует автоинкрементный идентификатор, но кажется немного странным его механизм. Как вернуть элементы, соответствующие порядку вставки запроса? Я думал о создании атрибута метки времени для каждого узла, но я не думаю, что это лучший выбор

Ответы [ 2 ]

0 голосов
/ 13 мая 2019

Если вы хотите сгенерировать порядковые номера в Neo4j, вам нужно управлять этим самостоятельно, используя стратегию, которая лучше всего работает в вашем приложении.

В нашем случае мы поддерживаем порядковые номера в узлах пары ключ / значение, гдеОбласть действия - это имя приложения, присвоенное диапазону порядковых номеров, а значение - последний использованный порядковый номер.Когда мы генерируем узел заданного типа, например Product, мы увеличиваем порядковый номер и присваиваем его нашему новому узлу.

MERGE (n:Sequence {Scope: 'Product'})
SET n.Value = COALESCE(n.Value, 0) + 1
WITH n.Value AS seq
CREATE (product:Product)
SET product.UniqueId = seq

С этим вы можете создать столько порядковых номеров, сколько вам нужно, простосоздание узлов последовательности с уникальными именами областей действия.

Дополнительные примеры и тесты см. в проекте AutoInc.Neo4j https://github.com/neildobson-au/AutoInc/blob/master/src/AutoInc.Neo4j/Neo4jUniqueIdGenerator.cs

0 голосов
/ 29 апреля 2019

Идентификатор Neo4j поддерживается внутренне, от чего ваш бизнес-код не должен зависеть.
Обычно он автоматически увеличивается, но если есть delete operation, вы можете повторно использовать удаленный идентификатор в соответствии с Reuse Policy Neo4jСервер.

...