Q4Mとは何か?
Q4M (Queue for MySQL) は GPL のもとにライセンスされるメッセージキューで、MySQLのプラグイン可能なストレージエンジンとして動作し、堅牢、高速、柔軟なように設計されています。既にプロダクションの品質であり、幾つかのwebサービスで利用されています(Q4Mのユーザを見てください)。
Q4Mの使用を開始するには、インストールページからバイナリまたはソース配布のどちらかをダウンロードし、 インストレーションの指示に従ってください。簡単なチュートリアルも利用可能です。あなたはQ4MキューにアクセスするためにSQLを使用するかも知れません。あるいはperlで利用できるラッパーモジュールがあります( Queue::Q4M)。
更に詳しい情報は開発者のブログ(Kazuho at Work) を読むか、メーリングリスト を購読してください。
更新
- 0.9.14 リリース (Jul 30 2014)
- コンパクションが引き起こされた時にクラッシュするかも知れない、DELETEとqueue_wait()の間の競合を修正。
- 0.9.13 リリース (Feb 6 2014)
- MySQL 5.1での multi-table queue_wait を使用した時のデッドロックを修正。
- 0.9.12 リリース (Jan 30 2014)
- CMakeFiles.txt を追加 (MySQL 5.5 / 5.6 のサポートのため)。
- 0.9.11 リリース (Jan 27 2014)
- 条件付きサブスクリプション時のメモリリークを修正。
- 0.9.10 リリース (May 21 2013)
- 高負荷で条件付きサブスクリプションを使用した場合のクラッシュを修正。
- 0.9.9 リリース (Mar 27 2013)
- Q4Mの古いバージョンで作成したデータにアクセスしようとした時の、クラッシュ/データ損失の可能性を修正 (バグは 0.9.7 および 0.9.8 にあります)。
- 0.9.8 リリース (Mar 22 2013)
-
MySQL 5.5 および 5.6 の準備的なサポート
キューファイルのサイズが永遠に増え続けるかもしれないエラーを修正。 - 0.9.7 リリース (Nov 21 2012)
- テーブル単位のメトリクスのための "queue_stats()" 関数を導入。
Q4M の設計のゴール
- 堅牢
- Q4M はディスクに全てのメッセージを転送します。電源喪失あるいはOSクラッシュによるメッセージの損失は無いでしょう。
- 高速
- Q4M はディスクに各操作を同期しますが、グループコミットおよびデータリカバリのためのチェックサムによって、高速に動作します。HDDのwriteキャッシュが無効になっていても、通常のlinuxサーバ上で秒間あたり数千のメッセージを転送することができます。
- 柔軟性
- Q4MはMySQLのストレージエンジンとして動作するため、通常はSQLは管理者として使用されることができます。他のMySQLテーブルに対してQ4Mクエリをjoinすることもできます。あるいは、データをキューに送信するためにtriggerを使用するかも知れません。
Q4Mの利用者
Q4M は日本の最も有名なwebサービスの幾つかで利用されています。ユーザには以下が含まれます:
- DeNA Co., Ltd. - ソーシャルネットワークサービス
- Ficia - フォトストレージサービス
- livedoor Reader - フィードアグリゲーター
- mixi, Inc. - ソーシャルネットワークサービス
- Pathtraq - webトラフィック統計サービス
制限と既知の問題
バージョン0.5以下の制限と既知の問題。
- 行サイズは512MBに制限されます。
- テーブルサイズは 2**63バイトに制限されます。
- UPDATEとREPLACE のサポートはありません。
- インデックスのサポートはありません。
- 一つの DELETEステートメントによる複数の行の削除はアトミックではありません。
- 過度のメモリ不足の状態ではサーバがクラッシュするかも知れません。
- Q4Mがテーブルのコンパクションを実行中にOSがクラッシュするとデータが損失するかも知れません(ディレクトリはfsyncされていないため)。