2016-10-18 10 views
1

私はNeo4jを使用せず、代わりにTitanDB(IBM Graph)を使用していますが、私はグラフデータベースを初めて使用しているため、Neo4jドキュメントで提案されているスキーマを使用して基本的なニュースフィードをモデル化しました。完全にすべてのドキュメントを読んだこのデータモデルはTitanDBの基本的なニュースフィードに最適ですか?

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

、私はこれらのデータベースを操作する方法との間にいくつかの重要な違いを認識しています。リンクに記載されたモデルで

は、ユーザpostsの各々は、それぞれuser頂点から出るステータス更新の長いリストを形成し、互いにedgesによって接続vertexesとして記憶されます。

これは私がTitanDBは、ここでは詳細に説明vertex-centricインデックス能力、持っていることを認識していますのNeo4jのcapabalities与えられた意味を成している間:今、私は与えられたユーザーのために照会することで養うことを保証しようとしています

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

を多くのユーザーがいる大きなグラフ、永続的に保持されている投稿や状態の更新がたくさんある場合に最適です。したがって、ユーザーフィードの最初の15項目を取得するために、すべての投稿、すべてのユーザーの友だちをトラバースしてから、最後に注文して制限することを避けたいと考えています。次のように私の質問があるので、のNeo4jのドキュメントに記述されたモデルは、本当にTitanDBで使用するための最良のものであれば

そのように、私はわからないよ:

  • は最適のNeo4jのドキュメントに記述されたモデルですTitanDBの高速ニュースフィード検索用
  • もしそうなら、ユーザーフィードを最適に取得するためにはどのインデックスを作成する必要がありますか?
  • もし、post頂点を投稿したuserに直接接続し、各postedエッジのtimeプロパティのvertex-centricインデックスを使用する方が良いでしょうか?

タイタンDBの基本的なニュースフィードのモデリング、索引付け、取得に関する一般的なアドバイスを受けています。前もって感謝します。

答えて

2

基本的なスキーマは悪いアプローチのようには見えませんが、この1つのユースケースに基づいて判断するのは難しいです。

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

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

+0

ありがとうございますBenjamin - わかりましたので、あなたのインデックス提案はNeo4jドキュメントモデルで動作しますか?または、私が提案したように、リンクされたリストではなく、独自のエッジを介してポスト頂点をユーザー頂点に直接接続する必要がありますか?また、それは、2つのプロパティ(ポスト頂点のユーザID、ポスト頂点のタイムスタンプ)、または「エッジ」インデックスにわたって、「頂点」インデックスですか? (接続エッジのタイムスタンプ)。申し訳ありませんが、質問が日常的に見える場合、グラフデータベースは概念的にかなり変化しています。 – gordyr

+0

申し訳ありませんが、私は最初の括弧のセットで次のことを意味しました:(ユーザ頂点のユーザID、ポスト頂点のタイムスタンプ) – gordyr

+0

gordyr - off-hand私はリンクリスト手法を推奨し、エッジ。インデックスについて:あなたがPost頂点にユーザーIDを含めると仮定すると、その要素のインデックスだけです。インデックスは、複数の要素にまたがることはできません。 –

関連する問題