2011-12-21 9 views
2

私はアイテムのユーザーの投票を記録する投票表(user_id、item_id、date)を持っています。ユーザーが投票するアイテムの数は、数万人に上り、ユーザー数万人になる可能性があります。私は、これらの項目の投票合計を定期的に返すクエリ(トップ票を持つ項目)を行う必要があります。すべての合計を継続的に合計するのを避けるために、項目テーブル(item_name、item_id、vote_total)の投票合計を追跡するのが理にかなっています。は、投票合計を記録するときに二次的なカウント情報を格納するために最適化されていますか?

一方、これを行うと、ユーザーが投票するたびに投票テーブルを現在の合計で更新することになります(ほぼ同じ時間に多くのユーザーが同じ行を更新します)。最適化コードは問題を引き起こす可能性があります。これは私が心配すべきことですか?

この問題が何度も繰り返されていることに気がつきました。たとえば、アイテムごとの総コメント数、アイテムあたりの総ビュー数などで同じことを行う必要があります。練習?

+1

必須*と表示されている*というパフォーマンステストケースがないかぎり、それは*過剰最適化*です。モデルがきれいに保たれている限り、それはかなり適応性があります。セカンダリ/キャッシュテーブルは、プライマリ正規化データにこの情報を処理しようとするよりもはるかに優れています。 –

答えて

1

あなたのテストでクエリが遅すぎると示されましたか?インデックスを追加するとファイルが大きすぎますか?これらの指標はパフォーマンスに役立たなかったか?

必要性を証明していない最適化を追加することは決してしないでください。開発者としてのあなたの時間はそれよりも貴重です。

+0

私のクエリは非常に遅いです。 〜500Kのアイテムレコードで、クエリには2.7秒かかります。このクエリは、投票データに類似したデータ(例えば、各項目に投票したセッションユーザの友人の名前)を既に取得している。私が期待している投票を取得することで、それはまだ遅くなります。私は、クエリを改善する方法を尋ねる新しい質問を投稿し、それがまだ遅すぎる場合に最適化を検討するのが最善の策だと思います。 – jela

関連する問題