Neo4j o GraphX / Giraph ¿qué elegir?
spark-graphx (3)
GraphX es más un marco de procesamiento en tiempo real para los datos que pueden representarse (y es mejor cuando) en forma de gráfico. Con GraphX puede usar varios algoritmos que requieren grandes cantidades de potencia de procesamiento (RAM y CPU), y con neo4j puede (confiablemente) persistir y actualizar esos datos. Esto es lo que sugeriría.
Sé con certeza que @kennybastani ha hecho algunos avances bastante interesantes en esa área, puede echar un vistazo a su solución mazerunner . También se envía como una imagen de acoplador, por lo que puede empujar con un palo y descubrir por sí mismo si te gusta o no.
Esta imagen despliega un contenedor con Apache Spark y usa GraphX para realizar análisis de gráfico ETL en subgrafos exportados desde Neo4j. Los resultados del análisis se aplican nuevamente a los datos en la base de datos Neo4j.
Acabo de comenzar mi excursión para graficar métodos y herramientas de procesamiento. Lo que hacemos básicamente: contar algunas métricas estándar, como el pagerank, el coeficiente de agrupamiento, el recuento de triángulos, el diámetro, la conectividad, etc. En el pasado, estábamos contentos con Octave, pero cuando comenzamos a trabajar con gráficos, digamos 10 ^ 9 nodos / aristas .
Por lo tanto, las posibles soluciones se pueden distribuir en la nube con Hadoop / Giraph, Spark / GraphX, Neo4j encima de ellas, etc.
Pero como soy un principiante, ¿alguien puede aconsejar qué elegir? No me dio la diferencia cuándo usar Spark / GraphX y cuándo Neo4j? En este momento considero Spark / GraphX, ya que tiene más sintaxis similar a Python, mientras que neo4j tiene el propio Cypher. La visualización en neo4j es genial, pero no útil a gran escala. No entiendo ¿hay alguna razón para usar un nivel adicional de software (neo4j) o simplemente usar Spark / GraphX? Desde que entendí, neo4j no ahorrará tanto tiempo como si trabajáramos con hadoop puro versus Giraph o GraphX o Hive.
Gracias.
Neo4j: No lo he usado, pero creo que hace todo el cálculo gráfico (como pagerank) en una sola máquina. ¿Sería eso capaz de manejar su conjunto de datos? Puede depender de si el gráfico completo se adapta a la memoria y, de no ser así, qué tan eficientemente procesa los datos del disco. Puede golpear los mismos problemas que encontraste con Octave.
Spark GraphX: GraphX divide los datos de gráfico (vértices y bordes) en un conjunto de máquinas. Esto le da escalabilidad horizontal y paralelismo en el cálculo. Algunas cosas que quizás desee considerar: solo tiene una API de Scala ahora (no Python todavía). Incluye el PageRank, el recuento de triángulos y los componentes conectados, pero puede que tenga que implementar el coeficiente de agrupamiento y el diámetro usted mismo, utilizando la API gráfica proporcionada (pregel, por ejemplo). La guía de programación tiene una lista de algoritmos admitidos: https://spark.apache.org/docs/latest/graphx-programming-guide.html
Neo4J: es una base de datos gráfica que ayuda a identificar las relaciones y los datos de las entidades usualmente del disco. Es popularidad y la elección se da en este enlace . Pero cuando necesita procesar los grandes conjuntos de datos y el procesamiento en tiempo real para producir los resultados gráficos / representación que necesita para escalar horizontalmente. En este caso, la combinación de Neo4J con Apache Spark brindará importantes beneficios de rendimiento de tal manera que Spark servirá como una solución de cálculo gráfico externa.
Mazerunner es una plataforma de procesamiento de gráficos distribuidos que extiende Neo4J. Utiliza Message Broker para procesar trabajos de procesamiento de gráficos distribuidos en el módulo Apache Spark GraphX.
GraphX: GraphX es un nuevo componente en Spark para gráficos y computación gráfica paralela. En un nivel alto, GraphX amplía el Spark RDD al introducir una nueva abstracción de Gráficos: un multigrafo dirigido con propiedades unidas a cada vértice y borde. Es compatible con múltiples algoritmos de gráficos.
Conclusión: siempre se recomienda utilizar la combinación híbrida de Neo4j con GraphX ya que ambos son más fáciles de integrar.
Para procesar y procesar grandes conjuntos de datos en tiempo real, use neo4j con GraphX.
Para la persistencia simple y para mostrar la relación de entidad para una representación de visualización gráfica simple, use neo4j independiente.