21

グラフ処理の方法とツールへの遠足を始めたところです。私たちが基本的に行っていること - ページランク、クラスタリング係数、トライアングル数、直径、接続性などのいくつかの標準メトリックをカウントします。以前は Octave に満足していましたが、10^9 ノード/エッジとしましょう。 .

したがって、可能なソリューションは、Hadoop/Giraph、Spark/GraphX、それらの上に Neo4j などで作成された分散クラウドです。

しかし、私は初心者なので、実際に何を選ぶべきか誰かアドバイスできますか? Spark/GraphX を使用する場合と Neo4j を使用する場合の違いがわかりませんでした。今のところ、Spark/GraphX を検討しています。Python に似た構文が多く、neo4j には独自の Cypher があるためです。neo4j でのビジュアライゼーションはクールですが、このような大規模では役に立ちません。追加レベルのソフトウェア (neo4j) を使用する理由があるのか​​ 、それとも単に Spark/GraphX を使用するのかわかりません。純粋な Hadoop と Giraph、GraphX、または Hive を使用した場合のように、neo4j はそれほど時間を節約できないことを理解していたので。

ありがとうございました。

4

3 に答える 3

23

Neo4J:これは、通常はディスクから関係およびエンティティ データを識別するのに役立つグラフィカル データベースです。その人気と選択肢は、このリンクにあります。しかし、非常に大きなデータセットとリアルタイム処理を処理してグラフィカルな結果/表現を生成する必要がある場合は、水平方向にスケーリングする必要があります。この場合、Neo4J と Apache Spark を組み合わせると、Spark が外部グラフ コンピューティング ソリューションとして機能するように、パフォーマンスが大幅に向上します。

Mazerunnerは、Neo4J を拡張した分散グラフ処理プラットフォームです。Message Broker を使用して、分散グラフ処理ジョブを Apache Spark GraphX モジュールに処理します。


GraphX: GraphXは、グラフおよびグラフ並列計算用の Spark の新しいコンポーネントです。高レベルでは、GraphX は、新しいグラフ抽象化 (各頂点とエッジにアタッチされたプロパティを持つ有向マルチグラフ) を導入することにより、Spark RDD を拡張します。複数のグラフ アルゴリズムをサポートしています。

結論:どちらも統合が容易なため、Neo4j と GraphX のハイブリッドの組み合わせを使用することを常にお勧めします。

リアルタイム処理と大規模なデータセットの処理には、neo4j と GraphX を使用します。
単純な永続化と単純なグラフィカル表示表現のエンティティ関係を表示するには、スタンドアロンの neo4j を使用します。

于 2016-09-27T16:57:38.077 に答える
7

Neo4j: 使用したことはありませんが、1 台のマシンですべてのグラフ計算 (pagerank など) を実行すると思います。それはあなたのデータセットを処理できますか? グラフ全体がメモリに収まるかどうかに依存する場合があり、そうでない場合は、ディスクからのデータをどの程度効率的に処理するかによって異なります。Octave で遭遇したのと同じ問題が発生する可能性があります。

Spark GraphX: GraphX は、マシンのクラスター全体でグラフ データ (頂点とエッジ) を分割します。これにより、水平方向のスケーラビリティと計算の並列性が得られます。あなたが考慮したいかもしれないいくつかのこと: それは現在 Scala API しか持っていません (まだ Python はありません)。PageRank、トライアングル カウント、および連結コンポーネントを実行しますが、提供されているグラフ API (たとえば pregel) を使用して、クラスタリング係数と直径を自分で実装する必要がある場合があります。プログラミング ガイドには、サポートされているアルゴリズムのリストがあります: https://spark.apache.org/docs/latest/graphx-programming-guide.html

于 2015-05-06T18:01:25.563 に答える