Как добавить NoSQL-запросы в MySQL с помощью memcached в Ubuntu 14.04

Вступление

Общая идея использования memcached и его автономной реализации сервера с MySQL была описана во многих замечательных статьях, таких как https://www.digitalocean.com/community/tutorials/how-to-install-and-use-memcache- on-ubuntu-14-04 [Как установить и использовать Memcache в Ubuntu 14.04]. Однако memcached как автономный сервер работает в качестве посредника перед уровнем клиентского доступа MySQL и управляет информацией только в памяти без возможности постоянного ее хранения. Это делает его подходящим для таких задач, как кэширование результатов дублирующих запросов MySQL. Это экономит ресурсы и оптимизирует производительность загруженных сайтов.

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

Основное понимание

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

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

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

Некоторое понимание протокола memcached также необходимо. Memcached работает с элементами, которые имеют следующие части:

  • A - буквенно-цифровое значение, которое будет ключом для доступа к элементу.

  • A - Произвольные данные, в которых хранятся важные данные.

  • A - Обычно значение используется для настройки дополнительных параметров, связанных с основным значением. Например, это может быть флаг, использовать или нет сжатие.

  • An - Время истечения в секундах. Напомним, что memcached изначально разрабатывался с учетом кеширования.

  • A - Уникальный идентификатор каждого предмета.

Предпосылки

Это руководство было протестировано на Ubuntu 14.04. Описанные установка и конфигурация будут аналогичны для других версий ОС или ОС, но команды и расположение файлов конфигурации могут отличаться.

Вам понадобится следующее:

  • Ubuntu 14.04 свежая установка

  • Пользователь без полномочий root с правами sudo

Все команды в этом руководстве должны выполняться от имени пользователя без полномочий root. Если для этой команды требуется root-доступ, ему будет предшествовать + sudo +. Если это еще не сделано, следуйте этому руководству: Initial Настройка сервера с Ubuntu 14.04 ,

[[step-1-- installing-mysql-5-6]] === Шаг 1 - Установка MySQL 5.6

Плагин memcached в MySQL доступен в версиях MySQL выше 5.6.6. Это означает, что вы не можете использовать пакет MySQL (версия 5.5) из стандартного репозитория Ubuntu 14.04. Вместо этого вам придется:

  1. Добавьте официальный репозиторий MySQL

  2. Установите сервер MySQL, клиент и библиотеки с него

Сначала перейдите на страницу MySQL apt и загрузите пакет, который добавит хранилище MySQL в вашу систему Ubuntu 14.04. Вы можете скачать пакет прямо на свой дроплет:

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

Когда вы запускаете указанную выше команду, появляется мастер текстового режима с двумя вопросами:

  • Какой продукт MySQL вы хотите настроить? Ответьте с помощью + Server +.

  • Какую версию сервера вы хотите получить? Ответьте с помощью + mysql-5.6 +.

Ответив на эти два вопроса, вы вернетесь к первому вопросу о том, какой продукт вы хотите установить. Ответьте + Apply +, нижний вариант, чтобы подтвердить свой выбор и выйти из мастера.

Теперь, когда у вас есть новый репозиторий MySQL, вам придется обновить кэш apt, т.е. информация о доступных пакетах для установки в Ubuntu. Таким образом, когда вы решите установить MySQL, он будет извлечен из нового хранилища. Чтобы обновить кэш apt, выполните команду:

sudo apt-get update

После этого вы готовы установить MySQL 5.6 на Ubuntu 14.04 с помощью команды:

sudo apt-get install mysql-server

После запуска вышеуказанной команды вам будет предложено выбрать пароль администратора root (MySQL). Для удобства вы можете не устанавливать пароль на этом этапе, и при появлении запроса просто нажмите ENTER. Однако после того, как вы решите включить этот сервер в работу, рекомендуется запустить команду + sudo mysql_secure_installation +, чтобы защитить установку MySQL и настроить пароль root.

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

mysql -u 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

Чтобы подготовиться к установке плагина memcached, вы должны сначала выполнить запросы, найденные в файле + / 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 / + в Ubuntu 14.04. Этот файл доступен только в MySQL версии 5.6 и выше.

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

sudo vim /etc/mysql/my.cnf

Где-то после строки + [mysqld] + добавьте новую строку, содержащую:

/etc/mysql/my.cnf

daemon_memcached_option="-p11222 -l 127.0.0.1"

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

Чтобы запустить новый процесс прослушивания для плагина memcached, перезапустите сервер MySQL с помощью команды:

sudo service mysql restart

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

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

show plugins;

Если все хорошо, вы должны увидеть в выводе:

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

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

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

telnet localhost 11222

В случае успеха вы должны увидеть такой результат:

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

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

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

[[step-4 --running-nosql-queries-in-mysql-via-memcached-plugin]] === Шаг 4 - Запуск NoSQL-запросов в MySQL через плагин memcached

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

  • + c1 + реализует поле.

  • + c2 + реализует поле.

  • + c3 + реализует поле.

  • + c4 + реализует поле.

  • + c5 + реализует поле.

Таблица + demo_test + будет той, с которой мы будем тестировать. Сначала давайте откроем базу данных / таблицу с помощью клиента MySQL с помощью следующей команды:

mysql -u root

Или, если у вас установлен пароль MySQL:

mysql -u root  -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. Снова подключитесь к localhost по TCP-порту 11222:

telnet localhost 11222

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

set [] [] [] []
[]

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

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

set newkey 0 0 12
NewTestValue

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

get newkey

Результат должен быть:

VALUE newkey 0 12
NewTestValue

Вышеуказанные команды + set и` + get` действительны для каждого сервера memcached. Это были всего лишь несколько простых примеров того, как вставлять и извлекать записи в стиле NoSQL.

Теперь давайте снова подключимся к клиенту MySQL с помощью команды + mysql -u root test + или` + mysql -u root test -p + и снова просмотрим содержимое таблицы + demo_test + `с помощью команды qyery:

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, пожалуйста, ознакомьтесь с https://dev.mysql.com/doc/refman/5.6/en/innodb-memcached-internals.html[the плагин memcached внутренняя страница.

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

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

  • Все ваши данные (MySQL и NoSQL) могут храниться в одном месте. Вам не нужно устанавливать и поддерживать дополнительное программное обеспечение для данных NoSQL.

  • Сохранение данных, восстановление и репликация данных NoSQL возможны благодаря мощному механизму хранения InnoDB.

  • Невероятно быстрый слой доступа к данным из memcached можно по-прежнему использовать, чтобы вы могли работать с большими объемами информации по сравнению с более медленным клиентом MySQL.

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

Заключение

К концу этой статьи вы должны познакомиться с новыми возможностями для работы с данными NoSQL, предоставляемыми MySQL. Возможно, это не универсальное решение для замены выделенных серверов NoSQL, таких как MongoDB, но оно, безусловно, имеет свои преимущества.

Related