はじめに

このプラグインは、簡単に使えるクライアント側でのクエリキャッシュ機能を追加します。 mysqlnd を使うすべての MySQL 用 PHP 拡張モジュールで使えます。

PHP 5.3.3 以降で、PHP の MySQL Native Driver (mysqlnd) は C の内部プラグイン API を提供するようになりました。 クエリキャッシュプラグインのように C でプラグインを書いて、 mysqlnd の機能を拡張できるようになったのです。

クエリキャッシュプラグインのような mysqlnd 用プラグインの機能の大部分は、 ユーザーの視点からはプラグインの存在を意識せずに使えます。このプラグインはすべての PHP アプリケーションをサポートし、そしてすべての MySQL 用 PHP 拡張モジュール (mysqlimysqlPDO_MYSQL) に対応します。既存の API には何も手を加えません。

クエリをキャッシュするためのアプリケーション側での変更は、ほとんど必要ありません。 キャッシュの動作モードは二種類あります。すべてのクエリをキャッシュする (非推奨) か、あるいは特定の SQL ヒントを付加したクエリだけをキャッシュする (推奨) かのいずれかです。

主要な機能

  • 透過的に組み込め、簡単に使える

    • すべての MySQL 用 PHP 拡張モジュールに対応

    • API を変更しない

    • アプリケーション側での変更はほんの少しだけ

  • 柔軟な無効化戦略

    • 有効期限 (TTL)

    • ユーザー定義

  • さまざまなスコープと生存期間をもつストレージ

    • デフォルト (ハッシュ、プロセスのメモリ)

    • APC

    • MEMCACHE

    • sqlite

    • ユーザー定義

  • 組み込みの slam defense による cache stampeding の回避。

制限

現在のリリース版であるバージョン 1.0.1 では、PECL mysqlnd_qc は PHP 5.4 に対応していません。バージョン 1.1.0-alpha で対応します。

プリペアドステートメントや非バッファクエリには完全に対応しています。 したがって、このプラグインは mysqliPDO_MySQL が発行するすべてのステートメントをキャッシュできます。 PHP の MySQL API でプリペアドステートメントに対応しているのはこの二つだけです。

名前の由来

mysqlnd_qcmysqlnd query cache plugin の略です。 概念実証のためのコードをざっと書きあげるときに、この名前を選びました。 当時は、まさかそのコードを使い続けることになるとは思わなかったのです。 PECL/mysqlnd_qc は client-side query result set cache と呼ばれることもあります。