MySQL 8.0 リファレンスマニュアル


MySQL 8.0 リファレンスマニュアル  /  ...  /  InnoDB memcached の複数の get および Range クエリーのサポート

15.20.4 InnoDB memcached の複数の get および Range クエリーのサポート

daemon_memcached プラグインは、複数の get 操作 (単一の memcached クエリーで複数のキーと値のペアをフェッチ) および範囲クエリーをサポートしています。

複数の get 操作

単一の memcached クエリーで複数のキーと値のペアをフェッチする機能により、クライアントとサーバー間の通信トラフィックが削減され、読取りパフォーマンスが向上します。 InnoDB の場合、トランザクションおよびオープンテーブル操作が少なくなります。

次の例は、複数データセットのサポートを示しています。 この例では、新しいテーブルとカラムのマッピングの作成 で説明されている test.city テーブルを使用します。

mysql> USE test;
mysql> SELECT * FROM test.city;
+---------+-----------+-------------+---------+-------+------+--------+
| city_id | name      | state       | country | flags | cas  | expiry |
+---------+-----------+-------------+---------+-------+------+--------+
| B       | BANGALORE | BANGALORE   | IN      |     0 |    1 |      0 |
| C       | CHENNAI   | TAMIL NADU  | IN      |     0 |    0 |      0 |
| D       | DELHI     | DELHI       | IN      |     0 |    0 |      0 |
| H       | HYDERABAD | TELANGANA   | IN      |     0 |    0 |      0 |
| M       | MUMBAI    | MAHARASHTRA | IN      |     0 |    0 |      0 |
+---------+-----------+-------------+---------+-------+------+--------+

get コマンドを実行して、city テーブルからすべての値を取得します。 結果はキーと値のペアの順序で返されます。

telnet 127.0.0.1 11211
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
get B C D H M
VALUE B 0 22
BANGALORE|BANGALORE|IN
VALUE C 0 21
CHENNAI|TAMIL NADU|IN
VALUE D 0 14
DELHI|DELHI|IN
VALUE H 0 22
HYDERABAD|TELANGANA|IN
VALUE M 0 21
MUMBAI|MAHARASHTRA|IN
END

単一の get コマンドで複数の値を取得する場合、(@@containers.name テーブル記法を使用して) テーブルを切り替えて最初のキーの値を取得できますが、後続のキーのテーブルを切り替えることはできません。 たとえば、この例のテーブルスイッチは有効です:

get @@aaa.AA BB
VALUE @@aaa.AA 8 12
HELLO, HELLO
VALUE BB 10 16
GOODBYE, GOODBYE
END

同じ get コマンドでテーブルの切替えを再試行して別のテーブルからキー値を取得することはサポートされていません。

複数の get 操作で取得できるキーの数に制限はありませんが、結果を格納するための 128MB のメモリー制限があります。

範囲クエリー

範囲クエリーの場合、daemon_memcached プラグインでは次の比較演算子がサポートされます: <, >, <=, >=。 演算子の前に@記号を付ける必要があります。 範囲クエリーで複数の一致するキーと値のペアが見つかった場合、結果はキーと値のペアの順序で返されます。

次の例は、範囲クエリーのサポートを示しています。 この例では、新しいテーブルとカラムのマッピングの作成 で説明されている test.city テーブルを使用します。

mysql> SELECT * FROM test.city;
+---------+-----------+-------------+---------+-------+------+--------+
| city_id | name      | state       | country | flags | cas  | expiry |
+---------+-----------+-------------+---------+-------+------+--------+
| B       | BANGALORE | BANGALORE   | IN      |     0 |    1 |      0 |
| C       | CHENNAI   | TAMIL NADU  | IN      |     0 |    0 |      0 |
| D       | DELHI     | DELHI       | IN      |     0 |    0 |      0 |
| H       | HYDERABAD | TELANGANA   | IN      |     0 |    0 |      0 |
| M       | MUMBAI    | MAHARASHTRA | IN      |     0 |    0 |      0 |
+---------+-----------+-------------+---------+-------+------+--------+

telnet セッションを開きます:

telnet 127.0.0.1 11211
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.

B より大きいすべての値を取得するには、get @>B を入力します:

get @>B
VALUE C 0 21
CHENNAI|TAMIL NADU|IN
VALUE D 0 14
DELHI|DELHI|IN
VALUE H 0 22
HYDERABAD|TELANGANA|IN
VALUE M 0 21
MUMBAI|MAHARASHTRA|IN
END

M より小さいすべての値を取得するには、get @<M を入力します:

get @<M
VALUE B 0 22
BANGALORE|BANGALORE|IN
VALUE C 0 21
CHENNAI|TAMIL NADU|IN
VALUE D 0 14
DELHI|DELHI|IN
VALUE H 0 22
HYDERABAD|TELANGANA|IN
END

M 以下のすべての値を取得するには、get @<=M を入力します:

get @<=M
VALUE B 0 22
BANGALORE|BANGALORE|IN
VALUE C 0 21
CHENNAI|TAMIL NADU|IN
VALUE D 0 14
DELHI|DELHI|IN
VALUE H 0 22
HYDERABAD|TELANGANA|IN
VALUE M 0 21
MUMBAI|MAHARASHTRA|IN

B より大きく、M より小さい値を取得するには、get @>B@<M を入力します:

get @>B@<M
VALUE C 0 21
CHENNAI|TAMIL NADU|IN
VALUE D 0 14
DELHI|DELHI|IN
VALUE H 0 22
HYDERABAD|TELANGANA|IN
END

最大 2 つの比較演算子を解析できます。1 つは次より小さい (@<) 演算子または次以下 (@<=) 演算子で、もう 1 つは次より大きい (@>) 演算子または次以上 (@>=) 演算子です。 追加の演算子はキーの一部とみなされます。 たとえば、3 つの演算子を使用して get コマンドを発行すると、3 つ目の演算子 (@>C) はキーの一部として扱われ、get コマンドは M より小さく B@>C より大きい値を検索します。

get @<M@>B@>C
VALUE C 0 21
CHENNAI|TAMIL NADU|IN
VALUE D 0 14
DELHI|DELHI|IN
VALUE H 0 22
HYDERABAD|TELANGANA|IN

関連キーワード:  InnoDB, テーブル, IN, VALUE, 構成, DELHI, 複数, 圧縮, スペース, ロック