Добавление NoSQL-запросов в MySQL с помощью memcached в Ubuntu 14.04

В автономном режиме memcached работает как посредник клиента MySQL и управляет информацией только в памяти без возможности ее продолжительного хранения. Потому эта система подходит для таких задач, как кэширование результатов дублированных запросов MySQL. Это экономит ресурсы и оптимизирует производительность загруженных сайтов.

Читайте также: Установка memcached в Ubuntu 14.04

Данный мануал научит работать с memcached совсем другим образом. Вы узнаете, как использовать memcached в качестве плагина MySQL, который поддерживает обработку NoSQL-запросов для управления информацией в обычных таблицах InnoDB. Этот подход имеет множество преимуществ.

Базовые понятия

Чтобы продолжить работу с данным мануалом, нужно ознакомиться с основными механизмами и понятиями NoSQL и memcached.

Проще говоря, NoSQL работает с информацией в виде элементов «ключ-значение». Этот, очевидно, более простой подход, чем стандартный SQL, и он предлагает более высокую производительность и масштабируемость, которые особенно нужны для работы с большими объемами информации (Big Data).

Однако хорошей производительности NoSQL недостаточно для замены обычного механизма SQL. Несмотря на простоту, NoSQL не подходит для структурированных данных со сложными отношениями между ними. Таким образом, NoSQL не может стать полной заменой SQL, но является важным дополнением к нему.

Что касается системы memcached, ее можно рассматривать как популярную реализацию NoSQL. Она очень быстрая и предлагает отличные механизмы кэширования. Это позволяет использовать эту систему как средство для интеграции NoSQL в традиционную СУБД MySQL.

Вот базовые понятия протокола memcached:

  • Ключ – буквенно-цифровое значение, которое открывает доступ к значению элемента.
  • Значение – произвольные данные, в которых сохраняется основная полезная нагрузка.
  • Флаг – обычно это значение, используемое для настройки дополнительных параметров, связанных с основным значением (например, есть флаг для включения сжатия, расширенного вывода и т.п.).
  • Срок действия – интервал времени в секундах, в течение которого кэшированные данные хранятся в памяти. Значение CAS – уникальный идентификатор каждого элемента.

Требования

  • Сервер Ubuntu 14.04, настроенный согласно этому руководству.
  • Пользователь с доступом к sudo. С помощью этого аккаунта нужно выполнить все руководство.

Описанные здесь инструкции сработают и в других современных операционных системах (с небольшими коррективами).

1: Установка MySQL

Плагин memcached для MySQL доступен с версий MySQL 5.6.6 и выше. Потому в не можете использовать стандартную версию MySQL 5.5 из репозитория Ubuntu 14.04. Вместо этого нужно:

  • Добавить официальный репозиторий MySQL.
  • Установить из него сервер, клиент и библиотеки MySQL.

Откройте страницу репозитория MySQL и добавьте его в систему.

wget https://dev.mysql.com/get/mysql-apt-config_0.3.5-1ubuntu14.04_all.deb

Затем установите загруженный пакет с помощью dpkg:

sudo dpkg -i mysql-apt-config_0.3.5-1ubuntu14.04_all.deb

Команда запустит мастер установки, который задаст два вопроса:

  1. Какой продукт MySQL вы хотите настроить? Выберите Server.
  2. Какую версию сервера вы хотите установить? Выберите mysql-5.6.

После ответа на второй вопрос мастер снова выведет первый вопрос. Выберите Apply, чтобы подтвердить принятые ранее варианты и закрыть мастер.

Теперь нужно будет обновить индекс пакетов, чтобы добавить данные о новом репозитории MySQL.

sudo apt-get update

Теперь можно установить MySQL 5.6:

sudo apt-get install mysql-server

Команда предложит выбрать root-пароль MySQL (пароль администратора). Для удобства вы можете пропустить этот запрос сейчас и просто нажать Enter. Позже, запуская сервер в производство, обязательно запустите сценарий mysql_secure_installation, который позволит добавить root-пароль и удалить тестовые данные MySQL.

По завершении процесса установки у вас будет сервер MySQL 5.6, клиент командной строки и необходимые библиотеки. Вы можете проверить установку с помощью команды:

mysql -u root

Если вы установили root пароль, вам нужно будет использовать следующую команду и ввести пароль администратора MySQL при появлении запроса:

mysql -u root -p
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.6.25 MySQL Community Server (GPL)
...

В клиентском терминале MySQL создайте БД test:

CREATE DATABASE test;

Эта база данных понадобится позже для тестирования.

Чтобы выйти из MySQL, введите:

quit

В качестве зависимости модуля memcached также потребуется установить пакет разработки библиотеки libevent-dev. Выполните команду:

sudo apt-get install libevent-dev

2: Установка плагина memcached в MySQL

Прежде чем установить плагин, нужно выполнить запросы из /usr/share/mysql/innodb_memcached_config.sql. Запустите клиент MySQL:

mysql -u root

Если вы установили пароль, введите:

mysql -u root -p

Затем выполните команду:

source /usr/share/mysql/innodb_memcached_config.sql;

Эта команда создаст все необходимые настройки для плагина в базе данных innodb_memcache, а также добавит некоторые примеры данных в БД test.

Теперь можно установить плагин memcached с помощью терминала MySQL:

install plugin daemon_memcached soname "libmemcached.so";

Закройте сессию MySQL:

quit

Эта команда устанавливает модуль memcached, который находится в каталоге /usr/lib/mysql/plugin/. Этот файл доступен только в MySQL версии 5.6 и выше.

По завершении установки нужно настроить прослушиватель memcached. Он позволяет подключиться к плагину memcached. Для этого откройте файл /etc/mysql/my.cnf:

sudo vim /etc/mysql/my.cnf

После строки [mysqld] нужно добавить такую строку:

daemon_memcached_option="-p11222 -l 127.0.0.1"

Эта строка настаивает прослушиватель memcached по порту 11222 только для локального IP 127.0.0.1. Это означает, что подключиться смогут только клиенты данного сервера. Если вы не укажете IP (-l 127.0.0.1), новый прослушиватель будет доступен в сети, что представляет серьезную угрозу безопасности. Если вас беспокоит безопасность модуля memcached, почитайте его документацию.

Чтобы запустить прослушиватель плагина memcached, перезапустите MySQL:

sudo service mysql restart

3: Тестирование плагина memcached

Чтобы убедиться, что установка прошла успешно, выполните следующую команду с клиента MySQL (запустите клиент с помощью mysql -u root или mysql -u root -p):

show plugins;

Если плагин был успешно установлен, вы увидите:

| daemon_memcached           | ACTIVE  | DAEMON             | libmemcached.so | GPL     |

Если вы не видите такой вывод, убедитесь, что используете MySQL версии 5.6 или выше, и вы точно выполнили все предыдущие инструкции по установке.

Вы также можете попытаться подключиться к интерфейсу memcached с помощью Telnet:

telnet localhost 11222
Connected to localhost.
Escape character is '^]'.

Теперь вы можете запустить общую команду, например stats, чтобы узнать, как работает это соединение. Чтобы закрыть запрос, одновременно нажмите CTRL и ] на клавиатуре. После этого введите quit, чтобы закрыть клиент Telnet.

4: Запуск NoSQL-запросов в MySQL с помощью плагина memcached

Ранее вы выполнили файл /usr/share/mysql/innodb_memcached_config.sql. Операторы этого файла создали новую тестовую таблицу demo_test в базе данных test. Таблица demo_test имеет следующие столбцы в соответствии с протоколом memcached:

  • с1 – поле ключей.
  • с2 – поле значений.
  • с3 – поле флагов.
  • с4 – поле значений CAS.
  • с5 – поле срока действия.

Используйте таблицу demo_test для тестирования. Откройте БД и таблицу с помощью клиента MySQL:

mysql -u root test

или:

mysql -u root test -p

В таблице demo_test уже есть одна строка:

SELECT * FROM demo_test;
+-------------+--------------+------+------+------+
| c1          | c2           | c3   | c4   | c5   |
+-------------+--------------+------+------+------+
| AA          | HELLO, HELLO |    8 |    0 |    0 |
+-------------+--------------+------+------+------+
1 rows in set (0.00 sec)

Закройте сессию MySQL:

quit

Создайте новую запись с помощью NoSQL-интерфейса memcached и telnet. Подключитесь по TCP-порту 11222:

telnet localhost 11222

Используйте следующий синтаксис:

set [ключ] [флаг] [срок_действия] [длина_в_байтах]
[значение]

Важно! Значение нужно писать с новой строки.

Кроме того, для каждой записи нужно указать длину в байтах.

В качестве примера попробуйте создать новый элемент (строку базы данных) с ключом newkey, значением 0 в поле флага, значением 0 в поле срока действия (срок действия не истечет никогда) и длиной в 12 байтов.

Конечно, значения можно извлекать с помощью интерфейса NoSQL. Для этого введите команду get и укажите ключ, который нужно извлечь. В сессии Telnet введите:

get newkey
VALUE newkey 0 12
NewTestValue

Команды set и get сработают на любом сервере memcached.

Теперь попробуйте подключиться к клиенту MySQL и проверить таблицу demo_test:

SELECT * FROM demo_test WHERE c1="newkey";

Вы увидите, что в ней появилась новая запись.

+--------+--------------+------+------+------+
| c1     | c2           | c3   | c4   | c5   |
+--------+--------------+------+------+------+
| newkey | NewTestValue |    0 |    1 |    0 |
+--------+--------------+------+------+------+

Сейчас вы можете задаться вопросом, как плагин memcached знает, к какой базе данных и таблице подключается и как сопоставляет информацию в столбцах таблицы. Ответ указан в базе данных innodb_memcache и ее таблице containers.

Запустите:

select * from 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
1 row in set (0.00 sec)

Чтобы узнать больше о создании различных маппингов и расширенных функциях модуля memcached, ознакомьтесь с документацией memcached.

Преимущества интеграции MySQL и memcached

Вышеприведенная информация и примеры описывают несколько важных преимуществ интеграции MySQL с NoSQL с помощью модуля memcached:

  • Все данные MySQL и NoSQL могут храниться в одном месте. Вам не нужно устанавливать и поддерживать дополнительное программное обеспечение для данных NoSQL.
  • Сохраняемость данных, восстановление и репликация данных NoSQL возможна благодаря мощному механизму хранения InnoDB.
  • Плагин memcached позволяет быстро обрабатывать больше информации (по сравнению с более медленным клиентом MySQL).

Данными NoSQL можно управлять с помощью интерфейса и синтаксиса MySQL. Таким образом, вы можете включать данные NoSQL в более сложные SQL-запросы.

Tags: , ,