7

ソーシャル ネットワーク システムにPHPMySQLを使用しています

member_feedという名前のMySQLテーブルがあります。このテーブルでは、各メンバーのフィードを保存します。テーブル構造は次のとおりです。

    |member_feed_id | member_id | content_id | activity_id |

このテーブルには1 億 2000 万件以上のレコードがあり、すべてのメンバーが一連のレコードを持っています。

私は現在、 MySQLからMongoDBへの移行に取り組んでおり、 MongoDBは初めてです。したがって、このテーブルMongoDBのコレクションに変換する必要があります。member_feed テーブルのコレクションを次のように構築すると思います。

1- member_feed テーブルの各行をdocumentとして、次のようにします。

{  "member_id: 1" , "content_id: 10" , "activity_id: 1" },
{  "member_id: 1" , "content_id: 11" , "activity_id: 2" },
{  "member_id: 1" , "content_id: 12" , "activity_id: 3" },
{  "member_id: 2" , "content_id: 9" ,  "activity_id: 4" },
{  "member_id: 2" , "content_id: 11" , "activity_id: 5" },
{  "member_id: 2" , "content_id: 14" , "activity_id: 6" }

このコレクションには 1 億 2000 万のレコードが含まれます

2-メンバー ID を持つ1 つのドキュメントのすべてのメンバー フィードと、このメンバーのすべてのフィード

{
        member_id: '1',
        feeds: [
            { content_id: '10', 'activity_id' : 1 },
            { content_id: '11', 'activity_id' : 2 },
            { content_id: '12', 'activity_id' : 3 }
        ]

        member_id: '2',
        feeds: [
            { content_id: '9',  'activity_id' : 4 },
            { content_id: '11', 'activity_id' : 2 },
            { content_id: '14', 'activity_id' : 6 }
        ]
    }

そのため、彼のダッシュボードでユーザー フィードを表示する必要がある場合は、次のようにします。

1-member_id によって、mongoDB 内のドキュメントからすべてのIDを取得ます$contentIdsFromMongo

2-MySQLでクエリを実行して、次のようなコンテンツを取得します

select * from content where content_id in($contentIdsFromMongo); 

および$contentIdsFromMongoには10000 個の idがあるため、これは MySQL のパフォーマンスに影響します。

サーバーにmongoDBがあり、別のサーバーにMySQLがあります

毎秒、システムは各メンバーに大量のレコードを挿入するため、(挿入、更新、選択など) すべての操作を実行できるドキュメントが必要です。

各メンバーのコレクション内のドキュメントを作成する最良の方法は何ですか?この方法はmongoDBを操作する上で正しいか間違っていますか?

ありがとう。

4

1 に答える 1

3

ドキュメント ストアのデータ モデリングにおける 2 つの主な考慮事項:

  1. 時間の経過とともにデータがどのように成長し、変化するか
  2. アプリケーションが実行するクエリの種類。

データがどのように増加すると予想されるかについての情報を提供しました。それだけに基づいて、オプション#1をお勧めします。

{  "member_id: 1" , "content_id: 10" , "activity_id: 1" }

ただし、実行するクエリの種類と、アプリケーションでこのデータをどのように使用する予定かを理解することも重要です。

可能な追加オプションは次のとおりです。

  • それぞれにフィードの配列を持つメンバーごとに 1 つのドキュメント
  • アプリケーションがデータを照会する方法である場合は、コンテンツまたはアクティビティ ID でドキュメントをグループ化します。

要約すると、最適なモデルを考え出すには、上記の質問 2 への回答も重要です。

PS:あなたの質問のオプション2は、データがどのように成長するかを説明したことを考えると、間違いなく悪い考えのように聞こえます.

追加のガイドラインについては、次のリンクを参照することもできます: http://docs.mongodb.org/manual/core/data-modeling/

于 2013-08-30T13:38:22.030 に答える