14.21.7 Внутреннее устройство плагина InnoDB memcached
InnoDB API для плагина InnoDB memcached
Движок InnoDB memcached обращается к InnoDB через InnoDB API, большая часть которых напрямую адаптирована из встроенного InnoDB. Функции API InnoDB передаются в движок InnoDB memcached как функции обратного вызова. Функции API InnoDB напрямую обращаются к таблицам InnoDB и в основном представляют собой операции DML, за исключением TRUNCATE TABLE.
Команды memcached реализуются через API InnoDB memcached. В следующей таблице показано, как команды memcached сопоставляются с операциями DML или DDL.
Таблица 14.21 Команды 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) |
Конфигурационные таблицы плагина InnoDB memcached
В этом разделе описаны конфигурационные таблицы, используемые плагином daemon_memcached. Таблицы cache_policies, config_options и containers создаются скриптом конфигурации innodb_memcached_config.sql в базе данных innodb_memcache.
mysql> USE innodb_memcache;
Database changed
mysql> SHOW TABLES;
+---------------------------+
| Tables_in_innodb_memcache |
+---------------------------+
| cache_policies |
| config_options |
| containers |
+---------------------------+
Таблица cache_policies
Таблица cache_policies определяет политику кэширования для установки InnoDB memcached. Вы можете указать отдельные политики для операций get, set, delete и flush в рамках одной политики кэширования. По умолчанию для всех операций используется innodb_only.
innodb_only: ИспользоватьInnoDBв качестве хранилища данных.cache_only: Использовать движок memcached в качестве хранилища данных.caching: Использовать иInnoDB, и движок memcached в качестве хранилищ данных. В этом случае, если memcached не находит ключ в памяти, он ищет значение в таблицеInnoDB.disable: Отключить кэширование.
Таблица 14.22 Столбцы cache_policies
| Столбец | Описание |
|---|---|
policy_name | Имя политики кэширования. По умолчанию имя политики кэширования - cache_policy. |
get_policy | Политика кэширования для операций получения. Допустимые значения: innodb_only, cache_only, caching или disabled. По умолчанию используется innodb_only. |
set_policy | Политика кэширования для операций записи. Допустимые значения: innodb_only, cache_only, caching или disabled. По умолчанию используется innodb_only. |
delete_policy | Политика кэширования для операций удаления. Допустимые значения: innodb_only, cache_only, caching или disabled. По умолчанию используется innodb_only. |
flush_policy | Политика кэширования для операций сброса. Допустимые значения: innodb_only, cache_only, caching или disabled. По умолчанию используется innodb_only. |
Таблица config_options
Таблица config_options хранит параметры, связанные с memcached, которые можно изменить во время выполнения с помощью SQL. Поддерживаются параметры конфигурации separator и table_map_delimiter.
Таблица 14.23 Столбцы config_options
| Столбец | Описание |
|---|---|
Name | Имя параметра конфигурации, связанного с memcached. Таблица config_options поддерживает следующие параметры конфигурации:
|
Value | Значение, присвоенное параметру конфигурации, связанному с memcached. |
Таблица containers
Таблица containers является самой важной из трёх таблиц конфигурации. Каждая таблица InnoDB, используемая для хранения значений memcached, должна иметь запись в таблице containers. Запись предоставляет отображение между столбцами таблицы InnoDB и столбцами таблицы контейнеров, что необходимо для работы плагина memcached с таблицами InnoDB.
Таблица containers содержит стандартную запись для таблицы test.demo_test, создаваемую скриптом конфигурации innodb_memcached_config.sql. Для использования плагина daemon_memcached со своей таблицей InnoDB, необходимо создать запись в таблице containers.
Таблица 14.24 Столбцы таблицы containers
| Столбец | Описание |
|---|---|
name | Имя контейнера. Если таблица InnoDB не запрошена по имени с использованием обозначения @@, плагин InnoDB использует таблицу daemon_memcached со значением containers.name, равным default. Если такой записи нет, первая запись в таблице containers, отсортированная по алфавиту по полю name (по возрастанию), определяет таблицу по умолчанию InnoDB. |
db_schema | Имя базы данных, в которой находится таблица InnoDB. Это обязательное значение. |
db_table | Имя таблицы InnoDB, хранящей значения memcached. Это обязательное значение. |
key_columns | Столбец в таблице InnoDB, содержащий значения ключей для поиска в операциях с memcached. Это обязательное значение. |
value_columns | Столбцы таблицы InnoDB (один или несколько), хранящие данные memcached. Несколько столбцов могут быть указаны, используя разделитель, определенный в таблице innodb_memcached.config_options. По умолчанию разделитель — символ вертикальной черты (“|”). Для указания нескольких столбцов разделите их указанным символом. Например: col1|col2|col3. Это обязательное значение. |
flags | Столбцы таблицы InnoDB, используемые в качестве флагов (пользовательское числовое значение, хранящееся и извлекаемое вместе с основным значением) для memcached. Значение флага может использоваться в качестве спецификатора столбца для некоторых операций (например, incr, prepend), если значение memcached сопоставлено с несколькими столбцами, чтобы операция выполнялась на заданном столбце. Например, если вы сопоставили value_columns с тремя столбцами таблицы InnoDB и хотите, чтобы операция инкремента выполнялась только на одном столбце, используйте столбец flags для указания столбца. Если вы не используете столбец flags, установите значение 0, чтобы указать, что он не используется. |
cas_column | Столбец таблицы InnoDB, хранящий значения compare-and-swap (cas). Значение cas_column связано со способом, которым memcached хеширует запросы к различным серверам и кэширует данные в памяти. Поскольку плагин InnoDB memcached тесно интегрирован с одним демоном memcached, а механизм кэширования в памяти обрабатывается MySQL, этот столбец редко используется. Если вы не используете этот столбец, установите значение 0, чтобы указать, что он не используется. |
expire_time_column | Столбец таблицы InnoDB, хранящий значения истечения срока действия. Значение expire_time_column связано со способом, которым memcached хеширует запросы к различным серверам и кэширует данные в памяти. Поскольку плагин InnoDB memcached тесно интегрирован с одним демоном memcached, а механизм кэширования в памяти обрабатывается MySQL, этот столбец редко используется. Если вы не используете этот столбец, установите значение 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. Укажите0дляflags,cas_columnиexpire_time_column, если они не используются. Отсутствие этого может привести к сбоям вашей настройки.key_columns: Максимальный размер ключа memcached составляет 250 символов, что контролируется memcached. Сопоставленный ключ должен быть непустымCHARилиVARCHARтипом.value_columns: Должен быть сопоставлен со столбцом типаCHAR,VARCHARилиBLOB. Ограничений по длине нет, и значение может быть NULL.cas_column: Значениеcas— 64-битное целое число. Оно должно быть сопоставлено сBIGINTпо меньшей мере 8 байтов. Если вы не используете этот столбец, установите значение0, чтобы указать, что он не используется.expiration_time_column: Должен быть сопоставлен сINTEGERпо меньшей мере 4 байтов. Время истечения срока действия определяется как 32-битное целое число для Unix time (количество секунд с 1 января 1970 г. как 32-битовое значение) или количество секунд, начиная с текущего времени. В последнем случае количество секунд не должно превышать 60*60*24*30 (количество секунд в 30 днях). Если отправленное клиентом число больше, сервер рассматривает его как действительное значение Unix time, а не как смещение от текущего времени. Если вы не используете этот столбец, установите значение0, чтобы указать, что он не используется.flags: Должен быть сопоставлен сINTEGERпо меньшей мере 32 бит и может быть NULL. Если вы не используете этот столбец, установите значение0, чтобы указать, что он не используется.
Предварительная проверка ограничений столбцов выполняется при загрузке плагина. Если несоответствия обнаружены, плагин не загружается.
Сопоставление столбцов со множественными значениями
Во время инициализации плагина, когда
InnoDBmemcached настроен с информацией, определенной в таблицеcontainers, каждый сопоставленный столбец, определенный вcontainers.value_columns, проверяется на предмет соответствия сопоставленной таблицеInnoDB. Если сопоставлено несколько столбцов таблицыInnoDB, выполняется проверка, чтобы убедиться, что каждый столбец существует и имеет правильный тип.Во время выполнения для операций вставки
memcached, если количество разделителей значений больше, чем количество сопоставленных столбцов, берётся только количество сопоставленных значений. Например, если сопоставлено шесть столбцов, а предоставлено семь разделителей, берутся только первые шесть разделителей. Седьмой разделитель игнорируется.Если количество разделителей значений меньше, чем количество сопоставленных столбцов, незаполненные столбцы устанавливаются в NULL. Если незаполненный столбец не может быть установлен в NULL, операции вставки завершаются ошибкой.
Если в таблице больше столбцов, чем сопоставленных значений, дополнительные столбцы не влияют на результаты.
Пример таблицы demo_test
Скрипт конфигурации innodb_memcached_config.sql создаёт таблицу demo_test в базе данных test, которую можно использовать для проверки установки плагина InnoDB memcached сразу после настройки.
Скрипт конфигурации innodb_memcached_config.sql также создаёт запись для таблицы demo_test в таблице innodb_memcache.containers.
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 |
+----+------------------+------+------+------+
© 2025 Oracle
Licensed under the GPLv2 License.