Q4M
Q4Mについては、MySQL5.1のプラガブルストレージエンジンの1つで、サイボウズ・ラボ株式会社の奥一穂氏が開発されています。
mixi engineer blog
mixi では一時に集中するDBへのwriteをいったんQ4Mで受けて時間軸分散して流す、という仕組みを採用している様子。
MySQL5.1 については、
2008年11月 - Version 5.1 プロダクションリリース。ベータ版は2005年11月にリリース。event scheduler, partitioning, plugin API, row-based replication, server log tables搭載。
MySQL - Wikipedia
Q4M の本尊はこちら。
Q4M (Queue for MySQL) is a message queue licensed under GPL that works as a pluggable storage engine of MySQL 5.1, designed to be robust, fast, flexible. It is already in production quality, and is used by several web services (see Users of Q4M).
http://q4m.31tools.com/
Q4M のバイナリ版およびインストール手順については、q4m.31tools.com/install.php をご参照ください。バイナリ版を使うことで、これまでよりも気軽に Q4M をお試しいただけるようになったことと思います。
Kazuho@Cybozu Labs: MicroblogCon1 の報告と Q4M 0.8.1 リリースのお知らせ
Q4Mの動きで、特徴的なの
* queue_wait で取れたレコードは、queue_end で消える。
http://blog.xole.net/category.php?k=mysql
* queue_wait で止まる時間を指定しても、queueが入ってきたときは、即レコードが取れる
* queue_wait を連発すると一行前のレコードが消える(?要確認だけど)
* queue_wait で取れたレコードは他のクライアントから queue_wait しても取れない
* queue_wait で取得したレコードは、他のクライアントからだとテーブル上に見えなくなってる
* queue_wait で、レコードが見つからない場合は、0 で、見つかったら 1 が帰ってくる
* queue_wait で取ったレコードは「ちゃんと処理をする」queue_abort すると消えるよ