1

グラフ データベースは、データをノード、プロパティ、およびリレーションとして格納します。クエリに基づいてオブジェクトから特定のデータを取得する必要がある場合は、複数のオブジェクトを取得する必要があります (クエリには多くの結果が含まれる可能性があるため)。

グラフ データベースでのオブジェクト指向プログラミングにおける次の単純なシナリオを考えてみましょう。

各ユーザーがオブジェクトとして保存されるユーザーの (グラフ) データベースがあります。特定の場所に住んでいるユーザーのリストを取得する必要があります (場所のプロパティはユーザー オブジェクトに格納されています)。それで、どうすればいいですか?つまり、何かを行う必要があるたびに不要なデータが取得されるということです (この場合、ユーザー オブジェクト全体を取得する必要があるかもしれません)。グラフデータベースでは関数型プログラミングの方が優れているのではないですか?

この例は、私の頭に浮かんだ上記の質問の単なる例えです。ベンチマークとして使用しないでください。では、グラフ データベースでのオブジェクト指向プログラミングはどれほど優れているのかという疑問が残ります。

4

5 に答える 5

3

グラフデータベースは、単なる頂点やエッジではありません。neo4jなどのほとんどのグラフデータベースでは、頂点idとエッジに加えてlabel、プロパティのリストがあります。通常、Javaベースのグラフデータベースでは、これらのプロパティはJavaプリミティブに制限されています。他のすべては文字列(日付など)にシリアル化する必要があります。getProperty頂点/エッジプロパティへのこのマッピングは、やなどのメソッドを使用して手動で行うことも、 TinkerPopスタックを使用するオブジェクトマッパーであるFramessetPropertyなどの方法で行うこともできます。

于 2011-08-06T22:16:26.707 に答える
1

各ノードには、オブジェクトフィールドにマップできる属性があります。これは手動で行うことも、spring-dataを使用してマッピングを行うこともできます。

于 2011-08-06T14:08:55.617 に答える
1

ほとんどのグラフ データベースには、頂点/エッジ用に少なくとも 1 種類のインデックスがあります。たとえば、InfiniteGraph は、B-Tree、Lucene (テキスト用)、分散型のスケーラブルなインデックス タイプをサポートしています。フィルターとして使用しようとしているフィールドにインデックスがない場合は、グラフを走査し、各ステップで述語を自分で適用する必要があります。これにより、通過するノードの数が減ることを願っています。

于 2011-08-08T16:14:49.987 に答える