3

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 番目のオプションですか?

ありがとう。

4

1 に答える 1