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. SQLite en
    production ?
    Et si vous réévaluiez vos options ?

    View full-size slide

  2. 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

    View full-size slide

  3. Sommaire
    01 - Flemmardise et lenteurs
    02 - SQLite ?
    03 - Vers la production et au-delà
    04 - Et demain ?
    01

    View full-size slide

  4. “ 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

    View full-size slide

  5. Flemmardise
    et lenteurs

    View full-size slide

  6. Schématisons
    Base de données
    Cache
    Application
    Worker
    Infrastructure
    Réseau

    View full-size slide

  7. Climbing the ladder
    Infrastructure
    Application
    Worker Worker
    Base de données
    Cache
    Réseau
    Application

    View full-size slide

  8. Nage synchronisée
    Infrastructure
    Application
    Worker
    Base de données
    Cache
    Réseau
    Application
    Worker
    Base de données
    Cache

    View full-size slide

  9. Servermore ?
    Infrastructure
    Application
    Worker
    Réseau
    Base de données
    Cache Base de données
    Cache
    Application
    Worker
    Application
    Worker
    Application
    Worker

    View full-size slide

  10. Oui mais tu veux en venir où ?

    View full-size slide

  11. 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 ?

    View full-size slide

  12. Servermore ?
    Infrastructure
    Réseau
    Application
    Worker
    DB
    Cache
    Application
    Worker
    DB
    Cache
    Application
    Worker
    DB
    Cache

    View full-size slide

  13. 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

    View full-size slide

  14. 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)

    View full-size slide

  15. 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)

    View full-size slide

  16. 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

    View full-size slide

  17. Vers la
    production et
    au-delà

    View full-size slide

  18. “ ACID ? Pourquoi s’en soucier ? J’ai un SRE”

    View full-size slide

  19. 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

    View full-size slide

  20. symfony_demo.sqlite symfony_demo.sqlite-journal
    Page I
    Page II
    Page III
    Headers
    N° de page
    Page III (copie)
    Checksum

    View full-size slide

  21. “Moi, j’ai entendu dire que SQLite, c’était peu adapté
    aux environnement concurrentiels [...]”
    Dev, 16e siècle

    View full-size slide

  22. 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

    View full-size slide

  23. 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

    View full-size slide

  24. “Oui mais si le serveur tombe, la DB tombe avec, tu
    n’as pas de solution à cette situation ? Si ?”

    View full-size slide

  25. 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

    View full-size slide

  26. 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

    View full-size slide

  27. 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

    View full-size slide

  28. 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

    View full-size slide

  29. “Mais in fine, je me sers de SQLite quand ?”

    View full-size slide

  30. 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

    View full-size slide

  31. Des questions ?

    View full-size slide