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

フォローとフィードのmongodbデザイン、どこに埋め込む必要がありますか?

    一般に、いくつかの理由から、フォロー/フォローの関係をユーザードキュメントに埋め込むことはお勧めできません。

    (1)最大ドキュメントサイズの制限は16 MBであり、十分に購読されているサイトの人気ユーザーが数十万人のフォロワーを獲得し、最大ドキュメントサイズに近づく可能性があります。

    (2)フォロワーシップの関係は頻繁に変化するため、フォロワーを埋め込んでいる場合、ユーザーが多くのフォロワーを獲得する場合は、ドキュメントが繰り返し増加することになります。頻繁なドキュメントの増加はMongoDBのパフォーマンスを大幅に低下させるため、回避する必要があります(ドキュメントの増加は、特にドキュメントが安定した最終サイズに達する傾向があるため、パフォーマンスの低下が少なくなります)。

    したがって、はい、フォロー/フォローの関係を、それぞれが2つのフィールド(たとえば、{_id:、oid:})を持ち、_idにインデックスを持つレコードの個別のコレクションに分割するのが最善です(「私は誰をフォローしていますか? 「クエリ」およびoid(「誰が私をフォローしていますか?」クエリの場合)。個々の状態の変化は、単一のドキュメントの追加または削除によってモデル化されますが、フォロワー数なども表示している場合は、エッジの挿入/削除後に更新する個別のカウンターを保持する必要があります。

    (もちろん、これはあなたのビジネス要件が一貫性の詳細にある程度の柔軟性を与えることを前提としています:一般に、表示コードがユーザーに304人のフォロワーがいることを伝え、次にそれらを列挙する場合、最もうるさいユーザーだけがフォロワーが列挙されていることを確認します最大304まで集計します。ビジネス要件で絶対的な一貫性が必要な場合は、トランザクションを分離するデータベースが必要です。そうでない場合は、すべてのユーザーIDの表示の一部として自分でカウントする必要があります。)




    1. rmongodbで設定されたMongoDBレプリカに接続する

    2. MongoDBスキーマ計画のヒント

    3. IDに一致するレコードのみが最初に来るようにレコードを並べ替えますか?

    4. $elemmatchがMongoDBで機能しない