Comment ajouter des requêtes NoSQL à MySQL avec memcached sur Ubuntu 14.04

introduction

L’idée générale d’utiliser memcached et son implémentation de serveur autonome avec MySQL ont été décrites dans de nombreux articles de qualité, tels que celui https://www.digitalocean.com/community/tutorials/how-to-install-and-use-memcache- on-ubuntu-14-04 [Comment installer et utiliser Memcache sur Ubuntu 14.04]. Cependant, memcached en tant que serveur autonome fonctionne en tant qu’intermédiaire devant la couche d’accès client MySQL et gère les informations uniquement en mémoire sans possibilité de les stocker de manière persistante. Cela le rend approprié pour des tâches telles que la mise en cache des résultats de requêtes MySQL en double. Cela économise des ressources et optimise les performances des sites occupés.

Cependant, dans cet article, nous discuterons de quelque chose de différent. Memcached sera installé comme un plugin MySQL et étroitement intégré à MySQL. Il fournira une couche d’accès de style NoSQL pour la gestion des informations directement dans les tables MySQL InnoDB standard. Cela présente de nombreux avantages, comme nous le verrons plus loin dans cet article.

Compréhension de base

Pour pouvoir suivre cet article, vous aurez besoin de connaissances de base sur ce que sont NoSQL et memcached. En termes simples, NoSQL utilise des informations sous la forme d’éléments clé-valeur (s). Cette approche évidemment plus simple que le SQL standard suggère de meilleures performances et une meilleure évolutivité, qui sont particulièrement recherchées pour travailler avec de grandes quantités d’informations (Big Data).

Cependant, les bonnes performances de NoSQL ne suffisent pas pour remplacer le SQL habituel. La simplicité de NoSQL le rend inadapté aux données structurées comportant des relations complexes. Ainsi, NoSQL n’est pas un remplacement du SQL mais un ajout important à celui-ci.

En ce qui concerne memcached, cela peut être considéré comme une implémentation populaire de NoSQL. Il est très rapide et possède d’excellents mécanismes de mise en cache, comme son nom l’indique. C’est pourquoi il constitue un excellent choix pour intégrer le style NoSQL à la version traditionnelle de MySQL.

Une certaine compréhension du protocole memcached est également nécessaire. Memcached fonctionne avec des éléments comportant les parties suivantes:

  • A - Valeur alphanumérique qui sera la clé pour accéder à l’élément.

  • A - Données arbitraires où la charge utile essentielle est conservée.

  • A - Habituellement une valeur utilisée pour configurer des paramètres supplémentaires liés à la valeur principale. Par exemple, il peut s’agir d’un indicateur d’utilisation ou non de la compression.

  • An - Délai d’expiration en secondes. Rappelez-vous que memcached a été conçu à l’origine avec la mise en cache.

  • A - Identifiant unique de chaque article.

Conditions préalables

Ce guide a été testé sur Ubuntu 14.04. L’installation et la configuration décrites seraient similaires sur d’autres systèmes d’exploitation ou versions du système d’exploitation, mais les commandes et l’emplacement des fichiers de configuration peuvent varier.

Vous aurez besoin des éléments suivants:

  • Ubuntu 14.04 nouvelle installation

  • Utilisateur non root avec privilèges sudo

Toutes les commandes de ce didacticiel doivent être exécutées en tant qu’utilisateur non root. Si un accès root est requis pour la commande, il sera précédé de + sudo +. Si vous ne l’avez pas déjà configuré, suivez ce tutoriel: Initial Initial Server Setup with Ubuntu 14.04 .

[[step-1-- installing-mysql-5-6]] === Étape 1 - Installer MySQL 5.6

Le plugin memcached dans MySQL est disponible dans les versions de MySQL supérieures à 5.6.6. Cela signifie que vous ne pouvez pas utiliser le package MySQL (version 5.5) à partir du référentiel Ubuntu 14.04 standard. Au lieu de cela, vous devrez:

  1. Ajouter le dépôt officiel MySQL

  2. Installez le serveur MySQL, le client et les bibliothèques à partir de celui-ci

Commencez par vous rendre sur la page de référentiel MySQL apt et téléchargez le paquet qui ajoutera le référentiel MySQL à votre système Ubuntu 14.04. Vous pouvez télécharger le package directement sur votre Droplet:

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

Ensuite, installez-le avec + dpkg +:

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

Lorsque vous exécutez la commande ci-dessus, un assistant en mode texte apparaît avec deux questions:

  • Quel produit MySQL souhaitez-vous configurer? Répondez avec + Server +.

  • Quelle version de serveur souhaitez-vous recevoir? Répondez avec + mysql-5.6 +.

Une fois que vous avez répondu à ces deux questions, vous revenez à la première question sur le produit que vous souhaitez installer. Répondez avec «+ Appliquer +», le choix du bas, pour confirmer vos choix et quitter l’assistant.

Maintenant que vous avez le nouveau repo MySQL, vous devrez mettre à jour le cache d’apt, c.-à-d. les informations sur les paquets disponibles pour l’installation dans Ubuntu. Ainsi, lorsque vous choisissez d’installer MySQL, il sera extrait du nouveau référentiel. Pour mettre à jour le cache apt, lancez la commande:

sudo apt-get update

Après cela, vous êtes prêt à installer MySQL 5.6 sur Ubuntu 14.04 avec la commande:

sudo apt-get install mysql-server

Une fois que vous avez exécuté la commande ci-dessus, il vous sera demandé de choisir un mot de passe root MySQL (administrateur). Pour plus de commodité, vous pouvez choisir de ne pas définir de mot de passe à ce stade et lorsque vous y êtes invité, appuyez simplement sur ENTREE. Cependant, lorsque vous décidez de transformer ce serveur en production, il est recommandé d’exécuter la commande + sudo mysql_secure_installation + pour sécuriser votre installation MySQL et configurer un mot de passe root.

Une fois le processus d’installation terminé, le serveur MySQL 5.6 sera installé avec son client en ligne de commande et les bibliothèques nécessaires. Vous pouvez le vérifier en démarrant le client avec la commande:

mysql -u root

Si vous définissez un mot de passe, vous devrez utiliser la commande suivante et entrer votre mot de passe root MySQL lorsque vous y êtes invité:

mysql -u root -p

Tu devrais voir:

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)
...

Toujours dans le moniteur MySQL (terminal client), créez une nouvelle base de données nommée + test:

CREATE DATABASE test;

Nous aurons besoin de cette base de données plus tard pour nos tests.

Pour quitter le type de client MySQL:

quit

Enfin, en tant que dépendance du plugin memcached, vous devrez également installer le package de développement de la bibliothèque de notifications d’événements asynchrones - + libevent-dev +. Pour ce faire, exécutez la commande:

sudo apt-get install libevent-dev

Étape 2 - Installer le plugin memcached dans MySQL

Pour préparer l’installation du plugin memcached, vous devez d’abord exécuter les requêtes contenues dans le fichier + / usr / share / mysql / innodb_memcached_config.sql +. Démarrez le client MySQL:

mysql -u root

ou, si vous définissez un mot de passe:

mysql -u root -p

et exécuter:

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

Ceci créera tous les paramètres nécessaires pour le plugin dans la base de données + innodb_memcache + et insérera également quelques données d’exemple dans notre base de données nouvellement créée + test +.

Ensuite, vous pouvez effectuer l’installation du plugin memcached à partir du terminal MySQL avec la commande suivante:

install plugin daemon_memcached soname "libmemcached.so";

Quittez la session MySQL:

quit

Cela installe le plugin memcached qui se trouve dans le répertoire + / usr / lib / mysql / plugin / + sous Ubuntu 14.04. Ce fichier est disponible uniquement dans MySQL version 5.6 et ultérieure.

Une fois l’installation terminée, vous devez configurer l’écouteur de plug-in memcached. Vous en aurez besoin pour vous connecter au plugin memcached. Pour cela, ouvrez le fichier + / etc / mysql / my.cnf + avec votre éditeur préféré comme ceci:

sudo vim /etc/mysql/my.cnf

Quelque part après la ligne + [mysqld] +, ajoutez une nouvelle ligne contenant:

/etc/mysql/my.cnf

daemon_memcached_option="-p11222 -l 127.0.0.1"

Ce qui précède configure l’écouteur de plug-in memcached sur le port 11222 activé uniquement pour l’IP de bouclage 127.0.0.1. Cela signifie que seuls les clients de Droplet pourront se connecter. Si vous omettez la partie sur l’IP (+ -l 127.0.0.1 +), le nouvel auditeur sera librement accessible de partout, ce qui constitue un risque grave pour la sécurité. Si vous êtes également préoccupé par la sécurité du plugin memcached, veuillez consulter its documentation de sécurité.

Pour démarrer le nouveau processus d’écoute du plugin memcached, redémarrez le serveur MySQL avec la commande suivante:

sudo service mysql restart

Étape 3 - Test du plugin memcached

Pour vérifier que l’installation est réussie, exécutez la commande MySQL suivante à partir du client MySQL (démarrez le client avec + mysql -u root + ou + mysql -u root -p +):

show plugins;

Si tout va bien, vous devriez voir dans la sortie:

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

Si vous ne le voyez pas, assurez-vous d’utiliser MySQL version 5.6 ou ultérieure et de suivre à la lettre les instructions d’installation.

Vous pouvez également essayer de vous connecter à la nouvelle interface de plug-in memcached avec Telnet à partir de votre Droplet, comme suit:

telnet localhost 11222

En cas de succès, vous devriez voir des résultats tels que:

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

Maintenant, vous pouvez exécuter une commande générique telle que + stats +, pour les statistiques, pour voir comment cette connexion fonctionne. Pour quitter l’invite, appuyez simultanément sur les combinaisons de touches CTRL et] de votre clavier. Après cela, tapez + quit + pour quitter le client Telnet lui-même.

Telnet vous offre le moyen le plus simple de vous connecter au plugin memcached et aux données MySQL. C’est bon pour les tests, mais lorsque vous décidez de l’utiliser de manière professionnelle, vous devez utiliser les bibliothèques disponibles pour les langages de programmation courants tels que PHP et Python.

[[step-4 --running-nosql-queries-in-mysql-via-memcached-plugin]] === Étape 4 - Exécuter des requêtes NoSQL dans MySQL via le plugin memcached

Si vous revenez à la partie installation du plugin memcached dans cet article, vous verrez que nous avons exécuté les instructions du fichier + / usr / share / mysql / innodb_memcached_config.sql +. Ces instructions ont créé une nouvelle table + demo_test dans la base de données` + test`. La table + demo_test + contient les colonnes suivantes conformes au protocole memcached:

  • + c1 + implémente le champ.

  • + c2 + implémente le champ.

  • + c3 + implémente le champ.

  • + c4 + implémente le champ.

  • + c5 + implémente le champ.

La table + demo_test + sera celle avec laquelle nous allons tester. Commençons par ouvrir la base de données / table avec le client MySQL avec la commande suivante:

mysql -u root

Ou, si vous avez défini un mot de passe MySQL:

mysql -u root  -p

Il devrait déjà y avoir une ligne dans la table + demo_test +:

SELECT * FROM demo_test;

Les résultats devraient ressembler à:

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

Quittez la session MySQL:

quit

Créons maintenant un deuxième enregistrement à l’aide de l’interface memSache NoSQL et de telnet. Connectez-vous à nouveau à localhost sur le port TCP 11222:

telnet localhost 11222

Ensuite, utilisez la syntaxe suivante:

set [] [] [] []
[]

Notez que le doit être sur une nouvelle ligne. En outre, pour chaque enregistrement, vous devez spécifier la longueur en octets de la valeur lorsque vous utilisez la méthode ci-dessus.

Par exemple, créons un nouvel élément (ligne de la base de données) avec la clé + newkey +, la valeur + 0 + pour l’indicateur et la valeur + 0 + pour l’expiration (ne jamais expirer). La valeur aura une longueur de 12 octets.

set newkey 0 0 12
NewTestValue

Bien entendu, vous pouvez également récupérer des valeurs via cette interface NoSQL. Ceci est fait avec la commande + get + qui est suivie du nom de la clé que vous voulez récupérer. Toujours dans la session Telnet, tapez:

get newkey

Le résultat devrait être:

VALUE newkey 0 12
NewTestValue

Les commandes + set et` + get` ci-dessus sont valides pour chaque serveur memcached. Ce ne sont là que quelques exemples simples pour insérer et récupérer des enregistrements dans un style NoSQL.

Maintenant connectons-nous à nouveau au client MySQL avec la commande + mysql -u test de racine + ou` + mysql -u test de racine -p + et voyons à nouveau le contenu de la table + demo_test + `avec exécutez la requête:

SELECT * FROM demo_test WHERE c1="newkey";

Là vous devriez voir la nouvelle ligne créée comme ceci:

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

Vous vous demandez peut-être maintenant comment le plug-in memcached sait à quelle base de données et à quelle table se connecter et comment mapper les informations aux colonnes de la table. La réponse se trouve dans la base de données + innodb_memcache + et sa table + conteneurs +.

Exécutez cette instruction select:

select * from containers \G

Vous verrez ce qui suit:

*************************** 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)

Pour en savoir plus sur la façon de créer différents mappages et découvrir les fonctionnalités avancées du plugin memcached, veuillez consulter le plugin memcached page interne.

Avantages de l’intégration de MySQL avec le plugin memcached

Les informations et exemples ci-dessus décrivent quelques avantages importants de l’intégration de MySQL avec NoSQL via le plugin memcached:

  • Toutes vos données (MySQL et NoSQL) peuvent être conservées au même endroit. Vous n’avez pas besoin d’installer ni de maintenir de logiciel supplémentaire pour les données NoSQL.

  • La persistance, la récupération et la réplication des données NoSQL sont possibles grâce au puissant moteur de stockage InnoDB.

  • La couche d’accès aux données memcached incroyablement rapide peut toujours être utilisée, ce qui vous permet de travailler avec des volumes d’informations plus importants que lorsque vous travaillez avec un client MySQL plus lent.

  • Les données NoSQL peuvent être gérées avec l’interface et la syntaxe MySQL. Ainsi, vous pouvez inclure des données NoSQL dans des requêtes SQL plus complexes telles que les jointures à gauche.

Conclusion

À la fin de cet article, vous devriez être familiarisé avec les nouvelles possibilités d’utilisation des données NoSQL fournies par MySQL. Ce n’est peut-être pas une solution universelle pour remplacer des serveurs NoSQL dédiés tels que MongoDB, mais cela a certainement ses mérites.

Related