Ubuntu 環境でソーシャル ネットワーク システムに PHP と MySQL を使用しています。
という名前の MySQL テーブルがありますuser_feed
。このテーブルでは、各ユーザーのフィードを feed_id として保存します。MySQL のテーブル構造は次のとおりです。
|user_feed_id | user_id | content_id | seen |
また、データとそれに続くすべてのユーザーを含むテーブルuser_follow
があるため、各ユーザーはコンテンツをフォローしたレコードのセットを持っています。
テーブル構造:
follow_id | user_id | content_id |
user_feed テーブルには 1 億 7000 万を超えるレコードがあり、すべてのユーザーには一連のレコードがあり、user_follow
テーブルには 500 000 を超えるレコードがあります。
現在、MySQL から MongoDB に移行する作業を行っているため、このテーブルを MongoDB のコレクションに変換する必要があります。私は次のように私のコレクションを構築すると思いuser_feed
ますuser_follow
:
ユーザーごとにコレクションを作成します。このコレクションには 3 つのドキュメントがあり、1 つはフォロー ID 用で、もう 1 つは feed_id 用です。したがって、ユーザー プロファイルを処理するときに、メンバーごとに 1 つのコレクションに対してクエリを実行します。
各コレクション名は、次のように user_id を参照します。
user_id_1 as collection name
{ user_id: '1'}
{
feed_ids: [
{ content_id: '10', 'seen' : 1 },
{ content_id: '11', 'seen' : 0 },
{ content_id: '12', 'seen' : 1 },
{ content_id: '13', 'seen' : 1 }
]
}
{
follow_ids: [
{ content_id: '10' },
{ content_id: '20'},
{ content_id: '23'},
{ content_id: '24'}
]
}
user_id_2 as collection name
{ user_id: '2'}
{
feed_ids: [
{ content_id: '14', 'seen' : 1 },
{ content_id: '15', 'seen' : 0 },
{ content_id: '16', 'seen' : 0 },
{ content_id: '17', 'seen' : 0 }
]
}
{
follow_ids: [
{ content_id: '22' },
{ content_id: '23'},
{ content_id: '24'},
{ content_id: '25'}
]
}
したがって、70,000 人のユーザーがいる場合、MongoDBで70,000 のコレクションを作成する必要があります
そして、次のように作成する別のオプションがあります:
1 つのコレクションのすべてのユーザー フィードと、各ユーザーが次のようなコレクション内に 1 つのドキュメントを持ちます。
{
user_id: '1',
feed_ids: [
{ content_id: '10'},
{ content_id: '11'},
{ content_id: '12'}
],
follow_ids: [
{ content_id: '9'},
{ content_id: '11'},
{ content_id: '14'}
]
}
これらのテーブルのデータは非常に大きくなり、コレクションとドキュメントですべての操作(挿入、更新、選択など)を実行できるようにする必要があります。
私の feed_ids と follow_ids は非常に大幅に増加し、私のクエリは次のとおりです。
select content_id from user_feed where user_id =1 limit 10 offset 20;
update user_feed set seen = 1 where user_id =1
select count(content_id) from user_feed where seen = 0;
select content_id from user_follow where user_feed_id =1 limit 10 offset 20;
insert into user_feed (user_id,content_id,seen) values (1,23,0);
私のユースケースにとって最適なソリューションは最初のオプションですか、それとも 2 番目のオプションですか?
ありがとう。