MySQL 上のログテーブルの扱い方
保存期限を3か月とか、任意の期間で自動削除する仕組みについて。
ログっていうのは、アクセスログとかアクティビティーログを想定している。
単純にログテーブルを作成してデータを入れていくのは簡単だけど、古いデータをどのタイミングで、どのように消すか、というのが問題。
ただこれ調べ始めていきなり結論っぽいものを発見してしまった。
Mobageを支える技術 ~ソーシャルゲームの舞台裏~ (WEB+DB PRESS plus)
- 作者: DeNA
- 出版社/メーカー: 技術評論社
- 発売日: 2012/06/13
- メディア: 単行本(ソフトカバー)
- 購入: 31人 クリック: 737回
- この商品を含むブログを見る
↓MySQL のパーティションテーブルについてはこちらがわかりやすい。
高速処理化!MySQLのパーティショニング機能を使ってみよう | 東京上野のWeb制作会社LIG
↓とても詳しい。さすが DeNA のなかのひと。
ソーシャルゲームのためのMySQL入門 - Technology of DeNA
日次等のタイミングでイベントスケジューラを利用して
を行うだけ。
ただし、以下のような事で、IF [NOT] EXISTS は使えないので、ちょっと工夫は必要。
ADD PARTITION と DROP PARTITION は現在 IF [NOT] EXISTS をサポートしていません。パーティションや分割されたテーブルをリネームする事も不可能です。その代わりに、もしパーティションをリネームしたいのであれば、パーティションをドロップして再作成する必要があります。そしてもし分割済テーブルをリネームしたければ、全てのパーティションをドロップし、テーブルをリネームし、そしてドロップされたパーティションをもう一度追加する必要があります。
MySQL :: MySQL 5.6 リファレンスマニュアル :: 13.1.7 ALTER TABLE 構文
イベント処理については以下。
http://idocsq.net/page/160
http://dev.mysql.com/doc/refman/5.1-olh/ja/create-event.html
レプリケーション考えると面倒が起きそうなので、ウチではイベントスケジューラ使わずに、素直に cron に perl スクリプト仕込む感じでやることにしそう。