私は潜在的に多くのユーザー(約100万人)がいるAndroidモバイルアプリを開発しています。これらのユーザーは、他のユーザー(Twitterなど)をフォローできます。アプリは、リモートRESTバックエンドを介してユーザーデータを同期します。ユーザーデータ自体は、ドキュメント指向のデータベース(私の場合はMongoDB)に保持されます。
現在、フォロワーとフォロー関係を含むユーザーモデルを設計するための最良の方法について自問しています。最初に考えたのは、ユーザードキュメント内にリレーションを埋め込むことでした。
ユーザードキュメントの例:
{
"_id":"50fd6bb530043e3c569af288",
"name":"Marsha Garcia",
"follower"["50fd6bb530043e3c569af287","50fd6bb530043e3c569af289","50fd6bb530043e3c569af28c"],
"following":["70fd6bb530043e3c569af289","10fd6bb530043e3c569af222","89fd6bb530043e3c569af45o"]
}
ポジティブなことは、フォロー/フォロー関係がすでにユーザーと結合していることです。ただし、あるユーザーが約100.000人以上の他のユーザーをフォローしているとします。そうすると、ドキュメントのサイズが非常に大きくなります。モバイルアプリでRESTサービスを介してこのユーザーオブジェクトを読み込むと、時間がかかる場合があります。さらに、最悪の場合、ユーザードキュメントがMongoDb16MBドキュメントの制限を超える可能性があります。
したがって、私の2番目の考えは、フォロワーとフォロー関係をより古典的な方法でモデル化することでした。各ユーザーの次の関係を含む追加のドキュメント。
「ユーザー関係」ドキュメントの例:
{
"_id": 50fe65828de290c0a8a8ea2d"
"uid": "50fd6bb530043e3c569af288",
"rel_uid": "50fe65828de290c0a8a8e9a6",
"type": "FOLLOWING"
}
良い点は、各ユーザードキュメントのサイズが一定に保たれることです。欠点は、ユーザーが多く、リレーションをフォローしていると、MongoDBの「ユーザーリレーション」コレクションに何百万ものエントリを簡単に取得できることです。もちろん、フィールドにインデックスを設定しますが、現在のフォロワーを求めるアプリユーザーのユースケースに関して、このソリューションが非常にうまく拡張できるかどうかはよくわかりません。
私のモデリングの問題についての考えや経験をいただければ幸いです。おそらく誰もがより良い解決策のアプローチを持っています。
事前にたくさんThx。