こんにちわ、stoneです。
今回は、MySQLのストレージエンジンの中の1つ、ArchiveエンジンのDECOLOGでの使い方をご紹介したいと思います。
※「DECOLOGでのMySQL BlackHoleエンジンの使い方」も合わせてどうぞ
Archiveエンジンの概要
MySQLのマニュアルをご覧いただくのが正確なのですが、その特徴を簡単にまとめると。。。。- insert/selectは出来るが、update/deleteは出来ない
- order byはサポートされない
- blobもサポートされない
- データは圧縮されてディスクに保存される
まぁ、最初にこのマニュアルを読んだときの、正直な感想は、
「どうやって使うんだ、これ?」
って感じでした。
deleteが出来ないので、データは溜まる一方だし、データは圧縮して保存されているので、selectもそんなに速くないことは容易に想像できます。
アクションログ
DECOLOGでは、ユーザーのアクティビティの統計を取るため、action_logというデータを取っています。create table action_log ( action_name varchar(16), blog_id int unsigned, param varchar(64), reg_date datetime ) engine=archive;action_nameには、例えば、"entry"(記事の投稿)、"comment"(記事へのコメント)等が入ります。このaction_logは、日次で集計を行っています。
テーブルのスワッピング
で、archiveエンジンの運用をどうするのかというと、上記のアクションログの場合、集計の前に、以下の様なSQLを発行します。drop table if exists action_log_yesterday; create table action_log_new like action_log; alter table action_log rename to action_log_yesterday; alter table action_log_new rename to action_log;つまり、
- action_log_yesterdayをドロップ
- action_log_newテーブルを作成
- 既存のaction_logをaction_log_yesterdayにリネーム
- action_log_newをaction_logにリネーム
データの集計
集計したいデータは、action_log_yesterdayに保存されています。このテーブルは、ユーザーからのアクセスから解放されているので、ゆっくり集計することができます。select action_name, blog_id, param from action_log_yesterdayと、action_log_yesterdayを全件selectして、結果をタブ区切りで、ファイルに出力します。ファイルの出力されたデータは、HDFSに乗せてHadoopで、集計をしています。
(Hadoopでの集計の一例は、以前の記事、HadoopによるApacheのログ解析の実際で紹介しています)
サーバーの運用
DECOLOGでArchiveエンジンを使用してるデータには、以下のような共通点があります。- ユーザーのアクセスで、selectが発生しない
- かなり頻繁にinsertが発生する
- 集計は、daily、もしくは、hourlyで行えば十分
- 集計された値は、内部で使用する値
また、DECOLOGでは、Archiveエンジンで、4つのデータを運用していて、かなりの頻度でアクセス(insert)があるため、サーバーは7台用意して、LVS(keepalived)により負荷分散させています。
実は。。。。。。。。。。
ここまで、書いておいてなんなんですが、最近、hiroshiが中心となって、archiveエンジンを使用しているデータを順次redisに移行していってます。そのうち、彼がレポートを書いてくれるでしょう。(笑)
次回は、daemontoolsを利用した運用をいくつか紹介しようかと考えています。
では、また次回に♪