web-dev-qa-db-ja.com

Neo4jまたはGraphX / Giraph何を選択しますか?

グラフの処理方法とツールへの旅を始めました。基本的に、ページランク、クラスタリング係数、三角形の数、直径、接続性などのいくつかの標準的なメトリックをカウントします。以前は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はそれほど時間を節約できないことを理解しました。

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

18
Roman

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

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


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

結論:Neo4jと GraphXの両方を統合するのが簡単なので、ハイブリッドの組み合わせを使用することを常にお勧めします。

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

20

GraphXは、グラフ形式で表すことができる(そしてそれが優れている)データのリアルタイム処理フレームワークです。 GraphXを使用すると、大量の処理能力(RAMおよびCPUの両方)を必要とするさまざまなアルゴリズムを使用できます。neo4jを使用すると、そのデータを(確実に)永続化および更新できます。これは私が行うことです。提案する。

@kennybastaniがその分野でかなり興味深い進歩を遂げたことは確かですが、彼の mazerunner ソリューションをご覧ください。 Dockerイメージとしても出荷されているので、スティックでそれをつついて、気に入ったかどうかを自分で確認できます。

このイメージは、Apache Sparkでコンテナーをデプロイし、GraphXを使用して、Neo4jからエクスポートされたサブグラフに対してETLグラフ分析を実行します。分析の結果は、Neo4jデータベースのデータに適用されます。

6
tkroman

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

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

6
Xinh Huynh