3

1 人のユーザーに何千もの関係を許可するための最適な設計は何ですか?

(ソーシャル ネットワーキング アプリに取り組んでいます - 「一般的な」ソーシャル ネットワーク デザインを知っている場合は、それらを指摘してください..役に立つでしょう)

この画像を見てください - ステータスの更新はリンクされたリストを表し、興味は雑多な興味を表しています..これらの興味は、1 人のユーザーの数千のノードに実際に爆発する可能性があります-それは一種のスーパーノードの問題につながるのではないでしょうか?

図1

形

それらの興味のカテゴリ、または「ヘッダー」ノードを用意し、これら 2 つの興味をそのカテゴリ ノードに分類する方が良い設計でしょうか? 最初にユーザー ノードとほんの数個のリレーションシップ/ヘッダー ノードを扱うので、ユーザー ノードに直接関連する可能性のある数千のノードを使用するよりも効率的である可能性があると考えています。

例: 図 2 ユーザー
|
+ 利子+
+----- 利子
+----- 利子
+----- など...

また、次のような「本」、「映画」、「製品」などの「サブヘッダー」カテゴリノードも興味に含める必要はありません。

**FIGURE 3**
User
|
+ interests+ 
           + books+
           |      + interest
           |      + interest
           |      + interest
           + movies+<br>
                   + interest
                   + interest
                   + interest

(明らかに、私はneoに反対です)

ここに私の質問があります:

  1. 高性能でスケーラブルなfacebook のようなシステムに最適なモデルはどれですか? カテゴリのないモデルとカテゴリのあるモデルはどれですか? パフォーマンスを念頭に置いてください..

  2. 関心は常に数千のノードに爆発するわけではありません - ダースまたは 100 になる可能性があります - カテゴリの設計を追加するとオーバーヘッドが増えすぎますか? あなたと同じ本が好きな友達を探すことを検討してください。カテゴリを追加するとオーバーヘッドが増えすぎませんか?

  3. 後者の画像 (カテゴリ ノードとサブカテゴリ ノードを含む画像) は、見た目が良くなるだけで、パフォーマンスや構成などには何も影響しないのでしょうか?

  4. カテゴリ ノードの代わりに、それがどのカテゴリに属しているかを説明するカテゴリ プロパティが必要ですか? また、インデックスにカテゴリ プロパティを持つノードを追加することは、カテゴリ ノードを持つことと同じくらい良いでしょうか?

  5. 質問 4 に関して、インデックスにカテゴリを持つノードを追加することはより良い解決策でしょうか?

  6. このタイプの構造の欠点は何ですか? それらは本当の利点ですか?

4

1 に答える 1

2

インタレスト カテゴリは、インタレスト カテゴリが数十万または数百万の接続にまで膨れ上がった場合に適していると思います。それが数千の場合でも、十分に機能するはずです。おそらくそれは、実際に必要なときにユーザーノードを進化させることができるものです。(ツイッターでのスーパースターの別の扱いのように)。

それはすべてユースケースにも依存します.モデルでどのような種類のクエリに答えたいですか?それらはカテゴリに限定されますか?

常に考慮しなければならないことは、グラフをたどるたびに、関係の数が指数関数的に増加するということです。そのため、ユーザーからそのすべての友人または友人の友人、およびすべての興味に対してクエリを実行すると、触れる要素の数が急速に増加することに注意してください。要求に迅速に応答できるように、グラフの十分な部分をメモリに保持するのに十分なメモリがサーバーにあることを確認してください。

また、早い段階でパフォーマンスと負荷のテストを行うようにしてください (たとえば、データ ジェネレーターを使用)。

ところで。熱心にフィルタリングするには、関心ごとに異なる関係タイプを設定することも賢明かもしれません。これにより、関心のない関連を実際にたどることなく早い段階でフィルタリングできます。

インデックスは通常、グローバル カテゴリに役立ちます。カテゴリの名前とユーザー ID の両方でカテゴリにインデックスを付けることができますが、ユーザーとカテゴリのインデックス エントリを掛け合わせると、非常に急速に成長する可能性があります。

ユースケースが本当にカテゴリごとであり、すべての関心にまたがるものではない場合 (特に、すべてのユーザーとすべての関心にまたがる場合)、カテゴリ アプローチはうまくスケーリングする必要があると思います。

于 2013-03-29T19:08:17.287 に答える