Spec-Zone.ru › MySQL 5.7

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

Таблица 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

Таблица 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

Таблица 14.23 Столбцы config_options
Столбец Описание
Name Имя параметра конфигурации, связанного с memcached. Таблица config_options поддерживает следующие параметры конфигурации:
  • separator: Используется для разделения значений длинной строки на отдельные значения, когда определено несколько value_columns. По умолчанию separator - это символ |. Например, если вы определили столбцы col1, col2 в качестве столбцов значений и определили | в качестве разделителя, вы можете выполнить следующую команду memcached для вставки значений в col1 и col2 соответственно:

    set keyx 10 0 19
    valuecolx|valuecoly
    

    valuecol1x хранится в col1, а valuecoly - в col2.

  • table_map_delimiter: Символ, разделяющий имя схемы и имя таблицы при использовании нотации @@ в имени ключа для доступа к ключу в определенной таблице. Например, @@t1.some_key и @@t2.some_key имеют одинаковое значение ключа, но хранятся в разных таблицах.

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

Таблица 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, чтобы указать, что он не используется.

Предварительная проверка ограничений столбцов выполняется при загрузке плагина. Если несоответствия обнаружены, плагин не загружается.

Сопоставление столбцов со множественными значениями
  • Во время инициализации плагина, когда InnoDB memcached настроен с информацией, определенной в таблице 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.
https://docs.oracle.com/cd/E17952_01/mysql-5.7-en/innodb-memcached-internals.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API