要件:
- ユーザーは会社への登録と退会が自由にできます。
- ユーザーは、登録している会社の投稿のみを取得する必要があります。
- ユーザーは、既に気に入った/気に入らなかった投稿を表示すべきではありません
現在、私たちが行っていることは、ユーザーが会社に参加すると、関連する投稿をユーザーにコピーしUser_Feed
、クライアントが投稿を取得することです。
ここで、40,000 件の投稿と 500,000 人のユーザーがいるとします。会社に参加するユーザーごとに、40K のデータをユーザー フィードにコピーする必要があります。または、会社が新しい投稿を投稿するとき、500KUSER_FEED
秒に渡す巨大なファンアウト オブジェクトを作成する必要があります。
これはスケーラブルではありません。
David East は投稿の中で、ファンアウト手法は何百万ものレコードをサポートしていると述べていますが、彼の例でさえ、どうすれば 100 万人のフォロワーを処理できるのでしょうか?
私たちは間違った方向に進んでいるように感じます。
私たちの問題に対するより良い解決策はありますか?
現在、次の構造があります。
Companies(~20 companies)
{
companyId: {
...comanyInfo
}
}
Users (~500K users)
uid: {
...userInfo
}
User_Companies (500k * max(20 companies))
uid: {
company1: true,
company2: true,
....
}
Company_Users (20 * max(500K users))
companyId: {
uid1: true,
uid2: true,
....
}
Company_POSTS (2K posts/company)
{
companyId: {
postId: {
...postInfo
}
}
}
User_Feed (For each user (500K))
{
uid:
posId : {
like: true
}
}