Documentation Home
MySQL 5.6 リファレンスマニュアル
Download this Manual
PDF (US Ltr) - 27.1Mb
PDF (A4) - 27.2Mb
HTML Download (TGZ) - 7.2Mb
HTML Download (Zip) - 7.2Mb


MySQL 5.6 リファレンスマニュアル  /  ...  /  InnoDB memcached プラグインの内部構造

14.18.7 InnoDB memcached プラグインの内部構造

InnoDB memcached プラグイン用の InnoDB API

InnoDB memcached エンジンは InnoDB API を介して InnoDB にアクセスします。ほとんどの API は、組み込まれた InnoDB から直接採用されます。InnoDB API 関数は、コールバック関数として InnoDB memcached に渡されます。InnoDB API 関数は InnoDB テーブルに直接アクセスし、TRUNCATE TABLE 操作を除いてほとんどが DML 操作です。

次にリストされたすべての memcached コマンドは、 InnoDB memcached API によって実装されます。次の表は、それぞれの memcached コマンドが DML 操作にどのようにマップされるかの概要を示しています。

表 14.10 memcached コマンドおよび関連付けられた DML 操作

memcached コマンド DML 操作
get 読み取り/フェッチコマンド
set 検索後に挿入または更新を実行する (キーが存在するかどうかに依存する)
add 検索後に挿入または更新を実行する
replace 検索後に更新を実行する
append 検索後に更新を実行する (更新前に結果の後ろにデータを付加する)
prepend 検索後に更新を実行する (更新前に結果の前にデータを付加する)
incr 検索後に更新を実行する
decr 検索後に更新を実行する
delete 検索後に削除を実行する
flush_all テーブルを削除する

InnoDB memcached プラグインで使用される基礎テーブル

このセクションでは、InnoDB memcached プラグインによって使用される基礎テーブルについて説明します。

innodb_memcached_config.sql 構成スクリプトは InnoDB memcached プラグインによって必要となる 3 つのテーブルをインストールします。テーブルは専用の innodb_memcache データベースに作成されます。

mysql> USE innodb_memcache;
Database changed
mysql> SHOW TABLES;
+---------------------------+
| Tables_in_innodb_memcache |
+---------------------------+
| cache_policies            |
| config_options            |
| containers                |
+---------------------------+
3 rows in set (0.01 sec)

containers テーブル

containers テーブルは 3 つのテーブルの中でもっとも重要です。このテーブル内のエントリは、memcached 値を格納するために使用される InnoDB テーブル用のコンテナです。コンテナは、InnoDB テーブルのカラムを下記の表で示す値にマップします。このマッピングは memcachedInnoDB テーブルと一緒に機能するために必要です。

containers テーブルには test.demo_test テーブル用のデフォルトエントリがあります。InnoDB memcached プラグインを独自の InnoDB テーブルと一緒に使用するには、使用するテーブルのエントリを containers テーブルに追加する必要があります。

表 14.11 containers のカラム

カラム 説明
name コンテナに付与された名前。
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 値が複数カラムにマップされる場合、フラグ値はいくつかの操作 (incrprepend など) のカラム指定子として使用でき、その結果、指定されたカラムで操作が実行されます。たとえば、3 つのカラムに値をマップしていて、これらのカラムのうちの 1 つでインクリメント操作が実行する場合に、これらの操作に使用するカラムを指定するには flags を使用できます。flags カラムを使用しない場合は、未使用であることを示すためにその値を 0 に設定します。
cas_column 比較およびスワップ (cas) 値を格納する InnoDB テーブル内のカラム。cas_column 値と expire_time_column 値は、memcached が別のサーバーへのリクエストをハッシュし、データをメモリーにキャッシュする方法に関係します。InnoDB memcached プラグインは単一の memcached デーモンに強固に統合され、インメモリーキャッシュメカニズムは MySQL およびバッファープールによって処理されるため、このタイプの配備でこれらのカラムはほとんど必要ありません。これらのカラムを使用しない場合、値を 0 に設定してカラムが未使用であることを示します。
expire_time_column 有効期限の値を格納する InnoDB テーブル内のカラム。cas_column 値と expire_time_column 値は、memcached が別のサーバーへのリクエストをハッシュし、データをメモリーにキャッシュする方法に関係します。InnoDB memcached プラグインは単一の memcached デーモンに強固に統合され、インメモリーキャッシュメカニズムは MySQL およびバッファープールによって処理されるため、このタイプの配備でこれらのカラムはほとんど必要ありません。これらのカラムを使用しない場合、値を 0 に設定してカラムが未使用であることを示します。
unique_idx_name_on_key キーカラムのインデックスの名前。これは一意のインデックスである必要があります。これは主キーまたはセカンダリインデックスにできます。できれば、キーカラムを InnoDB テーブルの主キーにしてください。こうすることで、このカラムに対してセカンダリインデックスを使用するための検索ステップが省かれます。memcached 参照のためのカバリングインデックスは作成できません。キーカラムおよび値カラムの両方に複合セカンダリインデックスを定義しようとすると、InnoDB はエラーを返します。

containers テーブルカラムの制約

  • db_schemadb_namekey_columnsvalue_columns、および unique_idx_name_on_key の値を指定する必要があります。そうしない場合、セットアップは失敗します。flagscas_column、および expire_time_column が使用されない場合、これらに 0 を指定します。そうしないと、セットアップが失敗する場合があります。

  • key_columns: memcached で強制される、memcached キーの最大長は 250 文字です。最大長を超えるマップ済みのキーが使用された場合、操作は失敗します。マップ済みのキーは、Null 以外の CHAR または VARCHAR タイプである必要があります。

  • value_columns: CHARVARCHAR、または 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 に設定します。

カラム制約を強制するために、プラグインのロード時に事前検査が行われます。不一致が見つかった場合、プラグインはロードされません。

cache_policies テーブル

cache_policies テーブルは、InnoDB memcached セットアップ用のキャッシュポリシーを定義します。単一のキャッシュポリシー内で、getsetdelete、および flush 操作に対する個々のポリシーを指定できます。すべての操作のデフォルト設定は innodb_only です。

  • innodb_only: InnoDBmemcached のデータストアとして使用します。

  • cache-only: 従来の memcached エンジンをデータストアとして使用します。

  • innodb_only: InnoDB と従来の memcached エンジンの両方をデータストアとして使用します。この状況で、memcached がメモリー内からキーを検出できない場合、InnoDB テーブル内から値を検索します。

  • disable: キャッシュを無効にします。

表 14.12 cache_policies カラム

カラム 説明
policy_name キャッシュポリシーの名前。デフォルトのキャッシュポリシー名は cache_policy です。
get_policy get 操作のキャッシュポリシー。有効な値は、innodb_onlycache-onlycaching、または disabled です。デフォルト設定は innodb_only です。
set_policy set 操作のキャッシュポリシー。有効な値は、innodb_onlycache-onlycaching、または disabled です。デフォルト設定は innodb_only です。
delete_policy delete 操作のキャッシュポリシー。有効な値は、innodb_onlycache-onlycaching、または disabled です。デフォルト設定は innodb_only です。
flush_policy flush 操作のキャッシュポリシー。有効な値は、innodb_onlycache-onlycaching、または disabled です。デフォルト設定は innodb_only です。

config_options テーブル

config_options テーブルは、SQL を使用して実行時に変更できる memcached 関連の設定を格納します。現時点でサポートされる構成オプションは、separator および table_map_delimiter です。

表 14.13 config_options カラム

カラム 説明
Name memcached 関連の構成オプションの名前。現時点では、次の構成オプションが config_options テーブル経由でサポートされます。
  • separator: 複数の value_columns が定義されている場合に、1 つの長い文字列の値を別々の値に分離するために使用します。デフォルトでは、separator| 文字です。たとえば、値カラムとして col1, col2 を定義し、区切り文字として | を定義した場合、memcached で次のコマンドを発行すると、値を col1 および col2 にそれぞれ挿入できます。

    set keyx 10 0 19
    valuecolx|valuecoly

    valuecol1xcol1 に格納され、valuecolycol2 に格納されます。

  • table_map_delimiter: 特定のテーブル内のキーにアクセスするために、キー名に @@ 表記を使用するときの、スキーマ名とテーブル名を区切る文字。たとえば、@@t1.some_key@@t2.some_key は同じキー値を持っていますが、異なるテーブルに格納されます。

Value memcached 関連の構成オプションに割り当てられた値。


複数カラムのマッピング

  • プラグインの初期化中に、InnoDB memcached が、containers テーブル内に定義されている情報を使用して構成されるとき、value_columns から構文解析されるマップされた各カラムは、マップされたテーブルに照らして検証されます。複数カラムがマップされる場合、カラムがそれぞれ存在し、正しいタイプであるかどうかを確認するための検査があります。

  • 実行時に、memcached 挿入操作で、マップされたカラムの数よりも多くの区切り文字が値に存在する場合、マップされた値の数のみが取得されます。たとえば、マップされたカラムが 6 つで、区切られた値が 7 つ提供された場合、最初の 6 つの区切られた値のみが取得されます。7 番目の区切られた値は無視されます。

  • マップされたカラムより区切られた値の方が少ない場合、入力値のないカラムは NULL に設定されます。未記入カラムを NULL に指定できない場合、挿入は失敗します。

  • マップされた値より多くのカラムがテーブルにある場合、余分なカラムは出力結果に影響を及ぼしません。

テーブルの例

innodb_memcached_config.sql 構成スクリプトは、例として test データベース内にテーブル demo_test を作成します。また、追加のテーブルを作成することなく InnoDB memcached プラグインをただちに動作させることもできます。

container テーブルのエントリは、上記のいずれの目的で、どのカラムが使用されるかを定義します。

mysql> select * from innodb_memcache.containers;
+------+-----------+-----------+-------------+---------------+-------+------------+--------------------+------------------------+
| name | db_schema | db_table  | key_columns | value_columns | flags | cas_column | expire_time_column | unique_idx_name_on_key |
+------+-----------+-----------+-------------+---------------+-------+------------+--------------------+------------------------+
| aaa  | test      | demo_test | c1          | c2            | c3    | c4         | c5                 | PRIMARY                |
+------+-----------+-----------+-------------+---------------+-------+------------+--------------------+------------------------+
1 row in set (0.00 sec)

mysql> desc test.demo_test;
+-------+---------------------+------+-----+---------+-------+
| Field | Type                | Null | Key | Default | Extra |
+-------+---------------------+------+-----+---------+-------+
| c1    | varchar(32)         | NO   | PRI |         |       |
| c2    | varchar(1024)       | YES  |     | NULL    |       |
| c3    | int(11)             | YES  |     | NULL    |       |
| c4    | bigint(20) unsigned | YES  |     | NULL    |       |
| c5    | int(11)             | YES  |     | NULL    |       |
+-------+---------------------+------+-----+---------+-------+
5 rows in set (0.01 sec)

テーブル ID がキー名の @@ 表記によってリクエストされない場合は、次のようになります。

  • ある行の name 値が default の場合、対応するテーブルが memcached プラグインによって使用されます。したがって、innodb_memcache.containers の最初のエントリを demo_test テーブルより後ろに移動させた場合、name 値に default を使用します。

  • defaultinnodb_memcache.containers.name 値が存在しない場合、アルファベット順で先頭の name 値を持つ行が使用されます。


User Comments
Sign Up Login You must be logged in to post a comment.