InnoDB
memcached プラグインは、MySQL SQL レイヤーをバイパスして InnoDB
ストレージエンジンに直接アクセスする MySQL プラグインデーモンとして memcached を実装します。
次の図は、アプリケーションが SQL と比較して daemon_memcached
プラグインを介してデータにアクセスする方法を示しています。
daemon_memcached
プラグインの機能:
mysqld のデーモンプラグインとしての memcached。 mysqld と memcached の両方が同じプロセス領域で実行され、データへの待機時間が非常に短くなります。
SQL パーサー、オプティマイザ、さらにハンドラ API レイヤーもバイパスして、
InnoDB
テーブルに直接アクセスします。テキストベースのプロトコルおよびバイナリプロトコルを含む標準の memcached プロトコル。
daemon_memcached
プラグインは、memcapable コマンドの 55 の互換性テストすべてに合格します。Multi-column support. ユーザー指定のセパレータ文字で区切られたカラム値を使用して、複数のカラムをキー値ストアの 「value」 部分にマップできます。
デフォルトでは、memcached プロトコルを使用してデータの読取りおよび
InnoDB
への書込みが直接行われるため、MySQL はInnoDB
buffer pool を使用してインメモリーキャッシュを管理できます。 デフォルト設定は、データベースアプリケーションの高い信頼性と最も低い驚きの組合せを表します。 たとえば、デフォルト設定では、データベース側のコミットされていないデータや、memcachedget
リクエストに対して返される失効データは回避されます。上級ユーザーは、システムを従来の memcached サーバーとして構成し、すべてのデータを memcached エンジン (メモリーキャッシング) にのみキャッシュすることも、「「memcached エンジン」」 (メモリーキャッシング) と
InnoDB
memcached エンジン (InnoDB
をバックエンド永続ストレージとして) の組合せを使用することもできます。
innodb_api_bk_commit_interval
、daemon_memcached_r_batch_size
およびdaemon_memcached_w_batch_size
構成オプションを使用して、InnoDB
操作と memcached 操作の間でデータがやり取りされる頻度を制御します。 信頼性を最大化するために、バッチサイズオプションのデフォルト値は 1 です。daemon_memcached_option
構成パラメータを使用して memcached オプションを指定する機能。 たとえば、memcached がリスニングするポートの変更、同時接続の最大数の削減、キーと値のペアの最大メモリーサイズの変更、またはエラーログのデバッグメッセージの有効化を行うことができます。innodb_api_trx_level
構成オプションは、memcached で処理されるクエリーのトランザクション isolation level を制御します。 memcached には transactions の概念はありませんが、このオプションを使用して、daemon_memcached プラグインで使用されるテーブルに対して発行された SQL ステートメントによって発生した変更を memcached がすぐに確認する方法を制御できます。 デフォルトでは、innodb_api_trx_level
はREAD UNCOMMITTED
に設定されます。innodb_api_enable_mdl
オプションを使用すると、MySQL レベルでテーブルをロックできるため、マップされたテーブルは DDL で SQL インタフェースを介して削除または変更できません。 ロックがない場合、テーブルは MySQL レイヤーから削除できますが、memcached または他のユーザーが使用を停止するまでInnoDB
記憶域に保持されます。 「MDL」は「メタデータロック」を表します。
Using MySQL with memcached で説明されているように、MySQL での memcached の使用にすでに慣れている場合があります。 このセクションでは、統合された InnoDB
memcached プラグインの機能が従来の memcached
とどのように異なるかについて説明します。
-
インストール: memcached ライブラリには MySQL サーバーが付属しているため、インストールと設定が比較的簡単です。 インストールには、memcached で使用する
demo_test
テーブルを作成するためのinnodb_memcached_config.sql
スクリプトの実行、daemon_memcached
プラグインを有効にするためのINSTALL PLUGIN
ステートメントの発行、MySQL 構成ファイルまたは起動スクリプトへの必要な memcached オプションの追加が含まれます。 memcp、memcat、memcapable などの追加ユーティリティ用の従来の memcached ディストリビューションをインストールすることもできます。従来の memcached との比較は、Installing memcached を参照してください。
-
デプロイメント: 従来の memcached では、通常、大量の低容量 memcached サーバーを実行します。 ただし、
daemon_memcached
プラグインの一般的なデプロイメントでは、MySQL がすでに実行されている中程度または高電力のサーバーの数が少なくなります。 この構成の利点は、未使用のメモリーを利用したり、多数のサーバーにルックアップを分散したりするのではなく、個々のデータベースサーバーの効率を向上させることです。 デフォルト構成では、memcached に使用されるメモリーはほとんどなく、メモリー内ルックアップはInnoDB
buffer pool から提供されます。これにより、最近頻繁に使用されたデータが自動的にキャッシュされます。 従来の MySQL サーバーインスタンスと同様に、innodb_buffer_pool_size
構成オプションの値は、メモリー内で可能なかぎり多くの作業が実行されるように、(OS レベルでページングを発生させずに) 実用的な値にしてください。従来の memcached との比較は、memcached Deployment を参照してください。
-
有効期限: デフォルトでは (
innodb_only
キャッシュポリシーを使用)、InnoDB
テーブルの最新データが常に返されるため、有効期限オプションは実用的な効果がありません。 キャッシュポリシーをcaching
またはcache_only
に変更すると、有効期限オプションは通常どおりに機能しますが、メモリーキャッシュから期限切れになる前に基礎となるテーブルで更新された場合、リクエストされたデータは失効する可能性があります。従来の memcached との比較は、Data Expiry を参照してください。
-
ネームスペース: memcached は、ファイルが競合しないようにするために、接頭辞と接尾辞を含む複雑な名前をファイルに付ける大規模なディレクトリに似ています。
daemon_memcached
プラグインでは、キーに対して同様の命名規則を使用できますが、追加の命名規則もあります。@@
形式のキー名。table_id
.key
table_id
は、innodb_memcache.containers
テーブルのマッピングデータを使用して、特定のテーブルを参照するようにデコードされます。key
は指定されたテーブル内で参照されるか、このテーブルに書き込まれます。@@
表記法は、get
、add
およびset
関数への個々のコールに対してのみ機能し、incr
やdelete
などの他のコールに対しては機能しません。 セッション内の後続の memcached 操作のデフォルトテーブルを指定するには、
でキー部分を指定せずにtable_id
@@
テーブル記を使用してget
リクエストを実行します。 例:get @@table_id
後続の
get
,set
,incr
,delete
およびその他の操作では、
によってtable_id
innodb_memcache.containers.name
カラムに指定されたテーブルが使用されます。従来の memcached との比較は、Using Namespaces を参照してください。
-
ハッシングと分散:
innodb_only
キャッシュポリシーを使用するデフォルト構成は、レプリカサーバーのセットなど、すべてのサーバーですべてのデータを使用できる従来のデプロイメント構成に適しています。シャード構成と同様にデータを物理的に分割する場合は、
daemon_memcached
プラグインを実行している複数のマシンにデータを分割し、従来の memcached ハッシュメカニズムを使用してリクエストを特定のマシンにルーティングできます。 通常、MySQL 側では、適切な値が適切なサーバーのデータベースに格納されるように、add
リクエストによってすべてのデータを memcached に挿入できます。従来の memcached との比較は、memcached Hashing/Distribution Types を参照してください。
-
メモリー使用量: デフォルトでは (
innodb_only
キャッシュポリシーを使用)、memcached プロトコルはInnoDB
テーブルとの間で情報をやり取りし、InnoDB
バッファプールは memcached メモリー使用量の増加および縮小のかわりにメモリー内ルックアップを処理します。 相対的には、memcached 側ではメモリーをほとんど使用しません。キャッシングポリシーを
caching
またはcache_only
に切り替えると、memcached メモリー使用量の通常のルールが適用されます。 memcached データ値のメモリーは、「「スラブ」」の観点から割り当てられます。 memcached に使用されるスラブサイズおよび最大メモリーを制御できます。どちらの方法でも、telnet セッションなどを介して標準プロトコルを介してアクセスされる使い慣れた statistics システムを使用して、
daemon_memcached
プラグインをモニターおよびトラブルシューティングできます。daemon_memcached
プラグインには、追加のユーティリティは含まれていません。memcached-tool
script を使用して、完全な memcached ディストリビューションをインストールできます。従来の memcached との比較は、Memory Allocation within memcached を参照してください。
-
スレッド使用率: MySQL スレッドと memcached スレッドは同じサーバー上に共存します。 オペレーティングシステムによってスレッドに課される制限は、スレッドの合計数に適用されます。
従来の memcached との比較は、memcached Thread Support を参照してください。
-
ログの使用状況: memcached デーモンは MySQL サーバーとともに実行され、
stderr
、-v
、-vv
、-vvv
の各オプションを使用して、書込み出力を MySQL error log に書き込みます。従来の memcached との比較は、memcached Logs を参照してください。
-
memcached 操作:
get
,set
,add
、delete
などの使い慣れた memcached 操作を使用できます。 シリアライズ (複雑なデータ構造を表す正確な文字列形式) は、言語インタフェースによって異なります。従来の memcached との比較は、Basic memcached Operations を参照してください。
-
MySQL フロントエンドとしての memcached の使用: これは、
InnoDB
memcached プラグインの主な目的です。 統合 memcached デーモンを使用すると、アプリケーションのパフォーマンスが向上し、InnoDB
でメモリーとディスク間のデータ転送を処理できるため、アプリケーションロジックが簡略化されます。従来の memcached との比較は、Using memcached as a MySQL Caching Layer を参照してください。
-
ユーティリティ: MySQL サーバーには
libmemcached
ライブラリが含まれていますが、追加のコマンドラインユーティリティは含まれていません。 memcp、memcat、memcapable コマンドなどのコマンドを使用するには、完全な memcached ディストリビューションをインストールします。 memrm および memflush がキャッシュからアイテムを削除すると、基礎となるInnoDB
テーブルからもアイテムが削除されます。従来の memcached との比較は、libmemcached Command-Line Utilities を参照してください。
-
プログラミングインタフェース: サポートされているすべての言語を使用して、
daemon_memcached
プラグインを介して MySQL サーバーにアクセスできます: C and C++, Java, Perl, Python, PHP および Ruby。 従来の memcached サーバーと同様に、サーバーのホスト名とポートを指定します。 デフォルトでは、daemon_memcached
プラグインはポート11211
でリスニングします。 テキストプロトコルとバイナリプロトコルの両方を使用できます。 memcached 関数の behavior は、実行時にカスタマイズできます。 シリアライズ (複雑なデータ構造を表す正確な文字列形式) は、言語インタフェースによって異なります。従来の memcached との比較は、Developing a memcached Application を参照してください。
-
よくある質問: MySQL には、従来の memcached に関する広範な FAQ があります。 FAQ は、memcached データの記憶域メディアとして
InnoDB
テーブルを使用することを除いて、読取り専用キャッシュとしてではなく、以前よりも多くの書込み集中型アプリケーションに memcached を使用できることを意味します。memcached FAQを参照してください。