sql >> データベース >  >> NoSQL >> MongoDB

アクティビティのタイムラインをmongodbのどこに配置するか、ユーザーに埋め込むか、個別に配置する必要がありますか?

    これらの記事はどちらも正しく、どちらも間違っています。

    埋め込むか、埋め込まないか?これは常に重要な質問であり、ニーズ、クエリ、ストレージ、さらにはワーキングセットにまで及びます。

    結局のところ、私たちはあなたが実際にどれが最良であるかをあなたに伝えることができないポインタを与えることができるだけです。

    ただし、アクティビティフィードのサイズを考慮すると、16メガ(ユーザーあたり)を超える可能性があるため、個人的には埋め込みません。ただし、クエリの速度と能力のために、たとえば、ユーザーの最後の20のアクティビティを集計してから埋め込むことができます。これをユーザーの行に追加します(通常、最後の20が最もクエリされるものであるため)。

    ただし、集約の埋め込みは依存します。シャーディングは、水平方向にスケーリングされた膨大なコレクションのクエリを処理できます。適切なクエリを使用すると、埋め込みによる実際のメリットは得られず、インデックス、ストレージ、およびそのサブドキュメントを維持するために必要なクエリ。

    死ぬまでの埋め込みも。現在クエリを実行しているMongoDBの多くは、主に1つまたは2つのレベルの埋め込みに依存しているため、たとえば12のネストされたテーブルを維持するのが難しくなる可能性があります。そのときに、こことGoogleグループでそのような維持方法に関する質問が表示されるようになります。巨大なドキュメント(本当に必要な場合は、答えはクライアント側です)。

    これを考慮して、ユーザーに集計を格納します。これは、ユーザーが1回の往復で自分または他のユーザーのアクティビティを単独で確認できることを意味します。

    ただし、教師がすべてのユーザーからのページ結果を取得する必要がある可能性が高いことを考慮して、別のアクティビティコレクションを格納し、それについてクエリを実行します。サブドキュメントの集合体のページングにはいくつかのクエリが必要です。この場合は、この方法で行う方がよいでしょう。

    うまくいけば、それで始められるはずです。



    1. MongoDB-インストールエラー-mongodbセットアップウィザードが途中で終了しました

    2. Nodejs + mongodb:$ refフィールドをクエリする方法は?

    3. Moongooseの集計$matchがIDと一致しません

    4. mongodbは、認証が有効になっている場合でもゲスト接続を許可します