14

私は潜在的に多くのユーザー(約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。

4

3 に答える 3

21
1. collection users:
- userid
- username
- userpass
- other user specific info user


2. collection following:
- userid
- [array of followingid]


3. collection followed:
- userid
- [array of followedid]
4. messages_relation collection:

- userid
- messageid
- time

5. messages_text:
- messageid
- text
于 2013-01-22T13:11:37.083 に答える
1

まだ読んでいない場合は、CMS にコメントを保存する方法に関するこのドキュメントを読むことから始めます。コメント用ですが、同じ一般的な問題が存在します-すべてのコメントを単一のドキュメントに保存できない場合(あなたの場合、フォロワー/フォロー中)。

ハイブリッド アプローチ (より少ないドキュメントを使用し、単一のドキュメント内にいくつかの関係を格納する) または説明しているアプローチのいずれかがうまく機能するはずです。

また、取得などのパフォーマンスをテストするための単純な POC を構築することもお勧めします。一部の結果をキャッシュしたり、プリコンパイルしたりすることは理にかなっています。通常、このようなシステムでは、すべてのユーザーに対してすべてが即座に一貫していなくても問題ありません (フォロワー数がすぐに正しくなるなど)。

完璧な解決策は存在しない可能性が高く、最適なパフォーマンスを得るにはいくつかの解決策が必要になる場合があります (たとえば、フォロワーの数が増えると、ユーザーとフォロワーの処理方法が変わる可能性があります)。

于 2013-01-22T13:29:19.140 に答える
-2

隣接リストを格納するデータベースである flockDB を確認することをお勧めします。https://github.com/twitter/flockdb

于 2013-02-27T15:39:38.153 に答える