Мне интересно, как лучше (с точки зрения производительности) моделировать источники данных в Neo4j.
Рассмотрим следующий сценарий: Мы объединяем разные наборы данных о музыкальной области в одном графике.Данные могут варьироваться от разных исполнителей и стилей до информации о продажах.Важно хранить источник этой информации.Например, есть ли у нас данные из общедоступного источника, такого как DBpedia или из других частных источников?Чтобы иметь возможность выполнять запросы только для определенных наборов данных, мы должны включить источник для каждого узла (и оптимальным образом для каждого отношения).Конечно, один узел или отношение может иметь несколько источников.
Существует три простых решения:
Добавить свойство источника для каждого узла и отношения;индексировать это свойство и использовать его в запросе шифра.Например:
MATCH (n: Artist) WHERE n.source = 'DBpedia' возвращает n
Добавить источник в качестве метки для каждого узла и тип для каждого отношения(можем ли мы иметь несколько типов на одно отношение?).Например:
CREATE (n: Artist: DBpediaSource: CustomerSource)
Создайте отдельный узел для каждого источника и свяжите все остальные узлы с соответствующим узлом источника.Например:
MATCH (n: Artist) - [: HASSOURCE] - (: DBpediaSource) return n
Конечно, для этих примеров решение не имеет значения в терминахпроизводительности.Однако использование источника в более сложных запросах и на более крупном графике (скажем, с несколькими миллионами узлов и отношений) способ, которым мы моделируем эту задачу, окажет значительное влияние на производительность.
Еще один сложный пример, гдеИсточники также необходимы генерация «подграфа».Мы хотим извлечь все узлы и отношения из одного или нескольких источников и, например, экспортировать это в новый экземпляр Neo4j или ограничить некоторые графические алгоритмы, такие как PageRang, этим «подграфом», не создавая отдельный экземпляр Neo4j.
Есть ли у кого-то в сообществе опыт работы с таким случаем?Каков наилучший способ смоделировать это с точки зрения производительности?Есть ли другие решения?
Спасибо за помощь.