web-dev-qa-db-ja.com

グラフベースのデータベースとオブジェクト指向データベースの違いは何ですか?

グラフベースのデータベース( http://neo4j.org/ )とオブジェクト指向データベース( http://www.db4o.com/ )の違いは何ですか?

50
Gili

私はこれに別の答えをします。オブジェクトデータベースとグラフデータベースは、2つの異なるレベルの抽象化で動作します。

オブジェクトデータベースの主なデータ要素はオブジェクトであり、オブジェクト指向プログラミング言語からそれらを知る方法です。

グラフデータベースの主なデータ要素はノードとエッジです。

オブジェクトデータベースには、自動参照整合性などを備えた2つのものの間の(双方向)エッジの概念がありません。グラフデータベースには、NULLになる可能性のあるポインターの概念がありません。 (もちろん、ハイブリッドを想像することができます。)

スキーマに関しては、オブジェクトデータベースのスキーマは、アプリケーション内のクラスのセットが何であれです。グラフデータベースのスキーマ(たとえば、文字列ラベルの意味の慣例による暗黙的か、 InfoGrid のようにモデルとしての宣言による明示的か)は、アプリケーションから独立しています。これにより、たとえば、スキーマはアプリケーションに依存しないため、オブジェクトデータベースの代わりにグラフデータベースを使用して、同じデータに対して複数のアプリケーションを作成することがはるかに簡単になります。一方、グラフデータベースを使用すると、単純に任意のオブジェクトを取得して永続化することはできません。

仕事ごとに異なるツールだと思います。

38
Johannes Ernst

はい、APIは大きな違いのように見えますが、実際には表面的なものではありません。概念的には、オブジェクトのセットがグラフを形成し、このグラフを均一に処理するAPIを考えることができます。逆に、理論的には、パターンの一般的なグラフ構造をマイニングして、APIを介して公開されたオブジェクトにマップすることができます。ただし、実際の製品のAPIの設計は、通常、データの実際の保存方法やクエリの方法に影響を与えるため、ラッパーを作成して別のように見せることは簡単ではありません。また、オブジェクト指向データベースは、グラフデータベースでは通常提供されない整合性の保証と型指定構造を提供する必要があります。実際、深刻なOOデータベースは「自由形式」からはほど遠いです:)

[HyperGraphDB] [1]を見てください。これは、完全なオブジェクト指向データベース(db4oなど)であり、表現機能とクエリ機能の両方の点で非常に高度なグラフデータベースです。一般化されたハイパーグラフ(エッジが複数のノードを指すことができ、他のエッジも指すことができる)を格納でき、グラフなどとして埋め込まれた完全に拡張可能な型システムを備えています。

他のグラフデータベースとは異なり、HyperGraphDBでは、すべてのオブジェクトがグラフ内のノードまたはエッジになり、APIの侵入は最小限に抑えられます。オブジェクトをグラフとして表すか、オブジェクトに直交する方法で処理するかを選択できます。グラフ構造(ノードまたはエッジの「ペイロード」値として)。高度なトラバーサル、カスタマイズされたインデックス作成、およびクエリを実行できます。

HyperGraphDBが実際にODMSである理由の説明については、KobrixのWebサイトにあるブログ投稿「HyperGraphDBはOOデータベース?」」を参照してください。

15
Boris

別の角度から説明するように、graphdbは、データをアプリケーションクラスおよびオブジェクトから分離します。 graphdbには、グラフを処理するための組み込み機能もあります。明らかに、最短パスや深い走査などです。

もう1つの重要な違いは、neo4jのようなgraphdbでは、ノード全体(ノードのプロパティ/属性を含む)をロードせずに、関係(エッジ)のタイプと方向に基づいてグラフをトラバースできることです。オブジェクトデータベースのバックエンドとしてneo4jを使用するという選択肢もありますが、それでもすべてのグラフィを使用できます。以下を参照してください。 jo4neo このプロジェクトには、オブジェクトデータベースとしてカウントできる別のアプローチがあります。 neo4jの: neo4j.rb 。新しいオプションは、 Spring Data Graph を使用することです。これにより、アノテーションを通じてgraphdbがサポートされます。

このブログ投稿 へのコメントでも同じ質問がありました。

8
nawroth

低レベルでの違いはそれほど大きくありません。どちらも、コストのかかる結合なしで直接リンクとして関係を管理します。さらに、どちらにもクエリ言語との関係をトラバースする方法がありますが、グラフデータベースにはN番目のレベルで再帰的に移動する演算子があります。

しかし、最大の違いはドメインにあります。グラフデータベースでは、通常は頂点またはエッジのサブタイプの一種として独自のタイプを定義できる場合でも、すべてが頂点とエッジの2つのタイプに基づいています。

ODBMSには、独自に作成しない限り、頂点とエッジの概念はありません。

1
Lvca

両方のWebサイトのクイックブラウジングから:

主な違いは、APIを使用して構築できる自由形式のデータベースの種類ではなく、APIの構造化方法です。

db4oはオブジェクトマッピングを使用します-Java/C#クラスを作成し、リフレクションを使用してデータベースに永続化します。

neo4jには明示的な操作APIがあります。

Neo4jは、私の謙虚な意見では、対話するのがはるかに優れているように見えました。

キーバリューストアを検討することもできます。これらのいずれかを使用して、まったく同じ自由形式のデータベースを作成できます。

1
Will