3 janvier 2009 par Stéphane Legrand
Il est très courant d’avoir à stocker une structure d’arbre dans une base de données. Par exemple, pour enregistrer l’organisation hiérarchique d’une entreprise ou bien pour représenter les catégories et sous-catégories des articles d’un site web.
La façon la plus simple de procéder est d’ajouter simplement à la table concernée un champ “identifiant_parent” qui servira à stocker l’identifiant du noeud parent. Ainsi, pour stocker l’arbre suivant :
A
---------
| |
B C
-----
| |
D E
-----
| |
F G
nous aurions les enregistrements suivants :
identifiant identifiant_parent
A NULL
B A
C A
D C
E C
F D
G D
Le noeud “A” qui est la racine de l’arbre n’a évidemment aucun parent c’est pourquoi l’identifiant du parent est dans ce cas mis à NULL.
Cette technique de représentation d’un arbre a comme avantage sa très grande simplicité. Elle a par contre l’inconvénient de nécessiter pour certains traitements l’envoi de plusieurs requêtes SQL de manière récursive. En effet, pour retrouver tous les noeuds enfants de “C”, il n’est pas possible de le faire directement via une seule requête SQL. Il faut tout d’abord récupérer les enfants de “C” puis, pour chaque enregistrements trouvés, récupérer à leur tour leurs enfants.
Nous allons donc voir une autre méthode plus complexe mais aussi plus performante pour stocker dans une base SQL une structure d’arbre.
Continuer à lire »
Publié dans Programmation | Taggé mysql | 3 Commentaires »
27 août 2008 par Stéphane Legrand
Nous allons voir comment développer un client pour le logiciel serveur Memcached avec le langage Objective Caml. Le logiciel Memcached permet en résumé de stocker des données en mémoire vive ce qui offre des accès très rapides. Une valeur est simplement indexée par une clef unique qui est utilisée par le client pour écrire, modifier ou lire cette donnée. Memcached est typiquement utilisé pour stocker des valeurs temporaires afin de gérer un cache d’où son nom. Son protocole est relativement simple ce qui en fait un bon candidat pour une première approche du développement en Objective Caml.
Le code source complet est disponible dans cette archive.
Continuer à lire »
Publié dans Programmation | Taggé caml, memcache, Objective Caml | Laisser un commentaire »
23 août 2008 par Stéphane Legrand
Nous allons voir comment éviter l’envoi inutile de requêtes SQL identiques lors de l’exécution d’un script PHP utilisant Zend Framework. L’idée est de mettre en cache le résultat de chaque nouvelle requête SQL. Pour ensuite être capable de renvoyer directement le résultat mis en cache dans le cas où les données de la base utilisées par cette requête n’ont pas été modifiées. En effet, si nous sommes capable de vérifier qu’aucun enregistrement des tables concernées par la requête n’a été modifié depuis la mise en cache, nous sommes certain de pouvoir renvoyer directement le résultat en cache puisque la sélection de données sera forcément identique. Attention toutefois, nous partons du principe que les requêtes ne comportent pas de conditions de sélection extérieures aux données elles-mêmes. Une requête qui comporterait par exemple une condition sur l’heure courante pourrait voir son résultat changer même si les données sur lesquelles portent la requête ne sont jamais modifiées. Il vous faudra donc veiller à utiliser à bon escient ce mécanisme de cache.
Continuer à lire »
Publié dans Programmation | Taggé cache, mysql, php, triggers, zend framework | Laisser un commentaire »