Neo4j Design: собственность vs узел и взаимосвязь

У меня есть тип узла, у которого есть строковое свойство, которое очень часто будет иметь одно и то же значение. И т.д. Миллионы узлов только с 5 вариантами этого строкового значения. Я буду искать в этой собственности.

Мой вопрос был бы в том, что лучше с точки зрения производительности и памяти: a) Реализуйте его как свойство узла и получите много дубликатов (и выполните поиск с использованием WHERE). б) Реализуйте его как 5 дополнительных узлов, где все исходные узлы ссылаются на один из них (и поиск с использованием дополнительного ПОИСКПОЗ).


person Martynas    schedule 18.03.2013    source источник


Ответы (3)


Не зная подробностей, трудно дать общий ответ.

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

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

person Stefan Armbruster    schedule 18.03.2013
comment
Мне очень нравится ваша идея использовать ценность как тип отношений. Затем мне нужен только 1 бесполезный узел без данных, на которые можно было бы указать эти новые отношения. Другой вопрос: возникнут ли проблемы с производительностью при 1 миллионе связей с одним узлом? Я не буду выполнять поиск в этом узле, только в нем. Кроме того, есть ли смысл использовать для этого корневой узел? - person Martynas; 18.03.2013
comment
Пока вы переходите только к этому узлу, нет потери производительности. Если вы пойдете в другую сторону, вам, конечно же, придется просканировать 1 миллион отношений. - person Stefan Armbruster; 18.03.2013
comment
Я бы не рекомендовал использовать корневой узел. Возможно, для этого создайте новый узел, подключенный к корневому узлу. В противном случае вы можете заполнить корневой узел несколькими различными концепциями, что, на мой взгляд, является плохой стратегией моделирования. - person Stefan Armbruster; 18.03.2013

Используйте ярлыки; это сообщение в блоге - хорошее введение в эту новую функцию Neo4j 2.0:

person Eduardo Pareja Tobes    schedule 30.01.2014

Я тоже немного подумал над этой проблемой. В моем случае я должен был представить состояние:

  • НАЧАЛОСЬ
  • В ХОДЕ ВЫПОЛНЕНИЯ
  • ОТПРАВЛЕНО
  • ЗАВЕРШЕННЫЙ

В целом подход Node + Relationship выглядит более привлекательным в том смысле, что каждый раз нужно поддерживать только одну ссылку на взаимосвязь, а не строку свойства, и вам не нужно сканировать дополнительный дополнительный индекс, который должен поддерживаться в свойстве (памяти и производительность интуитивно будет в пользу этого подхода).

Другое преимущество состоит в том, что он легко поддерживает возможность соединения узла с несколькими «специальными узлами». Если вы предвидите ситуацию, когда это должно быть возможно в вашей модели, это лучше, чем использование массива свойств (и поиск с использованием "in").

На практике я обнаружил, что проблема заключалась в том, как каждый раз получать доступ к этим специальным узлам. Либо вы поддерживаете какую-то ссылку на константы, где у вас есть идентификаторы этих специальных узлов, где вы можете сразу перейти к ним в своем операторе START (это то, что мы делаем), либо вам нужно выполнить поиск против свойства специального узла каждый раз (имя, возможно), а затем просматривайте его отношения. Это не лучший вариант для зашифрованных запросов.

person Matt Wielbut    schedule 18.03.2013