SQLite3 - Une alternative très simple à MySQL/MariaDB
Quand on parle site internet, on pense souvent au combo PHP/MySQL, d'ailleurs, sur ce site, nous vous parlons régulièrement de ces outils. Quand il s'agit de la base de données, savez vous qu'il existe des alternatives, parfois mieux adaptées ? SQLite fait parti des outils, bien souvent sous-estimés, mais qui sont dans bien des cas, capable de remplacer avantageusement MySQL ou MariaDB.
Qu'il s'agisse d'un site personnel ou même d'un petit site, l'utilisation de MySQL ou de son fork MariaDB est, en général, très largement sur-dimensionné. En effet le moteur de MySQL est capable de gérer des bases de plusieurs méga-octets, même de giga-octets, voir de terra-octets avec un serveur suffisamment performant.
Mais quelle est la taille de la base de données d'un site comme celui sur lequel vous vous trouver ?
Au moment de l'écriture de cet article, la base de données contenant tous les articles, les statistiques ainsi que les données d'autres outils fait environ 50Mo. Cela commence à être une bonne taille pour un site "loisir". Si je prends le sous-site dédié au G4 Cube, sa base de données fait moins de 5Mo, dont 99% du contenu dans la seule table des statistiques dont la première entrée date de 2008. Le taux de visites est tel que le site pourrait utiliser une base SQLite, sans que cela ne fasse aucune différence, que ce soit dans son fonctionnement ou dans sa réactivité.
C'est l'autre différence entre les deux systèmes de base de données, MySQL fonctionnant en tant que service, il est de fait, bien plus réactif. Lors du chargement d'une seule page, SQLite prendra quelques millisecondes de plus, un écart pratiquement invisible. Par contre, sur un site fortement demandé, avec de nombreux visiteurs simultanés, MySQL fera très clairement la différence.
Mais ne vous y tromper pas, SQLite est tout de même capable de gérer de nombreuses tables et des milliers de ligne dedans. Il est donc suffisamment performant pour gérer la créations d'outils personnels et même la mise en production de petits sites internet.
A côté de ça, SQLite dispose de quelques avantages non négligeables lors d'utilisation à petit niveau. Le premier, et non des moindres, est que la base est facile à sauvegarder. Comme la base n'est finalement qu'un fichier, il suffit de dupliquer pour en faire une sauvegarde. Un second avantage est que l'utilisation de SQLite ne nécessite aucune maintenance. MySQL comme tout bon système de gestion de base de données en tant que service nécessite un peu plus d'attention afin de s'assurer que le service est toujours pleinement fonctionnel.
Des avantages, mais aussi des inconvénients. Le premier est que, dans le cadre de son utilisation dans un site internet, les développeurs ont tendance à mettre la base avec le site. Cela ne pose pas de soucis pour un outil dont l'accès est restreint au réseau local. Pour une publication en ligne, il faut ajouter les protections nécessaires pour empêcher des utilisateurs mal-intentionnés de télécharger la base.
Mais pour moi, son plus gros défaut est son inaptitude dans l'altération des tables. Mal habitué avec MySQL, ou la modification des tables est extrêmement facile, vouloir faire la même chose avec SQLite peut relever du challenge. Ajouter une colonne à une table ne sera pas un soucis, mais en modifier ou en supprimer une nécessitera de prendre le temps de la réflexion. Je vous avoue que bien souvent, je préfère laisser une colonne morte, plutôt que d'essayer d'avoir une table parfaitement propre.
Je parle beaucoup de sites internet, avec SQLite, mais l'application peut aussi être utilisée telle quelle. Stocker des informations dans une base de données devient très simple, même si l'absence d'interface graphique en rebutera un bon nombre. C'est d'ailleurs pour cela qu'en général on crée un petit site internet autour afin de faciliter l'accès et la manipulation des données.
macOS dispose en standard, dans sa panoplie d'outil en lignes de commande, d'une version de SQLite. Il est donc très facilement accessible, simplement en ouvrant un terminal.
De nombreuses applications pour macOS utilisent, d'ailleurs, SQLite pour stocker des données rapidement et facilement.
Pour les utilisateurs d'Homebrew, une version plus à jour est installable. Dans les faits, cela ne changera pas grand chose.
Un peu de concret ? Ouvrons un terminal et commençons !
En tapant
sqlite MaBase.db
vous allez ouvrir la base de données MaBase.db à l'emplacement ou vous vous trouvez. N'oubliez pas de vous déplacer là où vous souhaitez avec la commande cd ou d'indiquer le chemin complet vers votre base
sqlite ~/MesBases/MaBase.db
par exemple pour ouvrir la base qui se trouverait dans le dossier MesBases de votre dossier utilisateur.
Si la base n'existe pas elle sera tout simplement créée.
Vous pouvez aussi lancer la commande sqlite seule.
sqlite
Vous pouvez ensuite ouvrir la base depuis l'application.
Pour ne pas se mélanger avec les commandes SQL, les commandes SQLite sont préfixées par un point.
Par exemple pour ouvrir une base depuis l'application.
.open ~/MesBases/MaBase.db
Pour lister les tables, il suffit d'utiliser la commande
.table
Même s'il ne s'agit pas d'une commandes SQL, il est tout de même possible de faire une recherche avec un filtre, par exemple, si je cherche les tables dont le nom commence par "préfix"
.table 'prefix%'
Pour voir le schéma d'une table, utilisez simplement
.schema matable
En fin, pour sortir de l'application, il suffit d'écrire la commande
.exit
Et pour créer ou éditer des données, il suffit tout simplement d'utiliser les commandes SQL adaptées à SQLite. Mais cela sera pour très bientôt, et un prochain article.