3

stackoverflow のようなサイトの mongo db スキーマを設計しています。質問とユーザーがいます。ユーザーは質問をお気に入りリストに追加したり、お気に入りリスト内で質問を検索したりできます。

ユーザーと質問の 2 つのコレクションがあります。問題は、お気に入りの保存方法です。2つのオプションがあります

  1. ユーザーのお気に入りの質問 Id のリストを保存する
  2. 質問とともに、(この質問をお気に入りに追加したユーザーの) ユーザー ID のリストを保存します。

どのアプローチを取るべきですか?ユーザーのお気に入りも検索する必要があることを忘れないでください。

データベース/レコード サイズの見積もりについては、質問の数、ユーザーがスタック オーバーフローで実行するデータベース操作を想定してください。

詳細については;

このアプリは、C# で記述された asp.net mvc であり、検索に Lucene.NET を使用することを望んでいます

前もって感謝します

4

3 に答える 3

1

SO のようなサイトを設計し、同じパフォーマンスを達成したい場合は、データを非正規化する必要があります。したがって、ユーザーのお気に入りの質問IDをユーザー内に保存し、ユーザーIDの質問を保存および保存することをお勧めします。お気に入りの操作中に、2 つの場所 (ユーザー、質問) にデータを挿入する必要がありますが、ユーザー/質問のお気に入りをすばやく取得することができます。

ところで: mongodb で lucene を使用する場合、mongodb からの関連性の読み込みで問題が発生します。

実際の全文検索が必要な場合は、RavenDBを試すことができます。また、優れた nosql データベースであり、Lucene 構文をネイティブにサポートします。

編集:

SO のようなサイトを設計するときは、次の点に注意してください。

  1. 非正規化
  2. 非同期リクエスト処理
  3. バックグラウンド ジョブ
于 2011-09-20T08:54:00.110 に答える
1

UserFavories 用に別のコレクションを用意することをお勧めします。お気に入りのサイズはいつでも不明であり、成長し続けているため

       UserFavories
                -UserID (BSON Objectid)
                - id of the user who posted
                - Name of the user who posted
                - Name of the question
                - Question id
                - url to the question

ほとんどの場合、Userid と Question Id を保存するだけで、お気に入りを見つけることができます。ただし、SQL 以外では、非常に関連性の高い情報を ID と共に保存することをお勧めします (結合は避けてください)。この場合、質問を投稿したユーザーの ID と名前、および質問の名前、ID と URL を保存するので、次のように、このドキュメントだけを照会するだけで簡単にお気に入りを表示できます。

ここに画像の説明を入力

これを行う正確な方法ではありませんが、アイデアが得られます..

于 2011-09-20T08:54:30.673 に答える
0

各質問のお気に入りのフラグの数を表示する場合は、ユーザーデータベースを検索しないように、質問とともにフラグを保存する必要があります。

于 2011-09-20T08:40:25.290 に答える