𝗧𝘂𝗿𝘀𝗼 𝗹𝗶𝗯𝗦𝗤𝗟 𝘃𝘀 𝗖𝗹𝗼𝘂𝗱𝗳𝗹𝗮𝗿𝗲 𝗗𝟭
Choisir une base de données pour un monorepo Astro est une question de workflow.
J'ai récemment conçu une base de données partagée pour trois sites Astro SSG. J'avais deux choix : Turso (libSQL) ou Cloudflare D1.
J'ai choisi Turso.
Voici pourquoi la différence pratique était importante.
Cloudflare D1 est conçu pour Cloudflare Workers. Si vous utilisez Workers pour le rendu côté serveur, D1 l'emporte. Il réside là où votre code s'exécute.
Ma configuration est différente. Mes sites sont des sites statiques Astro 5 SSG sur Cloudflare Pages. Je n'utilise pas Workers. Mon pipeline ETL s'exécute dans GitHub Actions.
Utiliser D1 depuis GitHub Actions est difficile. Vous devez utiliser l'API Cloudflare ou la CLI Wrangler. Aucun des deux ne vous fournit un fichier SQLite local pour effectuer des requêtes pendant le développement. Vous finissez par interroger une base de données distante pour chaque test.
Turso résout ce problème grâce au package @libsql/client. Il accepte une URL. Cette URL peut être un lien distant ou un chemin de fichier local.
Mon code ressemble à ceci :
L'URL est un lien Turso distant en CI. Sur mon ordinateur portable, le client ouvre un fichier local. Le package, les requêtes et le schéma restent les mêmes.
Le chemin d'exécution est identique.
Cela me permet de :
- Exécuter des scripts ETL localement.
- Inspecter la base de données avec n'importe quel visualiseur SQLite.
- Exécuter des migrations avec la même fonction utilisée en production.
Je n'ai pas besoin de Docker. Je n'ai pas besoin de flags spéciaux. Le même SQL fonctionne partout.
J'utilise une approche idempotente pour les migrations. Mon code vérifie si une table existe avant de la créer. Cela permet de l'exécuter de manière répétée en toute sécurité.
Quand devriez-vous choisir D1 ? Si vous utilisez Cloudflare Workers pour la recherche ou des routes API, D1 est préférable. La connexion est plus rapide car elle reste à l'intérieur du même centre de données.
Mon architecture est entièrement statique. Comme je n'utilise pas Workers, D1 perd son principal avantage.
Compromis actuels :
- Performance d'écriture : Mon ETL exécute les tâches une par une. Je n'ai pas testé les écritures concurrentes à haute vitesse.
- Changements de schéma : Ajouter des colonnes est facile. Renommer des colonnes demande plus de prudence.
- Tarification : Les deux proposent des offres gratuites généreuses. Pour trois sites, mon coût est nul.
Le choix de la base de données n'était pas l'objectif principal. La possibilité de basculer sur un fichier local est la raison pour laquelle j'ai choisi Turso. Cela simplifie le développement.
