Carnet Web de Poy

Aller au contenu | Aller au menu | Aller à la recherche

vendredi, avril 21 2006

Moteur de stockage transactionnel Falcon pour MySQL

Pour faire suite à l'annonce, en début de semaine, d'un nouveau moteur de stockage transactionnel pour MySQL, SolidDB de la société Solid Information Technology.

Jim Starkey, créateur de la base de données InterBase, et embauché en début d'année chez MySQL, a annoncé qu'il parlerait du nouveau moteur de stockage transactionnel "maison" de chez MySQL, de nom de code "Falcon", lors de la prochaine User Conference, qui a lieu la semaine prochaine.

Diagramme de la base information_schema

La base information_schema contient toutes les métadonnées sur le serveur MySQL. Les métadonnées sont les informations sur les données, telles que la liste des bases de données, des tables, le type des données, des colonnes, les procédures stockées, ou bien les droits d'accès. On appelle aussi ces données le "dictionnaire de données" ou le "catalogue système", et toutes ces informations sont accessibles à l'aide de requêtes SQL classiques.

Roland Bouman maintient depuis juin 2005 un diagramme de la base information_schema, disponible sous forme d'image GIF.

mercredi, avril 19 2006

Moteur de stockage transactionnel SolidDB pour MySQL

MySQL risque de bientôt avoir à disposition un nouveau moteur de stockage transactionnel, grâce au moteur de stockage SolidDB de la société Solid Information Technology.

En octobre dernier, Oracle a racheté la société Innobase, et son moteur de stockage InnoDB, qui était un composant essentiel pour la base de données libre MySQL. Puis, en février, Oracle a ensuite racheté la société Sleepycat Software, et son moteur de stockage Berkeley DB. Ces rachats ont fait beaucoup couler d'encre, les intentions de Oracle n'étant pas très claire sur le sujet, même s'il ne faut pas être très futé pour voir que le géant veut clairement mettre des batons dans les roues de la petite société suédoise.

Enfin, une petite lueur d'espoir apparait, car Solid va développer un moteur de stockage transactionnel pour MySQL, en utilisant un modèle de distribution en double-licence en partie identique à celui de MySQL : GPL (pour l'internaute lambda), et licence commerciale pour les sociétés qui veulent disposer du support sur le produit.

Le premier prototype devrait être disponible fin avril, pour la conférence des utilisateurs MySQL. Une version béta, accompagnée de son code source sera disponible pour le mois de juillet, et la version finale est prévue pour la fin de l'année.

Voir aussi :

vendredi, avril 14 2006

Pagination des résultats dans l'interpréteur de ligne de commande MySQL

Lorsque l'on utilise MySQL en ligne de commande, il arrive parfois que l'on soit confronté à des requêtes renvoyant (beaucoup) plus de lignes que ne peut en contenir l'écran. Souvent, même, lorsque le nombre de colonnes est trop élevé, les enregistrements sont présentés sur plusieurs lignes, ce qui nuit grandement à la lisibilité.

Dans un cas comme dans l'autre, on attends en général devant un écran qui défile à vitesse grand V, jusqu'à ce que tous les enregistrements soient enfin affichés, sachant que le buffer du terminal n'a gardé en mémoire que les X dernières lignes (en général 1000) ce qui fait qu'il est parfois très difficile de s'y retrouver.

La solution, vue sur PHPCult, consiste à définir le pageur qui va être chargé de l'affichage des résultats :

mysql> \P less
mysql> PAGER set to 'less'
mysql> select foo from bar;

Et voilà ! Maintenant les résultats apparaissent à travers la commande less, ce qui est bien plus lisible que la sortie standard sur stdout, il faut l'avouer.

Pour désactiver le pageur, il suffit d'utiliser la commande :

mysql>

La documentation officielle MySQL précise que l'on peut utiliser n'importe quelle commande Unix pour le pageur, parmi lesquelles on peut trouver less, more, cat [> filename], et ainsi de suite (on peut même y passer des options, ou bien utiliser des pipes). Il faut tout de même savoir que cette option ne marche que sur Unix, et qu'elle ne fonctionne pas en mode batch.

jeudi, mars 30 2006

MySQL nativement en UTF-8

Quand on veut produire des pages web en utilisant le jeux de caractères UTF-8 d'un bout à l'autre de la chaine (des tables de la base de données en UTF-8, jusqu'à l'encodage des pages (X)HTML en UTF-8), on se retrouve confronté au problème suivant, qui est que la connection entre PHP et MySQL s'effectue par défaut en latin1 standard.

Pour y remédier, la solution la plus propre est de changer, au niveau du serveur, le jeux de caractère utilisé pour la connection, en rajoutant la ligne suivante dans la section [mysqld] du fichier de configuration de MySQL (généralement /etc/mysql/my.cnf) :

[mysqld]
init-connect = 'SET NAMES utf8'

Mais si vous n'avez pas accès à ce fichier, ou que vous ne voulez utiliser ce paramétrage que de manière ponctuelle sur certaines bases, l'autre façon d'indiquer à MySQL quel jeux de caractère doit être utilisé peut se faire indépendamment à chaque connection : après avoir établi une connection avec le serveur (hôte, utilisateur, mot de passe), effectuer la requête suivante dans votre application :

SET NAMES utf8;

Cette solution est celle qui est généralement donnée, mais elle nécessite que l'on change l'application pour que cela fonctionne.