В Neo4j v4.0 библиотека Graph Data Science Library: почему Native Projection лучше, чем Cypher Projection с точки зрения производительности?
Документация Создание графиков в каталоге утверждает такое преимущество производительности при использовании Native Projection по сравнению с Cypher Projection, но не дает подробных объяснений.
Собственная проекция
Обеспечивает наилучшую производительность...Cypher projection
Более гибкий, выразительный подход с меньшим упором на производительность.
Насколько я понимаю, все прогнозы в конечном итоге будут:
Проекции графиков полностью хранятся в памяти с использованием сжатых структур данных, оптимизированных для операций поиска топологии и свойств.
Так почему же прирост производительности?
Кроме того, предполагаемая полученная производительность предназначена для загрузки (материализации) прогнозируемого графа или более поздней обработки, например, с помощью алгоритма PageRank?
1 ответ
Вы правы, все прогнозы полностью хранятся в памяти. Разница между проекцией шифра и собственной проекцией заключается в том, насколько быстро мы можем сохранить или материализовать проецируемый граф. Насколько мне известно, собственная проекция использует внутренний API Neo4j, который ускоряет загрузку графа, но ограничивается только указанием меток узлов и типов отношений. Проекция Cypher, с другой стороны, поддерживает все функции cypher и может использоваться для гибкой фильтрации подграфа, который мы хотим спроецировать. Мы также можем спроектировать виртуальный граф. Очень распространенная проекция виртуального графа - это проецирование двудольного графа как однодольного графа с использованием только цифровой проекции. Однако вы должны понимать, что чем сложнее ваши шифровальные запросы, тем медленнее будет проекция графа.И даже простое проецирование метки одного узла и типа взаимосвязи будет происходить медленнее при проецировании шифра, чем при собственном проецировании. Но я бы не стал сильно беспокоиться об этом, пока ваш граф не станет больше, чем 10 миллионов узлов и отношений.
После того, как граф материализован в памяти, время выполнения алгоритмов должно быть одинаковым, независимо от алгоритма, проецируемого с помощью цифровой или собственной проекции.