20579


データベースで独自の投票パーツを作ったのですが、1アクセスごとにSELECT文で結果の数  
（83good 12bad）を取得していてはデータベースサーバに負担が大きいのですが、このような簡易データベースにキャッシュなどのやり方は存在しますか？


CC BY-SA 3.0
2016-01-02T15:07:35.200
20542
2016-01-04T10:27:55.570
7973
question
mysql pdo
YouTubeのようなGoodとBadの作り方


一般的には非正規化を行います。  
「ユーザーID, good/bad」のようなユーザー毎のデータを持つテーブルと、「goodCount,
badCount」のような回数を集計したテーブルの二つのテーブルを作成します。そして整合性を壊さないように二つのテーブルを更新するようにします。


CC BY-SA 3.0
2016-01-04T07:31:29.150
20579
2016-01-04T07:31:29.150
12774
20542
answer


おそらく誰がいつvoteしたとかの情報は必要だろうと想像してその前提であれば、集計クエリを何らかの方法でキャッシュするのが一般的です。

  * アプリケーションのローカルメモリ
  * memcachedなどのインメモリKVS
  * Redis等永続化可能なKVS
  * PostgreSQLの場合、pgpoolというミドルウェアがありクエリキャッシュ機能があります
  * MySQLは自分自身でクエリキャッシュ機能を持っています
  * RDBMSの別テーブルをキャッシュとして使う

など方法はいろいろあります。

  * データの整合性保証
  * 要求されるパフォーマンス
  * キャッシュが空の状態での性能低下防止(ウォームアップ)

など、検討すべきポイントはいろいろありますが、環境や背景が何も書かれていないので、具体的にどうすべきかはなんとも言えません。


CC BY-SA 3.0
2016-01-04T10:27:55.570
20587
2016-01-04T10:27:55.570
5793
20542
answer