Neo4j или GraphX /Giraph, что выбрать?
Просто начал мою экскурсию по методам и инструментам обработки графов. Что мы в основном делаем - подсчитываем некоторые стандартные показатели, такие как pagerank, коэффициент кластеризации, количество треугольников, диаметр, связь и т.д. В прошлом был доволен Octave, но когда мы начали работать с графиками, допустив, что 10 ^ 9 узлов/ребер мы застряли,
Таким образом, возможные решения могут быть распределены облаком с помощью Hadoop/Giraph, Spark/GraphX, Neo4j поверх них и т.д.
Но так как я новичок, может кто-то посоветовать, что на самом деле выбрать? Я не понял, когда использовать Spark/GraphX и когда Neo4j? Прямо сейчас я рассматриваю Spark/GraphX, поскольку у него больше синтаксиса Python, а у neo4j собственный Cypher. Визуализация в neo4j классная, но не полезная в таких больших масштабах. Я не понимаю, есть ли причина использовать дополнительный уровень программного обеспечения (neo4j) или просто использовать Spark/GraphX? Поскольку я понял, что neo4j не сохранит столько времени, как если бы мы работали с чистым хауопом против Giraph или GraphX или Hive.
Спасибо.
Ответы
Ответ 1
Neo4J: это графическая база данных, которая помогает идентифицировать отношения и данные сущностей, как правило, с диска. В этой ссылке дается популярность и выбор. Но когда ему нужно обработать очень большие наборы данных и обработку в реальном времени для получения графических результатов/представлений, которые необходимо масштабировать по горизонтали. В этом случае сочетание Neo4J с Apache Spark даст значительные преимущества в производительности таким образом, что Spark будет использоваться в качестве решения для вычисления внешнего графика.
Mazerunner - это распределенная платформа обработки графиков, которая расширяет Neo4J. Он использует брокер сообщений для обработки распределенных заданий обработки графа к модулю Apache Spark GraphX.
GraphX: GraphX - это новый компонент Spark для графиков и графика-параллельного вычисления. На высоком уровне GraphX расширяет Spark RDD, введя новую абстракцию Графа: направленный мультиграф со свойствами, прикрепленными к каждой вершине и краю. Он поддерживает несколько алгоритмов Graph.
Вывод: всегда рекомендуется использовать гибридную комбинацию Neo4j с GraphX, так как они легче интегрируются.
Для обработки и обработки больших объемов данных в реальном времени используйте neo4j с GraphX.
Для простой настойчивости и для отображения отношения сущности для простого графического представления отображения используйте автономный neo4j.
Ответ 2
GraphX является скорее платформой обработки в реальном времени для данных, которые могут быть (и лучше, когда) представлены в виде графика. С помощью GraphX вы можете использовать различные алгоритмы, требующие больших вычислительных мощностей (как ОЗУ, так и ЦП), а с помощью neo4j вы можете (надежно) сохранять и обновлять эти данные. Это то, что я предлагаю.
Я точно знаю, что @kennybastani сделал некоторые довольно интересные достижения в этой области, вы можете взглянуть на его решение mazerunner. Он также поставляется как изображение докеров, так что вы можете выталкивать его палкой и сами выяснить, нравится вам это или нет.
Это изображение развертывает контейнер с Apache Spark и использует GraphX для выполнения анализа ETL-графика на подграфах, экспортированных из Neo4j. Результаты анализа применяются к данным в базе данных Neo4j.
Ответ 3
Neo4j: Я не использовал его, но я думаю, что он выполняет все вычисления графа (например, pagerank) на одной машине. Будет ли это способностью обрабатывать ваш набор данных? Это может зависеть от того, помещается ли весь ваш граф в память, а если нет, то насколько эффективно он обрабатывает данные с диска. Это может поразить те же проблемы, с которыми вы столкнулись с Octave.
Spark GraphX: GraphX разбивает данные графа (вершины и ребра) на кластер машин. Это дает вам горизонтальную масштабируемость и параллелизм при вычислении. Некоторые вещи, которые вы, возможно, захотите рассмотреть: у него только сейчас есть Scala API (пока еще нет Python). Он выполняет функцию PageRank, треугольник и подключенные компоненты, но вам может потребоваться реализовать коэффициент и диаметр кластеров самостоятельно, используя предоставленный API-интерфейс (например, pregel). Руководство по программированию содержит список поддерживаемых алгоритмов: https://spark.apache.org/docs/latest/graphx-programming-guide.html