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 Slide

  2. Salutations

    View Slide

  3. 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 Slide

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

    View Slide

  5. “ 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 Slide

  6. Flemmardise
    et lenteurs

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  11. Oui mais tu veux en venir où ?

    View Slide

  12. 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 Slide

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

    View Slide

  14. SQLite ?

    View Slide

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

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

  17. 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 Slide

  18. 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 Slide

  19. Vers la
    production et
    au-delà

    View Slide

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

    View Slide

  21. 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 Slide

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

    View Slide

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

    View Slide

  24. 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 Slide

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

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

    View Slide

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

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

  29. 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 Slide

  30. Et demain ?

    View Slide

  31. 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 Slide

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

    View Slide

  33. 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 Slide

  34. Des questions ?

    View Slide