Когда следует использовать предполагаемые отношения и узлы вместо явных? - PullRequest
0 голосов
/ 03 августа 2020

Я искал, как использовать временные отношения в Neo4j, когда я натолкнулся на этот вопрос: Cypher temp Relations и комментарий под ним заставил меня задуматься, когда их следует использовать, и поскольку никто не спорил с ним , Я подумал, что подниму это здесь.

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

Для более конкретного c примера, допустим, у нас есть надежный рецепт торта, в состав которого входит сахар. Сахар - вот что делает торт сладким.

А теперь представьте вариант использования, в котором мне не нравятся сладкие пироги, поэтому я хочу получить все ингредиенты рецепта, которые делают торт сладким, и, возможно, удалить их или найти альтернативы.

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

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

1 Ответ

0 голосов
/ 03 августа 2020

Мне кажется, что единственный допустимый сценарий для создания избыточных «ярлыков» отношений следующий:

  • Ваш вариант использования имеет жесткие временные ограничения (например, среднее время запроса должно быть меньше 200 мс) , но ваш запрос neo4j - несмотря на оптимизацию - превышает это ограничение, и вы убедились, что добавление «ярлыков» отношений действительно сделает время ответа приемлемым .

Вы должны знать, что добавление избыточных «сокращенных» отношений сопряжено с собственными издержками:

  • Запросы, которые изменяют БД должны будут быть более сложным (для изменения избыточных отношений), а также медленнее.
  • Вам всегда придется добавлять избыточные отношения - даже если на самом деле вам никогда не понадобятся некоторые (большинство?) из них.
  • Если вы хотите сделать одновременных обновлений в БД, шансы, что вы можете потерять некоторые обновления и внести несоответствия в БД, увеличатся - это означает, что вам придется работать еще усерднее, чтобы избежать несоответствий.

ПРИМЕЧАНИЕ. В целях визуализации вы можете использовать виртуальные узлы и отношения , которые являются временными, а не фактически хранится в БД.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...