12

文書データベースがグラフデータベースとしてどのように機能するかを誰か説明できますか?

ArangoDB と Neo4j の違いは何ですか?

4

1 に答える 1

12

免責事項: 私はコア開発者の 1 人である ArangoDB の Max です。

まず第一に、これおよびその他の関連する質問についてのより長い議論は、私の記事「データ モデリングにおけるグラフ - 皇帝は裸ですか? 」で見つけることができます。、しかし、ここでは両方の質問に簡潔に答えようとします.

(1) ドキュメント ストアにグラフを格納するのは比較的簡単です (リレーショナル データベースの場合と同様)。たとえば、各頂点のドキュメントを「頂点コレクション」に格納し、各エッジのドキュメントを「頂点コレクション」に格納するだけです。エッジコレクション」。各エッジがどの頂点から来て、どの頂点に行くのかを確実に保存する必要があるだけです。ArangoDB では、このためにエッジ ドキュメントで _from および _to 属性を使用します。

ただし、グラフ データベースの重要な機能は、グラフに関するクエリに効率的に答える必要があることです。グラフの典型的なクエリは、(a) 「グラフ内の頂点の近傍は?」です。または (b) 「グラフの頂点 A から頂点 B への最短経路は?」または(c)「エッジをたどることによって頂点Aから到達できるすべての頂点を教えてください」。(a) 単純にエッジ コレクションの適切なインデックスが必要なのに対し、(b) と (c) はグラフ内のアプリオリに未知数のステップを含みます。したがって、(b) と (c) は、SQL のような従来のデータベース クエリ言語では効率的に実行できません。単純に、クライアントとサーバー間の大量の通信が必要になるか、少なくとも可変数の非常に複雑な式が必要になるためです。参加します。(b) や (c) のようなクエリを「グラフ」と呼びます。

したがって、「ドキュメント ストアをグラフ データベースにするにはどうすればよいでしょうか?」に対する私の簡単な回答です。is: 上記のようにグラフを保存し、データ ストアのクエリ言語からアクセスできるデータベース サーバーにグラフ クエリを実装します。原則として、リレーショナル データベースと SQL へのかなりの拡張機能を使用しても同じことができます。

ArangoDB を使用して、ドキュメント、グラフ、およびキー/値機能を 1 つの一貫したクエリ言語に組み合わせることができました。したがって、ArangoDB はこれら 3 つのデータ モデルをシームレスに組み合わせているため、「マルチモデル データベース」と呼んでいます。1 つのクエリでデータ モデルを混在させることもできます。

これは、明らかに少し偏った質問 (2) に対する私の答えにつながります。

上記の意味で分散マルチモデル データベースである ArangoDB と比較すると、Neo4j は古典的なグラフ データベースです。グラフを保存し、「グラフ クエリ」でクエリを実行できるようにし、そのために最適化されたストレージとクエリ エンジンを備えています。Neo4j は、組み込みのクエリ言語暗号を使用したパスの照合に特に優れています。頂点とエッジにプロパティをアタッチすることはできますが、フル機能のドキュメント ストアではありません。複数のセカンダリ インデックスを使用してドキュメント クエリを処理するように最適化されておらず、結合も行いません。なお、Neo4jは配布されていません。

Neo4j は Java で記述され、ArangoDB は C++ で記述され、JavaScript 拡張機能を実行するために Google の V8 が組み込まれています。

パフォーマンスの比較については、この投稿を参照してください。

于 2015-06-15T19:14:12.287 に答える