- Litestream VFS est une extension sous forme de plugin qui permet de lire et d’interroger directement une base de données SQLite depuis un stockage objet (comme S3)
- Permet d’effectuer des requêtes immédiates sur des fichiers de sauvegarde distants et une restauration à un instant donné (Point-in-Time Recovery, PITR) sans télécharger toute la base de données
- Utilise en interne le format LTX pour gérer efficacement les ensembles de pages modifiées, et améliore la vitesse de restauration grâce à une compaction qui ignore les pages dupliquées
- Exploite l’interface VFS de SQLite pour n’intercepter que les opérations de lecture, tandis que l’écriture reste prise en charge par le processus Litestream existant
- Grâce à des sauvegardes à la seconde et à des mises à jour d’index, fournit une réplique quasi temps réel, adaptée à l’exécution rapide de requêtes dans le cloud
Présentation de Litestream VFS
- Litestream VFS permet à SQLite d’utiliser directement une URL de stockage objet comme source de données
- S’active dans le shell SQLite avec les commandes
.load litestream.so et .open file:///my.db?vfs=litestream
- Il devient ensuite possible d’exécuter des requêtes à partir de fichiers de sauvegarde stockés sur S3
- Il est possible d’interroger directement une sauvegarde distante sans télécharger toute la base de données
- Dans l’exemple, la requête
SELECT * FROM sandwich_ratings permet de consulter immédiatement une partie des données stockées sur S3
Fonction de restauration à un instant donné (PITR)
- La commande
PRAGMA litestream_time = '5 minutes ago'; permet de consulter l’état des données à un instant précis
- Il est possible de spécifier une heure relative (
5 minutes ago) ou absolue (2000-01-01T00:00:00Z)
- Cela permet d’effectuer une restauration instantanée à un instant donné (Point-in-Time Recovery) au niveau SQL
- Dans l’exemple, après l’exécution d’un
UPDATE erroné, un retour à l’état d’il y a 5 minutes permet de vérifier les données correctes
Format LTX et compression des données
- Litestream v0.5 intègre le format LTX (Litestream Transaction eXchange)
- Les versions précédentes transféraient des pages SQLite entières, tandis que LTX ne transfère qu’un ensemble ordonné de pages
- L’élément clé de LTX est la fonction « compaction », qui sélectionne uniquement la version la plus récente de chaque page lors de la restauration
- Exemple : dans
1 2 3 5 3 5 4 5 5, seules les occurrences les plus à droite de 5, 4, 3, 2 et 1 sont utilisées
- LTX peut être compressé non seulement pour une base complète, mais aussi entre des ensembles de fichiers LTX, ce qui rend possible la restauration PITR
- Le trailer des fichiers LTX contient un index des offsets de chaque page, ce qui permet de
- lire uniquement les pages nécessaires via des requêtes S3 Range sans télécharger le fichier entier
Méthode d’implémentation du VFS
- Litestream VFS est implémenté à l’aide de l’interface VFS (Virtual File System) de SQLite
- Le VFS est une structure de plugin qui abstrait la couche d’accès à l’OS de SQLite
- Litestream VFS ne traite que les opérations de lecture (Read), tandis que les opérations d’écriture (Write) sont prises en charge par le processus Litestream existant
- Lorsque SQLite lit une page, le VFS effectue un mappage basé sur l’index des pages au lieu d’utiliser directement l’offset en octets demandé
- Il retrouve dans l’index le nom du fichier, l’offset réel et la taille de page, puis télécharge uniquement le bloc concerné via l’en-tête Range de l’API S3
- Un cache LRU conserve en mémoire les « hot pages » fréquemment consultées afin de minimiser les appels à S3
Réplication en temps réel et performances
- Litestream effectue une sauvegarde de niveau L0 une fois par seconde
- Le VFS interroge périodiquement le chemin S3 et met à jour progressivement l’index
- Il en résulte une réplique quasi temps réel (near-realtime replica)
- L’utilisation est immédiate, sans avoir à streamer l’intégralité de la base de données
- Cette architecture permet d’obtenir un démarrage rapide et des temps de restauration courts
Usages et intérêt
- Litestream conserve en sauvegarde tous les états de la base de données avec une résolution à la seconde
- En cas d’erreur de
DELETE ou de UPDATE, il est possible de restaurer immédiatement l’instant souhaité
- L’interrogation directe depuis un stockage objet permet un fonctionnement rapide même dans des environnements de serveurs éphémères
- En s’appuyant sur les fonctions natives de SQLite sans mécanismes complexes, il fournit un système de sauvegarde et de restauration simple mais puissant
- Il est aussi utilisé dans l’API interne de Fly.io et peut être exploité de manière stable en production
Aucun commentaire pour le moment.