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

SQLite, la base de données la plus répandue au ...

SQLite, la base de données la plus répandue au monde et pourtant méconnue ! - Devoxx France 2024 - Tools-in-Action

Lorsque vous pensez à choisir une base de données, MySQL, MariaDB, PostgreSQL ou même Redis peuvent venir à l'esprit. Mais avez-vous déjà envisagé SQLite ? Non ? Mais pourquoi la base de données la plus répandue au monde ne serait pas une option valable dans votre cas d'usage ?
Plongeons ensemble dans l'univers de SQLite, une base de données omniprésente mais souvent négligée. Explorons ses forces méconnues, comprenons ses faiblesses et découvrons ses applications étonnantes. Enfin, découvrez pourquoi elle pourrait bien être la solution que vous n'avez jamais osé envisager.

Sébastien LECACHEUR

April 17, 2024
Tweet

More Decks by Sébastien LECACHEUR

Other Decks in Programming

Transcript

  1. #DevoxxFR #SQLite @slecache SQLite Sébastien LECACHEUR Odigo warmup / la

    base de données la plus répandue au monde et Pourtant méconnue ! DEVOXX FRANCE 2024 Mercredi 17 avril – 17h00 Neuilly 151
  2. #DevoxxFR #SQLite @slecache SQLite & moi POURQUOI 2023 SQLiteAPI SaaS

    de bases SQLite accessibles via API REST 2009 Android App mobile avec une base SQLite 100k-500k DL 2021 API REST API publique multi-sites avec une base SQLite 2002 JDBC multi-DB POC réplication logicielle en Java 1999 Application bureautique avec une base de données maison GWhere
  3. #DevoxxFR #SQLite @slecache DEVOXX FRANCE 2024 Agenda / Agenda 1.

    Introduction Qu’est-ce que SQLite ? 2. Bénéfices Avantages de la solution 3. Inconvénients Points d’attention 4. applications Quand utiliser SQLite ? 5. Astuces Pour faire mieux
  4. #DevoxxFR #SQLite @slecache SQLite est… …un moteur de base de

    données accessible via une bibliothèque logicielle qui s’exécute dans le processus applicatif et qui enregistre les données dans un fichier local ou en mémoire. Intro
  5. #DevoxxFR #SQLite @slecache SQLite • Projet sqlite.org • Open Source

    • Not Open-Contribution • depuis 2000 • LTS en 2050 • Version 3.45.3 • Outils • CLI: sqlite3 • Lib: C/C++, sqlite-jdbc, python, node-sqlite3… • Playground: SQLite3 Fiddle ou Sqlime.org • Packages: sqlpkg.org • Extension bundles: Sqlean Intro
  6. #DevoxxFR #SQLite @slecache SQL lite / SQL light SQL-ite «

    sequel »-ite / S-Q-L-ite « SQL lite » ¯\_(ツ)_/¯ Intro
  7. #DevoxxFR #SQLite @slecache Fonctionalités • SQL • ACID • support

    large de SQL (99.9% des cas) • NoSQL • Full Text Search • support de JSON Intro
  8. #DevoxxFR #SQLite @slecache SQLite ne concurrence pas les bases de

    données client/serveur mais fopen(). Intro
  9. #DevoxxFR #SQLite @slecache Très rapide • pas de latence réseau

    • pas de sérialisation/désérialisation • pas d’IPC • 35% plus rapide que le système de fichier
  10. #DevoxxFR #SQLite @slecache Très fiable • utilisé par des milliards

    de téléphones, de l’IoT, des OS, des navigateurs… • depuis plus de 20 ans • 92 053 KSLOC de code et scripts de tests
  11. #DevoxxFR #SQLite @slecache Pour les dévs • Une lib et

    rien d’autre • Pas de configuration • Démarre rapidement PROS Class.forName("org.sqlite.JDBC"); Connection c = DriverManager .getConnection("jdbc:sqlite:my.db");
  12. #DevoxxFR #SQLite @slecache Pour les tests • En mémoire •

    Pas d’accès disque • Pas de synchronisation • Attention au support de la parallélisation PROS Connection c = DriverManager .getConnection("jdbc:sqlite::memory:");
  13. #DevoxxFR #SQLite @slecache Pour la prod • Faible consommation en

    ressource • Opérations simplifiées • création -> touch • sauvegarde -> cp ou .backup • déploiement -> scp ou git • suppression -> rm • renommage -> mv • ajouter un utilisateur -> • mettre à jour -> PROS
  14. #DevoxxFR #SQLite @slecache A retenir • Largement disponible (CLI &

    libs) • KISS • Facile à opérer • Faible consommation en ressource -> GreenIT • Performance : pas de latence réseau, ni de sérialisation • Requêtes en µs pas en ms • N+1 n’existe pas PROS
  15. #DevoxxFR #SQLite @slecache Concurrence • 1 fichier local -> 1

    seul accès • 1 seul writer • readers bloqués par writers • writers bloqués par readers
  16. #DevoxxFR #SQLite @slecache Types de données • Booléen • INTEGER

    : 1 / 0 • Date et Time • TEXT (ISO 8601) : '20240417T170000+0200' • REAL (jour julien) : 2460418.2083333 • INTEGER (epoch Unix) : 1713366000000 • Pas de DECIMAL CONS
  17. #DevoxxFR #SQLite @slecache Durabilité • Stockage local -> SPOF •

    Types de stockage • HDD 99% • EBS (gp3) 99.9% • EBS (io2) 99.999% • S3 99.999999999% CONS
  18. #DevoxxFR #SQLite @slecache Mitigation • Coût, Complexité, Performance : choisissez-en

    2 • Options • Backups réguliers • Streaming en continu : Litestream • Clusters SQLite • rqlite, dqlite • Turso • LumoSQL • Stockage répliqué : LiteFS CONS litestream replicate \ my.db s3://mybucket/my.db
  19. #DevoxxFR #SQLite @slecache Mise à l’échelle • Par défaut :

    verticale • Mais pourquoi pas horizontale ? -> YAGNI • sharding • 1 base par tenant • consistent hashing pour distribuer les tenants • eventually consistent si peu d’écriture et beaucoup de lectures CONS
  20. #DevoxxFR #SQLite @slecache Usages communs • Mobile/desktop • Embarqué •

    Serverless/edge functions • LLM Vector Similarities Search Usages
  21. #DevoxxFR #SQLite @slecache Quand l’utiliser ? • Embarqué : faible

    empreinte mémoire/CPU • Forte charge en lecture • Flux de requêtes modéré (100 req/s) : beaucoup d’applications • Prototypage : rapide à mettre en place et compatible SQL • Analyse locale de données : simple, complet et rapide Usages
  22. #DevoxxFR #SQLite @slecache CSV² .load vsv CREATE VIRTUAL TABLE myvtable

    USING vsv(filename=myfile.csv); INSERT INTO mytable SELECT * FROM myvtable; -- 475k lignes/sec TIPS
  23. #DevoxxFR #SQLite @slecache FILE 2 mem sqlite3 my.db PRAGMA LOCKING_MODE

    = Exclusive; attach database ':memory:' as 'RAMDB'; create table RAMDB.my_table as select * from main.my_table; TIPS
  24. #DevoxxFR #SQLite @slecache Aller plus loin • VSS • Wasm

    • Redka : Redis par SQLite • Turso avec libSQL • SQLite is not a toy database TIPS
  25. #DevoxxFR #SQLite @slecache Ce qu’il faut retenir • Write Ahead

    Log • 2 pools de connexion (ro/rw) avec une taille max à 1 • SQL • SQL ! • SQL !! TIPS
  26. #DevoxxFR #SQLite @slecache Ressources • sqlite.org • Template : Devoxx

    France • JetBrains Mono Font • Timeline : slidegso & freepik THX