1

私は本当に趣味であり、あまりにも壮大な願望を持っています。とはいえ、データベースの変更にクライアントのリファクタリングが必要ないだけでなく、高速になるように、データベースを作成する正しい方法を見つけようとしています。典型的な開発やDBAの用語をよく理解していないかのように返信してください。

状況:各ユーザーが何冊の本を評価したかを調べようとしていました。次のいずれか2つが含まれている場合、評価された本を検討します。

-Overall rating (ratings table)
-sub rating (ratings table)
-tag (book_tags table)
-list (book_lists table)

*Related tables: users, tags, lists

問題: 10個のサブ評価と2つの全体的な評価がすべて評価テーブルにあり、それぞれが列にあります(これは悪いと思いますが、確かではありません)。代わりに、評価テーブル(12行)とbook_ratingsテーブルを用意する必要があります。このテーブルでは、評価テーブルの各行がユーザーの評価の一種です。

-e.g. book_ratings: id  |  user_id  |  book_id  |  rating_id  

はいの場合、50万冊の本、1冊あたり12種類の評価、10,000人のユーザー、およびそのbook_ratingsテーブルに合計50億行がある場合はどうなりますか?それは超低速で実行されますか?もう一つの考慮事項は、将来的にサブレーティングタイプを追加したいと思うかもしれないということです。それは部分的にそれを変更する価値があると思う理由ですが、それは大変な作業なので、最初に確認したいと思いました。

ありがとう!

4

2 に答える 2

1

はい、私はあなたが説明するように構造を変更します-それはより柔軟でより「正しい」(正規化された)です。

各ユーザーがすべての本にすべての評価を与えた場合にのみ、50億行になります(これは確かに悪いことです)。大多数のユーザーは何も評価せず、大多数の本は評価を引き付けません。

于 2012-04-05T22:35:03.680 に答える
1

システムをモデル化して、使用可能および拡張可能にする必要があります。12の評価列があると、結果などを集約したいときに多くの苦痛を引き起こすことになります。このサイトには、そのような苦痛の例がたくさんあります。

成長するにつれて、インデックス、クラスタリング、データパーティショニングなどを追加して最適化します。

しかし、すぐに大量のデータが発生することがわかっている場合は、いくつかの「ビッグデータ」ソリューションを検討し、おそらくNoSQLの方法を採用することをお勧めします。

于 2012-04-05T22:36:10.487 に答える