Правильный дизайн схемы Neo4j SDN5 для производительности - @RelationshipEntity vs @NodeEntity
У меня есть следующие сущности узла SDN5:
@NodeEntity
public class Decision {
@Index(unique = true)
private Long id;
}
@NodeEntity
public class Characteristic{
@Index(unique = true)
private Long id;
}
В соответствии с потребностями моего бизнеса, я могу иметь сотни тысяч Decision
и десятки или сотни Characteristic
узлы.
Мне также нужно разместить значение на каждом Decision
для каждого Characteristic
узлы. В некоторых случаях я могу иметь несколько значений (одинаковых типов) между Decision
и `Характеристика.
Я вижу 2 возможных пути, как это может быть достигнуто:
1. Место value
собственность в @RelationshipEntity
между Decision
а также Characteristic. In case of multiple values(of the same types) between the same
Решениеand
Характеристика value
свойство будет содержать массив.
2. Ввести новый Value
@NodeEntity
и добавить два @Relationship
за Decision
а также Characteristic. In case of multiple values(of the same types) between the same
Решениеand
Характеристика - необходимое количество отдельных Value
узлы будут созданы.
Мой самый большой критерий - это выполнение запросов в реальном времени по запросу пользователя - фильтрация Decisions
по значениям на Characteristics
,
Принимая это во внимание - какой путь выбрать для создания схемы описанной системы - 1
или же 2
?
Я знаю что свойства @RelationshipEntity
не поддерживает индексы схемы (имитация этого поведения может быть добавлена с помощью ручного индекса APOC по свойствам отношений). С другой стороны, @NodeEntity
поддерживает индексы схемы для свойств, но добавление дополнительного узла Value увеличивает количество связей для хода во время запроса.
Кроме того, в случае нескольких значений между одинаковыми Decision
а также Characteristic in case of the solution with
@RelationshipEntityproperty must be represented as array property on
@ RelationshipEntity`, и я не уверен, как индексировать массивы там..
Посоветуйте, пожалуйста, как правильно спроектировать такую схему и какой путь выбрать.