Я бегу в эту стену относительно двунаправленных отношений.Как я могу уменьшить двунаправленные отношения в генеалогическом древе в Neo4j?
Скажем, я пытаюсь создать граф, представляющий семейное древо. Проблема в том, что:
* Тимми может быть братом Сьюзи, но
* Сьюзи не может быть братом Тимми.
Таким образом, возникает необходимость смоделировать это в 2-х направлениях:
(Конечно, технически я мог бы сказать SIBLING_TO и оставить только один край ... что я не уверен, что словарный запас когда я пытаюсь подключить бабушку к внуку.)
Когда все сказано и сделано, я уверен, что нет никакого способа обойти тот факт, что направление имеет значение в этом примере.
Я читал об этом blog post, в отношении общих ошибок Neo4j. Автор утверждает, что эта двунаправленность не является наиболее эффективным способом моделирования данных в Neo4j, и ее следует избегать.
И я согласен. Я создал набор из двух семей:
и я обнаружил, что многие запросы, которые я пытался запустить, шли очень медленно. Это связано с тем, что «все связано со всеми» природой графика, по крайней мере, внутри каждого соответствующего семейства.
Мой вопрос:
1) Правильно ли я говорю, что двунаправленность не идеальна?
2) Если это так, то мой пример генеалогического древа, представленного каким-либо другим способом ... и что такое «лучшая практика» во многих ситуациях, когда может возникнуть моя проблема?
3) Если невозможно представить семейное древо иным способом, технически ли возможно писать запросы каким-либо образом, которые затрагивают проблему 1)?
Спасибо, что прочитали это и свои мысли.
двунаправленные ссылки одного и того же имени края являются избыточными и не увеличивают стоимость , брат-к-и-сестре, чтобы передать некоторую информацию, хотя это можно было бы вывести из собственности. a (ребенок) - [: PARENT] -> (родительское) отношение дает вам отношения между родителями и детьми и получает от вас все биологические семейные отношения, и вы можете использовать его для каждого поколения родителей/детей. Шаг детей был бы другим делом. –