1

私は Neo4j を使用しておらず、代わりに TitanDB (IBM Graph) を使用していますが、グラフ データベースは初めてなので、とりあえず、Neo4j のドキュメントで提案されているスキーマを使用して基本的なニュース フィードをモデル化しました。

http://neo4j.com/docs/snapshot/cypher-cookbook-newsfeed.html

すべてのドキュメントを十分に読んだ結果、これらのデータベースの動作方法にいくつかの重要な違いがあることに気付きました。

リンクで説明されているモデルでは、各ユーザーは互いに接続されpostsて保存され、各頂点から発せられるステータス更新の長いリストを形成します。vertexesedgesuser

これは Neo4j の機能を考えると理にかなっていますが、TitanDB にはvertex-centricインデックス作成機能があることを認識しています。詳細は次のとおりです。

http://s3.thinkaurelius.com/docs/titan/1.0.0/indexes.html

現在、特定のユーザー フィードのクエリが最適であること、多数のユーザーを含む大規模なグラフ、永続的に保持される投稿またはステータスの更新が多数あることを確認しようとしています。したがって、ユーザー フィードの最初の 15 項目を取得するためだけに、すべてのユーザーの友人のすべての投稿をトラバースし、最終的にそれらを並べ替えて制限する必要は避けたいと思います。

そのため、Neo4j のドキュメントに記載されているモデルが本当に TitanDB で使用するのに最適なモデルであるかどうかはわかりません。私の質問は次のとおりです。

  • Neo4j のドキュメントに記載されているモデルは、TitanDB での高速ニュース フィードの取得に最適ですか?
  • その場合、ユーザー フィードを最適に取得するには、どのようなインデックスを作成する必要がありますか?
  • そうでない場合は、各頂点を投稿者にpost直接接続し、各エッジのプロパティにインデックスを使用する方がよいでしょうか?uservertex-centrictimeposted

私は、Titan DB での基本的なニュースフィードのモデリング、インデックス作成、および取得に関する一般的なアドバイスを求めています。前もって感謝します。

4

1 に答える 1

2

基本的なスキーマは悪いアプローチではないように見えますが、この 1 つのユース ケースに基づいて適切な判断を下すことは困難です。

インデックス作成の問題を解決する最も簡単な方法は、おそらく少し非正規化することです。ユーザー ID をpost頂点のプロパティとして保存し、[user, timestamp]ペアを作成してインデックスを作成します。

頂点中心のインデックスは役立つかもしれませんが、提案されたモデルでは役に立ちません。postエッジとしてモデル化し、頂点をノードにする必要があるため、他のトラバーサルがかなり厄介になる可能性があります。さらに、IBM Graph は、現在のリリースでは頂点中心のインデックスをサポートしていません。

于 2016-10-18T18:19:32.490 に答える