Upgrade to Pro — share decks privately, control downloads, hide ads and more …

SQLite en production ? Et si vous réévaluiez vos options ?

SQLite en production ? Et si vous réévaluiez vos options ?

Loulier Guillaume

March 24, 2023
Tweet

More Decks by Loulier Guillaume

Other Decks in Programming

Transcript

  1. 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
  2. Sommaire 01 - Flemmardise et lenteurs 02 - SQLite ?

    03 - Vers la production et au-delà 04 - Et demain ? 01
  3. “ 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
  4. Servermore ? Infrastructure Application Worker Réseau Base de données Cache

    Base de données Cache Application Worker Application Worker Application Worker
  5. 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 ?
  6. 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
  7. 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)
  8. 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)
  9. 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
  10. 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
  11. “Moi, j’ai entendu dire que SQLite, c’était peu adapté aux

    environnement concurrentiels [...]” Dev, 16e siècle
  12. 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
  13. 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
  14. “Oui mais si le serveur tombe, la DB tombe avec,

    tu n’as pas de solution à cette situation ? Si ?”
  15. 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
  16. 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
  17. 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
  18. 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
  19. 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