2011-04-05 4 views
6

5つのユニークなモデル(投稿、写真、イベントなど)のコメントを2〜3回追加できるアプリをビルドしています。それ自体、コメントモデル自体は全モデル共通ですが、各モデルには関連するコメントモデル(PostComments、PhotoComments、EventCommentsなど)があります。多くの異なるモデルのためのコメント:多態性かどうか? (Ruby on Rails)

私は最近、多くのモデルを単一のモデルにまとめ、多数のテーブルを1つのテーブルにまとめるという、Railscast #154で完全に説明された多相関連の力を発見しました。

多相関連はコードと冗長性をクリーンアップしますが、どのようにパフォーマンスに影響しますか?データベースの最適化についてはあまりよく分かりませんが、一般的なコメントテーブルの1,000,000行からのコメントを特定のコメントテーブルの200,000行よりもクエリするのに時間がかかるようです。多態的な関連付けに切り替える価値があるのですか(まだアプリの開発がまだ比較的早い段階ですが)、コメントの種類ごとにモデルや表を作成し続ける必要がありますか?

+2

コメント機能は実際に多形性関連のための最良の例です。適切なインデックスとクエリを持つ適切なmysqlサーバの場合、1000000行は何もありません。存在しない問題を解決しようとしないでください:) – keymone

答えて

3

実際にサイトの大きさに依存します。まず、2つの列にインデックスを追加する必要があります。

add_index :comments, [:commentable_type, commentable_id] 

これにより、スピードが大幅に向上します。

1.000.000件のコメントがあるため、将来大きな問題が発生する場合は、いつでもキャッシュを使用したり、複数のテーブルに移行したりすることもできます。しかし実際にはスピードの問題を抱えるためには多くのコメントが必要になります。長い間あなたのテーブルをインデックス化すれば!とにかく1.000.000レコードで検索クエリを行うことはそれほどありません。

私は言う、1テーブルを作る! commentable_id属性がインデックスの上に全体的なクエリの速度が多くなることを意味し、より多くのクエリを絞り込むう:私はので、この答えは良いだろうと思う

add_index :comments, [:commentable_id, :commentable_type] 

+0

ありがとう、私は適切なインデックス作成を計画していましたが、元の質問に言及するのを忘れました。 – aguynamedloren

0

少しマイケルの答えを超える改善もっと早く。私にこのフィードバックをお願いします:)

関連する問題