私は現在、データモデリングに苦労しています。いくつかのテーブルには100万を超えるレコードがあり、GROUP BY
とCOUNT
で出力を照会するのにかなりの時間がかかります。だから、私はCouchbaseに移行しました。ビューとインデックスをサポートしています。リレーショナルデータモデリングとドキュメントデータモデリングの間の悩み
私は非常に便利であることがMySQLに大きな利点があります。私はこのようなユーザーに関連するユーザーのテーブルといくつかの記事でユーザーを持っているなど、他の多くのユーザーからこの記事に関連したいくつかの好きな点やコメントもあります。私は通常、JOINを実行するので、ユーザーの名前とプロフィールの画像が出力されます。アウトプットには、他のユーザーの詳細を好きやコメントとともに添付しました。したがって、ユーザーが新しいプロフィール画像をアップロードしたり自分のメールアドレスを変更した場合は、ユーザーテーブルの列を更新するだけで済みます。
はCouchbaseので、私はMySQLのような物品文書にデータを格納user_id
とコメント文書などの著者を持ってcommenter_id
とarticle_id
を持っているように文書を作成しようとしました。今では、制限や並べ替えを有効にしてビューやインデックスに参加させることが非常に難しいことが分かりました。そこで、ユーザーのprofile_img
とfirst_name
とlast_name
をすべての関連文書にコピーしました。私は記事のドキュメントを読み込むときだから、構造の下にあります
{ "article_id": 1234, "text": "A good article", "author_id": 1, "first_name": "John", "last_name": "Smith", "profile_img": "0bf34ee0a.jpg", "likes": [ { "user_id": 1, "first_name": "John", "last_name": "Smith", "profile_img": "0bf34ee0a.jpg" }, { "user_id": 2, "first_name": "Paul", "last_name": "Einstein", "profile_img": "1789ab00ef.jpg" } ] "comments": [ { "user_id": 1, "first_name": "John", "last_name": "Smith", "text": "This is my article", "profile_img": "0bf34ee0a.jpg" }, { "user_id": 2, "first_name": "Paul", "last_name": "Einstein", "text": "i like it", "profile_img": "1789ab00ef.jpg" } ] }
これは確かに私のクエリ時間を救いました。 (そうでなければ、記事を最初に照会し、記事と好き嫌いとからユーザーIDを抽出し、ユーザーIDを記事に添付し、ユーザーのIDに応じてコメントとコメントをユーザーに照会する必要があります)。しかし、これは別の問題を引き起こしました。ユーザーがプロフィール画像を更新した場合、すべての記事をクロールしてuser_id
を見つけ、profile_img
フィールドを更新する必要があります。
誰にでも私にはどのような手がかりがありますか?
私は、ユーザーID、キーワード、全文検索や 'solr'統合を格納するため、ここでの複雑さを理解していません。私は、インデックスでうまく調整された何百万行ものmysqlソリューションが、驚くほど高速なソリューションではないことが分かりません。特にブロブを避ける場合 – Drew
SQLモデリングを行い、NoSQL/Document Databaseソリューションに変換することはできません。 深刻な解決策には、データを再検討する必要があります。 これは主に、これらのプラットフォームがさまざまな問題を解決する傾向があるためです。 –