1

Можно ли создать самореферентные узлы в neo4j? Мне нужно использовать его в большой среде данных, поэтому производительность действительно имеет значение. Я нашел пример here, но ему нужно знать больше об этом. Как правило, какой из них лучше? использовать самонастраивающиеся узлы или разбить их на отдельные узлы с разными метками и отношениями? Моим сценарием является создание групп тегов электронной торговли и тегов. TAG_GROUP имеет TAG, это ясно. Однако некоторые теги могут иметь subtags. Таким образом, для этого могут быть 2 решения:Самореферентные узлы в neo4j

1) Чтобы использовать самореферентный тег TAG- [имеет] -TAG с некоторыми свойствами, такими как {parentID, isSubTag, ...}, хорошо, что я может пройти более одного уровня субтема. Однако я не уверен, как будет работать.

2) Для использования TAH- [имеет] -SUB_TAG. Ну, может быть, это проще и легче понять. Но что, если SUB_TAG имеет сам тег SUB_SUB?

Любая помощь будет оценена по достоинству.

PSI будет использовать Neo4j 3.0.1 автономного сервер и Spring-Data-Neo4j 4.1.1

+0

Я не уверен, что этот вопрос хорошо подходит для сайта, так как нет ни одного ответа. Я бы рекомендовал использовать подход, который является самым чистым и наиболее подходящим для вашей модели данных, только заботясь о производительности, если у вас есть проблемы на практике. Я не могу понять, почему два подхода, которые вы описали, будут выполняться по-разному; саморегуляция или нет, не имеет значения. – Mikesname

ответ

2

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

Понятие родителя/ребенка должно выполняться только с отношениями, не требующими свойств.

(Tag)-[:CHILD]->(Tag)-[:CHILD]->(Tag) 

Я предполагаю, что вы бы продукты с соответствующими тегами, тег может затем tags продукт:

(Tag)-[:TAGS]->(Product) 

найти связанный тег для продукта так же легко, как:

MATCH (product:Product {id: 1}) 
OPTIONAL MATCH (product)<-[:TAGS]-(tag) 
RETURN product, collect(tags) as tag 

OPTIONAL MATCH принимает во внимание продукты, не имеющие меток, не нарушая запрос

Если вы хотите полную иерархию тегов в теге мечения продукт

MATCH (product:Product {id: 1}) 
OPTIONAL MATCH (product)<-[:TAGS]-()<-[:CHILD*0..]-(tag) 
RETURN product, collect(tag) as tags 

Здесь 0, принимая во внимание тот случай, когда метки не имеют родителей и встраивать () в tags коллекции.

Я предлагаю вам следующее чтение для деталей моделирования и Cypher, я уверен, что кто-то может добавить ответ для стороны SDN этого.

http://graphaware.com/neo4j/2013/10/11/neo4j-bidirectional-relationships.html

http://graphaware.com/graphaware/2015/05/19/neo4j-cypher-variable-length-relationships-by-example.html

+0

Спасибо, Кристофер. (Tag) - [: CHILD] -> (Tag) - [: CHILD] -> (тег) - это именно тот случай, который мне нужно уточнить. Ссылки BTW были очень полезны! Спасибо за это ! – Lina

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