VIII. Le moteur BlackHole▲
- Licence : GPL
- Version de MySQL : 4.1.11
- Type : Autre
- Domaines d'application :
- Phase de développement
- Optimisation
- Administration de la structure SQL
VIII-A. Description▲
Voici l'un des derniers-nés des moteurs de stockage.
Le moteur BLACKHOLE est l'un des plus mystérieux. BLACKHOLE, comme en astrophysique, signifie "trou noir". Ce type de table accepte toutes requêtes d'insertion, mais ne renvoie aucun résultat. Il est néanmoins possible d'utiliser toutes les commandes SQL, mais il faut bien comprendre qu'il ne créera et ne modifiera aucune donnée.
Alors, à quoi peut bien servir ce moteur ? Il y a plusieurs utilisations possibles, dont certaines restent non négligeables.
VIII-B. Exemples d'application▲
VIII-B-1. Base de référence de performances▲
La première hypothèse consisterait à l'utiliser comme base de référence pour des tests de montée en charge.
Il faut pour cela, mesurer les performances avec le moteur BLACKHOLE sur le projet de base de données. Il faut ensuite effectuer les mêmes tests avec le moteur qui sera normalement utilisé en production (MyISAM, InnoDB etc.). En faisant une comparaison, il sera aisé d'obtenir un indice des performances de chaque moteur différent.
Ce fonctionnement peut être une bonne hypothèse d'utilisation.
VIII-B-2. Proxy MySQL▲
La première utilisation en production serait pour la réplication de données.
Il est possible de mettre un serveur BLACKHOLE comme maître, et d'autres serveurs avec d'autres moteurs comme esclaves. Le moteur BLACKHOLE en tant que maître, acceptera toutes les opérations d'écriture avec de très bonnes performances.
Même si les données ne sont pas stockées, elles seront disponibles dans le fichier de log binaire qui sera envoyé à chaque esclave. Le moteur BLACKHOLE ne sera là que pour relayer les modifications sans supporter les données. Il leur sert de PROXY.
L'avantage certain est qu'il n'y aura pas de problème de synchronisation et pas, ou très peu, de temps de latence entre maître et esclave.
Utilisation du Proxy MySQL via le moteur BLACKHOLE.
VIII-B-3. Déclencheur de cache de données▲
Une deuxième hypothèse serait l'utilisation du moteur BLACKHOLE comme déclencheur de cache de données MySQL.
MySQL peut stocker les données en mémoire afin d'augmenter les performances et réduire les accès disque. Pour ce faire, il faut charger toutes les données d'une table en mémoire via la commande SELECT * FROM maTable et injecter ces données dans une table de type BLACKHOLE ayant la même structure.
INSERT
INTO
maTableBlackHole SELECT
*
FROM
maTable
Ceci aura pour effet de déclencher le cache de MySQL lié à la lecture ou l'écriture d'une table, même si elle est sans fond.
Il est à noter tout de même, que cette utilisation mérite pas mal de tests pour être sûr du gain de performance réalisé. De plus, il faut bien configurer le cache de requêtes dans le fichier de configuration de MySQL.
Je vous invite à lire cet article : Étude pratique du cache de requêtes MySQL.
VIII-B-4. Recherche du coupable pour une opération gourmande▲
Lors d'une opération "gourmande" en CPU ou temps d'exécution, ce moteur peut s'avérer très utile. Il peut tester si votre script est en cause ou bien si le moteur choisi n'est pas adapté. Si lors du passage du script dans le moteur BLACKHOLE le temps d'exécution reste le même, alors le problème vient du script. Dans le cas contraire, cela vient peut-être d'un mauvais choix de moteur.
Ce moteur peut être très intéressant pour faire le choix d'un moteur approprié.
VIII-C. Fonctionnalités▲
- Ne présente que des avantages pour ce qui a été présenté.
- Peu de documentation.
- Faible disponibilité chez les hébergeurs.
VIII-D. Conclusion▲
Autour de ce moteur dont l'utilisation ne paraît pas claire à première vue, nous avons pu voir des domaines d'application où il peut se révéler très utile (maintenance, optimisation et administration).
Au vu de la documentation inexistante et des utilisations multiples possibles, il y a fort à parier que ce moteur fera parler de lui en ouvrant d'autres domaines d'application.
Il est regrettable qu'il ne soit pas plus répandu chez les hébergeurs.