Portage de SPIP en SQLite

Après PostGreSQL c’est au tour de SQLite d’être porté par SPIP

C’était en germe et déjà évoqué dans l’annonce du Portage de SPIP en PostGres

SQLite est maintenant livré en standard en PHP, et ça permettrait d’avoir un site « tout fichier » [1] ; pour les petits sites (et les gros sous réserves de performances acceptables) cela offrirait d’importantes facilités dans la maintenance, les sauvegardes, l’hébergement etc ...

C’est maintenant chose faite

SQLite

SQLite est un serveur de base de données qui a la particularité de sauvegarder une base dans un fichier unique. Ce fichier peut être récupéré et envoyé par FTP sur son site. La gestion de SQLite par PHP est présente depuis PHP 5 pour la version 2.x et PHP 5.1 pour la version 3.x.

SQLite est maintenant géré, comme MySQL et PostGreSQL par SPIP. Ce nouveau portage permet de lire ou de créer une base de données au format SQLite 2.x et SQLite 3.x (ces formats ne sont pas compatibles entre eux).

Une sauvegarde simple et rapide de la base de donnée :

Comme évoqué dans l’annonce Portage de SPIP en PostGres, SQLite peut faciliter grandement la gestion des sauvegardes des petits sites, et éventuellement des gros, si les performances de SQLite se révèlent acceptables, puisque la sauvegarde de la base de données consiste à copier simplement un fichier du serveur vers sa sauvegarde.

Une couche d’abstraction pour gérer les différents serveurs SQL

Grâce aux nouvelles fonctions concernant les serveurs de bases de données, SPIP peut se connecter à d’autres serveurs SQL que MySQL. Il faut pour cela que le SPIP connaisse la syntaxe des requêtes à transmettre au serveur SQL. C’est le rôle des fichiers contenus dans le dossier ecrire/req/.

Ces fichiers (mysql.php, pg.php, sqlite_generique.php) assurent la traduction entre les fonctions génériques d’accès aux bases de données proposées par SPIP ( fonctions sql_*() ), que l’on appelle la « couche d’abstraction », et la syntaxe des requêtes du serveur demandé.

Un premier portage pour PostGreSQL

Le premier portage a concerné PostGreSQL (historiquement un des premiers serveurs SQL, et un des rares a être entièrement sous licence GPL), ce qui a permis de définir l’indispensable signature des fonctions d’abstractions sql_*() permettant de jongler entre les différentes versions de SQL. Ces fonctions étant stabilisées, d’autres portages peuvent se réaliser.

Le cas de SQLite

Ajouter le portage de SQLite (versions 2.x et 3.x) a donc consisté à créer les fichiers sqlite2.php et sqlite3.php dans le dossier ecrire/req/, qui pour leur cas, appellent un fichier générique qui gère les versions 2.x et 3.x de SQLite : sqlite_generique.php

Un dernier fichier sqlite_fonctions.php contient un ensemble de fonctions php qui sont automatiquement déclarées au serveur SQLite par SPIP et qui peuvent alors être utilisées dans les requêtes. Cet outil est très important (et c’est un point fort de SQLite) car de base, SQLite ne gère que très peu de fonctions SQL (par exemple, il ne gère pas NOW()).

Déroulement technique de l’installation

Lors de la procédure d’installation du site, SPIP cherche les modules php concernant SQLite et essaie éventuellement de les charger (nécessaire sur Ouvaton par exemple). Il propose alors, en plus de MySQL et PostGreSQL de se connecter à SQLite 2 et/ou SQLite 3 en fonction des extensions php trouvées (’sqlite’ pour SQLite 2, ’pdo’ et ’pdo_sqlite’ pour SQLite3)

SPIP créera automatiquement (s’il le peut) un répertoire défini par la constante _DIR_DB (qui est par défaut _DIR_ETC/bases/, donc le répertoire config/bases/) pour y stocker les bases de données SQLite qu’il suffixe par .sqlite (quelque soit la version).

Déclarer une autre base de donnée

Il est possible de déclarer d’autres bases de données que la base avec laquelle SPIP a été installé, en utilisant un formulaire de l’interface privée accessible par : Configuration > Maintenance du site > Déclarer une nouvelle base.

Lorsqu’une nouvelle base est déclarée, par exemple toto.sqlite, ou une base nommée ’toto’ en MySQL ou PostGreSQL, deux nouvelles choses sont alors possibles :

  1. Toutes les boucles du site peuvent êtres remplacées par le contenu de la base déclarée en ajoutant le paramètre connect dans l’url : http://domaine.tld/?connect=toto
  2. Une boucle du squelette peut afficher le contenu de la base déclarée en utilisant la syntaxe : <BOUCLE_x(toto:TABLE)>#CHAMP</BOUCLE_x>

Différences entre les versions 2.x et 3.x de SQLite

Les versions 2 et 3 de SQLite se distinguent par 3 choses :

  1. les fichiers des bases ne sont pas compatibles entre eux. Cela signifie qu’une base au format sqlite2 ne pourra pas être lue par sqlite3 et vice et versa.
  2. Des syntaxes SQL ne sont pas présente en SQLite2 (mais sont néanmoins gérées par le portage SPIP) :
    • IF NOT EXISTS pour les requetes CREATE TABLE
    • ADD column et RENAME [TO] column pour les requêtes ALTER TABLE table
  3. PHP utilise une classe PDO pour gérer SQLite 3 alors qu’il utilise des fonctions sqlite_*() pour sqlite 2. L’objet PDO/SQLite3 n’a pas de fonction pour compter le nombre de lignes d’une requete SELECT, il a été nécessaire de l’émuler pour le portage.

Dépôts réalisant le portage :


-  http://zone.spip.org/trac/spip-zone...
-  http://trac.rezo.net/trac/spip/chan...
-  http://trac.rezo.net/trac/spip/chan...
-  http://trac.rezo.net/trac/spip/chan...
-  http://trac.rezo.net/trac/spip/chan...
-  http://trac.rezo.net/trac/spip/chan...
-  http://trac.rezo.net/trac/spip/chan...
-  http://trac.rezo.net/trac/spip/chan...
-  http://trac.rezo.net/trac/spip/chan...
-  http://trac.rezo.net/trac/spip/chan...
-  http://trac.rezo.net/trac/spip/chan...
-  http://trac.rezo.net/trac/spip/chan...
-  http://trac.rezo.net/trac/spip/chan...
-  http://trac.rezo.net/trac/spip/chan...
-  http://trac.rezo.net/trac/spip/chan...
-  http://trac.rezo.net/trac/spip/chan...
-  http://trac.rezo.net/trac/spip/chan...

Pour en savoir plus sur SQLite

-  http://fr.wikipedia.org/wiki/SQLite
-  ChangeLog SQLite
-  PHP et SQLite
-  PHP et PDO
-  Document de travail pour le portage SQLite

Lecture des bases de données SQLite

Un excellent module pour Thunderbird ou Firefox permet de gérer les bases de données SQLite3 : SQLite Manager

Support de tests

Pour faciliter un peu les tests du portage, un tout petit squelette sqlAdmin.html a été créé (On peut le trouver sur la zone). Il permet de faire des requêtes sur le « serveur » de son choix en agissant sur la variable $connect. Ah, évitez d’avoir des « . » dans les noms de ces fichiers de connexions genre « domaine.tdl.php » car SPIP n’aime pas dans la variable &connect.

Notes

[1NDLR : sans besoin de base réelle, il s’agirait d’une émulation de MySQL ici, d’où les contraintes de performances

Discussion

4 discussions

  • Bonjour,

    Quand on a un site en SPIP 3.2 et base MySQL, passer en SQLite :

    1- Permet-il des s’affranchir des mises à jour de phpMyAdmin ?
    2- Comment procéder pour passer de MySQL à SQLite sur un site fonctionnel en SPIP 3.2 ?

    En espérant être suffisamment clair ...
    Merci pour votre attention.

    Répondre à ce message

  • Bonjour ;
    Je suis en train de changer de serveur et de passer de apache/mysql/php et spip bien sur, à nginx/sqlite/php (et spip).

    Je n’ai eu aucun soucis pour spip_loader, tout c’est bien déroulé pour l’installation du premier site sur le nouveau serveur. Sauf un message (un peu abscond sur les fichiers .htacces).
    Mieux, j’ai fait un dump de mon ancien site (sous mysql) et j’ai tenté de le mettre dans le nouveau site. Résultat : tout marche à merveille !!!
    Moi je dis : bravo aux devellopeurs !
    Je n’ai pas encore testé les modules, mais quand même, chapeau bas !
    C’est tout. Fallait le dire.
    Rémi.

    Répondre à ce message

  • 1

    Bonjour,

    Je souhaite installer SPIP sur un NAS (comet lab). Je ne peux qu’utiliser une base sqlite.

    J’ai installé sqlite manager. Après que faut-il faire ?
    où installer la base (dans l’arborescence spip ?)

    Je recherche un maximum d’infos.

    Je vous remercie par avance

    Philippe

    • La base devrait se créer toute seule dans le répertoire config/bases/ de votre SPIP, pour que que SPIP, à l’installation, puisse écrire dans le répertoire config/ .

    Répondre à ce message

  • 1

    La note de bas de page est inexacte car SQLite n’est pas une émulation de MySQL mais une implémentation native du langage SQL.

    En conséquence SQLite n’est pas moins performant. Au contraire il est probablement plus rapide en raison de sa simplicité ; ce qui semble confirmé par divers comparatifs. En principe il sollicite la machine qui accueille le serveur Web alors que les hébergeurs utilisent généralement une machine séparée pour la base de donnée ce qui rend difficile la comparaison de performances. Tout dépend de la charge des machines respectives dans un environnement mutualisé.

    • Bonjour j’ai essayé de nombreux plugins avec pour base Sqlite3 et spip2.1.0 ie :plugin artego
      plugin menu plugin agenda 2.0 seul rainette et ahuntsic fonctionne .
      Avez vous des infos sur le support de ces différents plugins ? leur compatibilité prochaine est elle à l’ordre du jour
      Je trouve dommage de rebasculer sur Mysql
      Merci pour les réponses

    Répondre à ce message

Ajouter un commentaire

Avant de faire part d’un problème sur un plugin X, merci de lire ce qui suit :

  • Désactiver tous les plugins que vous ne voulez pas tester afin de vous assurer que le bug vient bien du plugin X. Cela vous évitera d’écrire sur le forum d’une contribution qui n’est finalement pas en cause.
  • Cherchez et notez les numéros de version de tout ce qui est en place au moment du test :
    • version de SPIP, en bas de la partie privée
    • version du plugin testé et des éventuels plugins nécessités
    • version de PHP (exec=info en partie privée)
    • version de MySQL / SQLite
  • Si votre problème concerne la partie publique de votre site, donnez une URL où le bug est visible, pour que les gens puissent voir par eux-mêmes.
  • En cas de page blanche, merci d’activer l’affichage des erreurs, et d’indiquer ensuite l’erreur qui apparaît.

Merci d’avance pour les personnes qui vous aideront !

Par ailleurs, n’oubliez pas que les contributeurs et contributrices ont une vie en dehors de SPIP.

Qui êtes-vous ?
[Se connecter]

Pour afficher votre trombine avec votre message, enregistrez-la d’abord sur gravatar.com (gratuit et indolore) et n’oubliez pas d’indiquer votre adresse e-mail ici.

Ajoutez votre commentaire ici

Ce champ accepte les raccourcis SPIP {{gras}} {italique} -*liste [texte->url] <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.

Ajouter un document

Suivre les commentaires : RSS 2.0 | Atom