SQLite en
production ?
Et si vous réévaluiez vos options ?
Slide 2
Slide 2 text
Salutations
Slide 3
Slide 3 text
Bien le bonjour
Guillaume Loulier aka Guikingone
Développeur chez SensioLabs
Apprécie surtout PHP et Rust, parfois Go
A hésité à faire ce talk, l’a fini dans le train
Slide 4
Slide 4 text
Sommaire
01 - Flemmardise et lenteurs
02 - SQLite ?
03 - Vers la production et au-delà
04 - Et demain ?
01
Slide 5
Slide 5 text
“ Tout ce que nous entendons est une opinion et non
un fait. Tout ce que nous voyons est une perspective
et non la vérité.”
Moment philosophie
Marc Aurèle
Slide 6
Slide 6 text
Flemmardise
et lenteurs
Slide 7
Slide 7 text
Schématisons
Base de données
Cache
Application
Worker
Infrastructure
Réseau
Slide 8
Slide 8 text
Climbing the ladder
Infrastructure
Application
Worker Worker
Base de données
Cache
Réseau
Application
Slide 9
Slide 9 text
Nage synchronisée
Infrastructure
Application
Worker
Base de données
Cache
Réseau
Application
Worker
Base de données
Cache
Slide 10
Slide 10 text
Servermore ?
Infrastructure
Application
Worker
Réseau
Base de données
Cache Base de données
Cache
Application
Worker
Application
Worker
Application
Worker
Slide 11
Slide 11 text
Oui mais tu veux en venir où ?
Slide 12
Slide 12 text
Soyons transparents
Qui se soucie des règles d’Edgar F. Codd ?
Au fond, une BDD n’est qu’un empilement
de couches
Quid des ressources ? De l’infrastructure ?
La mise en réseau ? Sharding ? Plait-il ?
Slide 13
Slide 13 text
Servermore ?
Infrastructure
Réseau
Application
Worker
DB
Cache
Application
Worker
DB
Cache
Application
Worker
DB
Cache
Slide 14
Slide 14 text
SQLite ?
Slide 15
Slide 15 text
Rappel historique
Projet lancé en août 2000 par Richard Hipp
Conçu pour résoudre un problème logiciel
introduit par IBM
Concurrent de fopen et non d’Oracle / MySQL / etc
(Ré)inventer la roue pour la rendre plus
résiliente
Slide 16
Slide 16 text
La rolls-royce des DB ?
Environ ~150K ligne de code (> 600K pour
PostgreSQL, ~2M pour MySQL)
Résistant à la charge (> 10 mds lecture / J)
Besoin d’un cache ? D’un filesystem ?
Portable entre architecture (32 / 64 bits)
Slide 17
Slide 17 text
Clair, simple, précis
SQLite stocke les données via 5 types (Null,
Integer, Real, Text, Blob)
SQLite se veut flexible mais supporte les
tables strictes (> 2021)
Slide 18
Slide 18 text
Vendez-moi ce stylo
Avantages Inconvénients
Rapide, léger, “serverless par conception” Complexe à mettre à l’échelle
Supporte la majorité des specs SQL Quelques manquements / biais
Aucun appel réseau Notion de cluster / réplication inexistante
Très peu de dépendances système Extensibilité “complexe” (API en C)
Peut gérer jusqu’à 281 terabytes Résilience “relative”
Aucune configuration requise Liée à son langage / processus d’usage
Slide 19
Slide 19 text
Vers la
production et
au-delà
Slide 20
Slide 20 text
“ ACID ? Pourquoi s’en soucier ? J’ai un SRE”
Slide 21
Slide 21 text
Corrompre sans s’étaler
SQLite stocke via un format de “page” de 4kb,
chaque page contenant un B-Tree
SQLite utilise une journalisation et / ou une
approche WAL
Mécanisme de lock natif pour éviter les conflits
Une action a lieu ou n’a pas lieu
Slide 22
Slide 22 text
symfony_demo.sqlite symfony_demo.sqlite-journal
Page I
Page II
Page III
Headers
N° de page
Page III (copie)
Checksum
Slide 23
Slide 23 text
“Moi, j’ai entendu dire que SQLite, c’était peu adapté
aux environnement concurrentiels [...]”
Dev, 16e siècle
Slide 24
Slide 24 text
L’attaque des logs
Journalisation ? Non, Write Ahead Log
Ecrire, vérifier, synchroniser, renvoyer
Plus efficient en écriture / discutable en lecture
Facilement récupérable en backup
Slide 25
Slide 25 text
La saison des salaisons
symfony_demo.sqlite
Page I
Page II
Page III
Page III (modifiée)
symfony_demo.sqlite-wal
Headers
Taille de page
salt
checksum
Slide 26
Slide 26 text
“Oui mais si le serveur tombe, la DB tombe avec, tu
n’as pas de solution à cette situation ? Si ?”
Slide 27
Slide 27 text
Hold my bucket
SQLite ne gère pas la corruption ou le backup
de façon automatisée
Et si “S3” était une solution ?
Synchroniser en asynchrone
Slide 28
Slide 28 text
Schématisons
Page I
Page II
Page III
Litestream
symfony_demo.sqlite
s3://bucket.host:port/sf.db
litestream replicate symfony_demo.sqlite s3://bucket.host:port/sf.db
Fichier
wal
Slide 29
Slide 29 text
Soyons honnêtes
Une disponibilité au-delà de 99.99% est
contreproductive et coûteuse
S3 se dit disponible 99.99999999999% du
temps, pour quel usage ?
Vous ne contrôlerez jamais le chat / chien de
votre client
Visez 99.99% et adaptez-vous
Slide 30
Slide 30 text
Et demain ?
Slide 31
Slide 31 text
Vers l’infini et peut-être au-delà
SQLite n’est pas une “silver-bullet”
SQLite ne résoudra pas vos problèmes de
performances SQL
De par son approche, SQLite reste
relativement fermé
Le web évolue, SQLite devra évoluer
Slide 32
Slide 32 text
“Mais in fine, je me sers de SQLite quand ?”
Slide 33
Slide 33 text
Concluons
Soyez pragmatiques, si votre application
marche, laissez-là en l’état
Commencez petit et montez en taille au
besoin
Microservices ? Edge computing ? Serverless ?
Doctrine est votre ami