Parmi les outils permettant de propulser des sites web, le CMS WordPress a tout chamboulé en l’espace de quelques années. Initialement, petit système de blog nommé b2, WordPress s’est transformé pour devenir la solution préférée pour publier des sites et des blogs simples partout dans le monde. Aujourd’hui, WordPress est l’outil utilisé par 40% des sites web au monde et sa part de marché ne fait que croître.
Ce qui plaît dans WordPress c’est :
- un outil Open-source doté d’une forte communauté active permettant à chacun de se l’approprier tout en jouant le rôle d’assurance « future proof » ;
- une version gratuite librement téléchargeable et installable partout et une version payante hébergée pour ceux qui ne veulent pas s’embêter ;
- un code simple et bien construit basé un socle léger. Sur ce socle, des thèmes (pour l’apparence) et des modules (pour les fonctionnalités) viennent se greffer de façon simple ;
- un écosystème permettant à des entreprises de proposer des services et des abonnements en surcouche ;
- pour les utilisateurs, un outil facile à appréhender et une courbe d’apprentissage rapide.
Une base de données en arrière-plan
Le logiciel WordPress est réalisé en PHP. Il utilise la base de données MySQL ou MariaDB. La base de données sert à stocker toutes les données mais aussi certains paramètres de configuration.
L’utilisateur final n’a jamais besoin d’accéder à la base de données. Si besoin, on accède via PhpMyadmin ou mieux via le module WordPress SQL Buddy aux tables et aux données. Le développeur qui a besoin d’interagir avec la base de données doit le faire via une classe dédiée à WordPress (wpdb) et il existe des fonctions dédiées pour réaliser des ajouts (wp_insert_post), modifications (wp_update_post), suppressions en base (wp_delete_post) et des extractions (fonctions commencant par get_).
La base de données d’un nouveau WordPress se compose d’un nombre limité de tables (une douzaine – une dizaine de plus pour un WordPress multisites). Ces tables sont reliées entre elles dans une logique relationnelle mais WordPress a fait le choix de privilégier un système simple et pas forcément très performant ou sécurisé. Ainsi, il n’y a pas d’intégrité référentielle intégrée dans WordPress et c’est aux développeurs de s’occuper de faire le ménage eux-mêmes dans les données que leurs thèmes ou modules ajoutent.
Au final, cette approche très simple convient bien à l’utilisation prévue. Les données ne sont jamais critiques, il n’y a pas besoin de transactions ou de règles d’accès très contraignantes. Le risque principal de WordPress est lié à de mauvaises pratiques de sécurité (non mise à jour du cœur, des modules, des thèmes et gestion des droits trop laxiste). Les piratages de sites propulsés par WordPress sont fréquents mais très rares sont ceux qui sont imputables à l’outil en lui-même.
Schéma de la base de WordPress
Les tables wp_options et wp_links sont autonomes. Toutes les autres tables sont liées entre elles et c’est la table wp_posts qui est le centre du schéma.
- Une publication est affectée à un seul utilisateur et un utilisateur peut être lié à plusieurs commentaires
- Un commentaire est affecté à un seul utilisateur et un utilisateur peut soumettre plusieurs commentaires
- Une publication peut être liée à une ou plusieurs types de taxonomies et une ou plusieurs taxonomies
- Un type de taxonomie et une taxonomie peuvent être liées à une ou plusieurs publications
Les différentes tables de WordPress
- Gestion des contenus : wp_posts, wp_postmeta (on trouve ici les articles, les pages, les menus ainsi que les images – les fichiers des images sont stockés sur le disque mais les données liées aux images sont en base)
- Gestion des taxonomies : wp_terms, wp_termmeta (étiquettes, catégories et autres classifications des contenus)
- Associations entre taxonomies et contenus : wp_term_taxonomy et wp_term_relationships
- Options et paramétrages : wp_options (c’est une table fourre-tout indépendante des autres tables)
- Gestion des utilisateurs : wp_users et wp_usermeta
- Gestion des commentaires : wp_comments et wp_commentmeta
- Gestion des liens : wp_links (ancienne fonctionnalité conservée pour raisons de compatibilité)
Beaucoup de tables de WP se terminent par meta : il s’agit des tables annexes. Par exemple, dans wp_posts, on va trouver toutes les informations indispensables aux publications alors que dans wp_postmeta, on va trouver des informations utiles mais secondaires.
Performance de la base de données de WordPress
La structure très simple de la base de données MySQL de WordPress permet de développer des sites web de plusieurs dizaines de milliers de pages. La base de données supporte sans problème d’importants volumes de pages. Une base de données WordPress pour un site web de moins de 100 pages fait moins de 25Mo.
Les problèmes de performances arrivent avec l’ajout de modules qui créent de nombreuses tables, stockent beaucoup de données et ne nettoient pas leurs données (ou laissent l’internaute le faire – ce qu’il ne fait pas). On peut alors se retrouver avec des bases MySQL de plus de 100Mo pour un petit site web.