web-dev-qa-db-fra.com

Neo4j ou GraphX ​​/ Giraph que choisir?

Je viens de commencer mon excursion sur les méthodes et outils de traitement graphique. Ce que nous faisons essentiellement - compter certaines métriques standard comme le pagerank, le coefficient de clustering, le nombre de triangles, le diamètre, la connectivité, etc. .

Ainsi, les solutions possibles peuvent être distribuées dans le cloud avec Hadoop/Giraph, Spark/GraphX, Neo4j par-dessus, etc.

Mais comme je suis débutant, quelqu'un peut-il me conseiller ce qu'il faut réellement choisir? Je n'ai pas fait la différence quand utiliser Spark/GraphX ​​et quand Neo4j? En ce moment, je considère Spark/GraphX, car il a plus de syntaxe Python, alors que neo4j a son propre Cypher. La visualisation dans neo4j est cool mais pas utile à une si grande échelle. Je ne comprends pas Y a-t-il une raison d'utiliser un niveau de logiciel supplémentaire (neo4j) ou simplement d'utiliser Spark/GraphX? Puisque j'ai compris que neo4j ne gagnerait pas autant de temps comme si nous travaillions avec Hadoop pur contre Giraph ou GraphX ​​ou Hive.

Je vous remercie.

18
Roman

Neo4J: C'est une base de données graphique qui aide à identifier les relations et les données d'entités habituellement à partir du disque. C'est la popularité et le choix est donné dans ce lien . Mais lorsqu'il doit traiter les très grands ensembles de données et le traitement en temps réel pour produire les résultats/représentations graphiques, il doit évoluer horizontalement. Dans ce cas, la combinaison de Neo4J avec Apache Spark produira procurera des avantages de performance significatifs de cette manière Spark servira de solution de calcul de graphe externe).

Mazerunner est une plate-forme de traitement de graphe distribué qui étend Neo4J. Il utilise le courtier de messages pour traiter les tâches de traitement de distribution de graphe vers Apache Spark Module GraphX.


GraphX: GraphX est un nouveau composant dans Spark pour les graphes et les calculs parallèles de graphes) . À un niveau élevé, GraphX ​​étend le RDD Spark en introduisant une nouvelle abstraction Graph: une multigraph dirigée avec des propriétés attachées à chaque sommet et Edge. Il prend en charge plusieurs algorithmes Graph.

Conclusion: Il est toujours recommandé d'utiliser la combinaison hybride de Neo4j avec GraphX ​​car ils sont tous deux plus faciles à intégrer.

Pour le traitement en temps réel et le traitement de grands ensembles de données, utilisez neo4j avec GraphX.
Pour une persistance simple et pour montrer la relation d'entité pour une représentation graphique simple, utilisez neo4j autonome.

20
Praveen Kumar K S

GraphX ​​est plus un cadre de traitement en temps réel pour les données qui peuvent être (et c'est mieux quand) représentées sous forme de graphique. Avec GraphX, vous pouvez utiliser divers algorithmes qui nécessitent de grandes quantités de puissance de traitement (à la fois RAM et CPU), et avec neo4j vous pouvez (de manière fiable) persister et mettre à jour ces données. C'est ce que je suggérer.

Je sais avec certitude que @kennybastani a fait des progrès assez intéressants dans ce domaine, vous pouvez jeter un œil à sa solution mazerunner . Il est également livré sous forme d'image docker, vous pouvez donc le fouiller avec un bâton et savoir par vous-même si vous l'aimez ou non.

Cette image déploie un conteneur avec Apache Spark et utilise GraphX ​​pour effectuer une analyse de graphique ETL sur des sous-graphiques exportés de Neo4j. Les résultats de l'analyse sont appliqués de nouveau aux données de la base de données Neo4j.

6
tkroman

Neo4j: Je ne l'ai pas utilisé, mais je pense qu'il fait tout un calcul de graphe (comme pagerank) sur une seule machine. Serait-il capable de gérer votre ensemble de données? Cela peut dépendre de l’intégralité de votre graphique dans la mémoire et, dans le cas contraire, de son efficacité à traiter les données du disque. Il peut rencontrer les mêmes problèmes que ceux rencontrés avec Octave.

Spark GraphX: GraphX ​​partitionne les données graphiques (sommets et arêtes) sur un cluster de machines. Cela vous offre une évolutivité horizontale et un parallélisme dans le calcul. Certaines choses que vous voudrez peut-être considérer: il n'a qu'une API Scala pour le moment (pas encore Python). Il fait le PageRank, le nombre de triangles et les composants connectés) , mais vous devrez peut-être implémenter vous-même les coefficients de clustering et le diamètre, à l'aide de l'API graphique fournie (par exemple pregel). Le guide de programmation contient une liste d'algorithmes pris en charge: https://spark.Apache.org/docs/ dernier/guide-de-programmation-graphx.html

6
Xinh Huynh