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

MongoDBデータベーススキーマの設計

    私は次の構造で行きます:

    1. 発生したすべてのアクションに1つのコレクション、Actionsを使用します

    2. 誰が誰をフォローするかについて、別のコレクションを使用します。Subscribers

    3. 3番目のコレクションであるNewsfeedを使用します 特定のユーザーのニュースフィードの場合、アイテムはActionsからファンアウトされます コレクション。

    Newsfeed コレクションは、新しいActionsを非同期的に処理するワーカープロセスによって入力されます 。したがって、ニュースフィードはリアルタイムで入力されません。リアルタイムが重要であるという点で、Geert-Janには同意しません。ほとんどのユーザーは、ほとんどの1分でも遅延を気にしないと思います。 (すべてではありません)アプリケーション(リアルタイムでは、完全に異なるアーキテクチャを選択します)。

    consumersの数が非常に多い場合 、ファンアウトにはしばらく時間がかかる場合があります。一方、コンシューマーをオブジェクトに直接配置しても、フォロワー数が非常に多い場合は機能せず、インデックススペースを大量に消費する非常に大きなオブジェクトが作成されます。

    ただし、最も重要なのは、ファンアウト設計がはるかにより柔軟であるということです。 関連性のスコアリング、フィルタリングなどが可能になります。最近、MongoDBを使用したニュースフィードスキーマの設計に関するブログ投稿を作成しました。ここでは、その柔軟性の一部について詳しく説明しています。

    柔軟性について言えば、そのactivitystrea.msの仕様には注意が必要です。異なるプロバイダー間の相互運用の仕様としては理にかなっているようですが、さまざまなアプリケーションからのアクティビティを集約するつもりがない限り、データベースにそのような詳細な情報をすべて保存することはしません。



    1. SQLで短い月の名前を取得する方法

    2. Mongoでは、シャーディングとレプリケーションの違いは何ですか?

    3. MongoDBシェルからレプリカセットにどのように接続しますか?

    4. RedisとNode.jsおよびSocket.ioの質問