InnoDB
memcached エンジンは、埋込み InnoDB
から直接採用された InnoDB
API を介して InnoDB
にアクセスします。 InnoDB
API 関数は、コールバック関数として InnoDB
memcached エンジンに渡されます。 InnoDB
API 関数は、InnoDB
テーブルに直接アクセスします。ほとんどの場合、DML 操作ですが、TRUNCATE TABLE
は例外です。
memcached コマンドは、InnoDB
memcached API を介して実装されます。 次のテーブルに、memcached コマンドが DML または DDL 操作にどのようにマップされるかを示します。
表 15.27 memcached コマンドおよび関連する DML または DDL 操作
memcached コマンド | DML または DDL 操作 |
---|---|
get |
読み取り/フェッチコマンド |
set |
INSERT または UPDATE が続く検索 (キーが存在するかどうかによる) |
add |
INSERT または UPDATE が続く検索 |
replace |
UPDATE が続く検索 |
append |
検索の後に UPDATE が続きます (UPDATE の前に結果にデータを追加します) |
prepend |
検索の後に UPDATE が続く (UPDATE の前にデータを結果の先頭に付加する) |
incr |
UPDATE が続く検索 |
decr |
UPDATE が続く検索 |
delete |
DELETE が続く検索 |
flush_all |
TRUNCATE TABLE (DDL) |
このセクションでは、daemon_memcached
プラグインで使用される構成テーブルについて説明します。 cache_policies
テーブル、config_options
テーブルおよび containers
テーブルは、innodb_memcache
データベースの innodb_memcached_config.sql
構成スクリプトによって作成されます。
mysql> USE innodb_memcache;
Database changed
mysql> SHOW TABLES;
+---------------------------+
| Tables_in_innodb_memcache |
+---------------------------+
| cache_policies |
| config_options |
| containers |
+---------------------------+
cache_policies
テーブルでは、InnoDB
memcached
インストールのキャッシュポリシーを定義します。 単一のキャッシュポリシー内で、get
, set
, delete
および flush
操作の個々のポリシーを指定できます。 すべての操作のデフォルト設定は innodb_only
です。
innodb_only
:InnoDB
をデータストアとして使用します。cache_only
: memcached エンジンをデータストアとして使用します。caching
:InnoDB
と memcached エンジンの両方をデータストアとして使用します。 この状況で、memcached がメモリー内からキーを検出できない場合、InnoDB
テーブル内から値を検索します。disable
: キャッシュを無効にします。
表 15.28 cache_policies カラム
カラム | 説明 |
---|---|
policy_name |
キャッシュポリシーの名前。 デフォルトのキャッシュポリシー名は cache_policy です。 |
get_policy |
get 操作のキャッシュポリシー。 有効な値は、innodb_only , cache_only , caching または disabled です。 デフォルト設定は innodb_only です。 |
set_policy |
set 操作のキャッシュポリシー。 有効な値は、innodb_only , cache_only , caching または disabled です。 デフォルト設定は innodb_only です。 |
delete_policy |
delete 操作のキャッシュポリシー。 有効な値は、innodb_only , cache_only , caching または disabled です。 デフォルト設定は innodb_only です。 |
flush_policy |
flush 操作のキャッシュポリシー。 有効な値は、innodb_only , cache_only , caching または disabled です。 デフォルト設定は innodb_only です。 |
config_options
テーブルには、SQL を使用して実行時に変更できる memcached 関連の設定が格納されます。 サポートされる構成オプションは、separator
および table_map_delimiter
です。
表 15.29 config_options カラム
カラム | 説明 |
---|---|
Name |
memcached 関連の構成オプションの名前。 config_options テーブルでは、次の構成オプションがサポートされています:
|
値 |
memcached 関連の構成オプションに割り当てられた値。 |
containers
テーブルは、3 つの構成テーブルの中で最も重要です。 memcached 値の格納に使用される各 InnoDB
テーブルには、containers
テーブルのエントリが必要です。 このエントリは、InnoDB
テーブルのカラムとコンテナテーブルのカラムの間のマッピングを提供します。これは、memcached
が InnoDB
テーブルを操作するために必要です。
containers
テーブルには、innodb_memcached_config.sql
構成スクリプトによって作成される test.demo_test
テーブルのデフォルトエントリが含まれています。 独自の InnoDB
テーブルで daemon_memcached
プラグインを使用するには、containers
テーブルにエントリを作成する必要があります。
表 15.30 containers のカラム
カラム | 説明 |
---|---|
name |
コンテナに付与された名前。 @@ テーブル記法を使用して名前で InnoDB テーブルがリクエストされない場合、daemon_memcached プラグインは containers.name 値が default の InnoDB テーブルを使用します。 このようなエントリがない場合は、containers テーブルの最初のエントリが name (昇順) でアルファベット順に並べられて、デフォルトの InnoDB テーブルが決定されます。 |
db_schema |
InnoDB テーブルが存在するデータベースの名前。 これは必須の値です。 |
db_table |
memcached 値を格納する InnoDB テーブルの名前。 これは必須の値です。 |
key_columns |
memcached 操作のための検索キー値を格納する InnoDB テーブルのカラム。 これは必須の値です。 |
value_columns |
memcached データを格納する InnoDB テーブルのカラム (1 つ以上)。 innodb_memcached.config_options テーブルで指定されたセパレータ文字を使用して、複数のカラムを指定できます。 デフォルトでは、区切り文字はパイプ文字 (「|」) です。 複数カラムを指定するには、定義された区切り文字でカラムを区切ります。 たとえば、col1|col2|col3 となります。 これは必須の値です。 |
flags |
memcached のフラグ (メイン値とともに格納および取得されるユーザー定義の数値) として使用される InnoDB テーブルのカラム。 memcached 値が複数のカラムにマップされている場合、フラグ値を一部の操作 (incr 、prepend など) のカラム指定子として使用して、指定したカラムに対して操作を実行できます。 たとえば、value_columns を 3 つの InnoDB テーブルのカラムにマップし、一方のカラムに対してのみ増分操作を実行する場合は、flags カラムを使用してカラムを指定します。 flags カラムを使用しない場合は、未使用であることを示す 0 の値を設定します。 |
cas_column |
比較およびスワップ (cas) 値を格納する InnoDB テーブルのカラム。 cas_column の値は、memcached が異なるサーバーにリクエストをハッシュし、データをメモリーにキャッシュする方法に関連しています。 InnoDB memcached プラグインは単一の memcached デーモンと緊密に統合されており、インメモリーキャッシュメカニズムは MySQL および InnoDB buffer pool によって処理されるため、このカラムはほとんど必要ありません。 このカラムを使用しない場合は、0 の値を設定して未使用であることを示します。 |
expire_time_column |
有効期限の値を格納する InnoDB テーブルのカラム。 expire_time_column の値は、memcached が異なるサーバーにリクエストをハッシュし、データをメモリーにキャッシュする方法に関連しています。 InnoDB memcached プラグインは単一の memcached デーモンと緊密に統合されており、インメモリーキャッシュメカニズムは MySQL および InnoDB buffer pool によって処理されるため、このカラムはほとんど必要ありません。 このカラムを使用しない場合は、0 の値を設定して、カラムが未使用であることを示します。 最大有効期限は、INT_MAX32 または 2147483647 秒 (約 68 年) として定義されます。 |
unique_idx_name_on_key |
キーカラムのインデックスの名前。 これは一意のインデックスである必要があります。 これは主キーまたはセカンダリインデックスにできます。 できれば、InnoDB テーブルの主キーを使用してください。 主キーを使用すると、セカンダリインデックスの使用時に実行されるルックアップが回避されます。 memcached 参照のためのカバリングインデックスは作成できません。キーカラムおよび値カラムの両方に複合セカンダリインデックスを定義しようとすると、InnoDB はエラーを返します。 |
containers テーブルカラムの制約
db_schema
、db_name
、key_columns
、value_columns
、およびunique_idx_name_on_key
の値を指定する必要があります。flags
、cas_column
、およびexpire_time_column
が使用されない場合、これらに0
を指定します。 そうしないと、セットアップが失敗する場合があります。key_columns
: memcached で強制される、memcached キーの最大長は 250 文字です。 マップ済みのキーは、Null 以外のCHAR
またはVARCHAR
タイプである必要があります。value_columns
:CHAR
、VARCHAR
、またはBLOB
カラムにマップされる必要があります。 長さに制約はなく、値を NULL に指定できます。cas_column
:cas
値は 64 ビットの整数です。 これは少なくとも 8 バイトのBIGINT
にマップされる必要があります。 このカラムを使用しない場合は、0
の値を設定して未使用であることを示します。expiration_time_column
: 少なくとも 4 バイトのINTEGER
にマップされる必要があります。 有効期限は、Unix 時間の 32 ビット整数 (1970 年 1 月 1 日からの秒数の 32 ビット値) として、または現在時間から開始する秒数として定義されます。 後者の場合、秒数は 60*60*24*30 (30 日間の秒数) を超えないようにしてください。 クライアントから送信される数が大きい場合、サーバーはそれを現在の時間からのオフセットではなく、実際の Unix 時間値とみなします。 このカラムを使用しない場合は、0
の値を設定して未使用であることを示します。flags
: 少なくとも 32 ビットのINTEGER
にマップする必要があり、NULL に指定できます。 このカラムを使用しない場合は、0
の値を設定して未使用であることを示します。
カラム制約を強制するために、プラグインのロード時に事前検査が行われます。 不一致が見つかった場合、プラグインはロードされません。
複数値カラムマッピング
プラグインの初期化時に、
InnoDB
memcached がcontainers
テーブルで定義された情報で構成されている場合、containers.value_columns
で定義された各マップ済カラムは、マップ済InnoDB
テーブルに対して検証されます。 複数のInnoDB
テーブルのカラムがマップされている場合は、各カラムが存在し、正しい型であることを確認するチェックがあります。実行時に、
memcached
の挿入操作では、マップされたカラムの数よりもデリミタ付きの値が多い場合、マップされた値の数のみが取得されます。 たとえば、マッピングされたカラムが 6 つあり、7 つの区切り値が指定されている場合、最初の 6 つの区切り値のみが使用されます。 7 番目の区切り値は無視されます。マップされたカラムより区切られた値の方が少ない場合、入力値のないカラムは NULL に設定されます。 未入力のカラムを NULL に設定できない場合、挿入操作は失敗します。
テーブルにマップされた値より多くのカラムがある場合、余分なカラムは結果に影響しません。
innodb_memcached_config.sql
構成スクリプトにより、test
データベースに demo_test
テーブルが作成され、これを使用して、設定後すぐに InnoDB
memcached プラグインのインストールを検証できます。
innodb_memcached_config.sql
構成スクリプトでは、innodb_memcache.containers
テーブルに demo_test
テーブルのエントリも作成されます。
mysql> SELECT * FROM innodb_memcache.containers\G
*************************** 1. row ***************************
name: aaa
db_schema: test
db_table: demo_test
key_columns: c1
value_columns: c2
flags: c3
cas_column: c4
expire_time_column: c5
unique_idx_name_on_key: PRIMARY
mysql> SELECT * FROM test.demo_test;
+----+------------------+------+------+------+
| c1 | c2 | c3 | c4 | c5 |
+----+------------------+------+------+------+
| AA | HELLO, HELLO | 8 | 0 | 0 |
+----+------------------+------+------+------+