- SQLite Page Explorer est une petite application GUI qui permet d’explorer une base de données SQLite page disque par page disque, comme SQLite la voit
- Elle n’affiche pas le niveau schéma habituellement manipulé par les développeurs — tables, lignes, SQL — mais le niveau des pages, ce qui permet d’examiner la structure réelle des index sur disque et l’efficacité du stockage
- Grâce à redbean, cosmopolitan et αcτµαlly pδrταblε εxεcµταblε, elle s’exécute nativement sur Windows, Linux, MacOS, plusieurs BSD, ARM64 et x64 sous forme de fichier exécutable unique de 6,5 Mo
- L’exécutable est aussi un fichier zip contenant le code Lua et des parseurs du format binaire des bases de données ; il suffit de glisser un fichier de base de données dessus ou de le lancer depuis la console pour ouvrir l’application dans un onglet de navigateur
- Les exécutables au format APE peuvent provoquer des faux positifs dans la détection antivirus du navigateur ou du système d’exploitation, et le chargement de la vue de plus haut niveau peut être lent pour les grosses bases de données de plus de 500 Mo
Une GUI pour voir directement les pages SQLite
- SQLite Page Explorer est une petite application GUI permettant d’explorer une base de données SQLite « page par page »
- SQLite et la plupart des bases de données stockent généralement les données dans des pages de blocs disque de 4 Ko, une structure destinée à accélérer les lectures et les écritures
- Le travail courant des développeurs se fait au niveau schéma, avec des tables, des lignes et du SQL, mais cet outil permet d’examiner le niveau des pages tel que SQLite le voit
Ce que permet l’exploration au niveau des pages
- Voir à quoi ressemblent réellement les index sur disque
- Un index est essentiellement stocké comme une petite table séparée
- Explorer des manières de stocker les données de façon plus compacte, ce qui peut contribuer à accélérer les requêtes et les applications
- Aider à repérer des problèmes et inefficacités qui peuvent être invisibles au niveau schéma
- Acquérir une intuition sur les B-Tree, une structure de données importante à la base des systèmes de fichiers et des bases de données
Un exécutable unique utilisable partout
- Distribué sous forme d’exécutable unique de 6,5 Mo grâce à redbean, cosmopolitan et αcτµαlly pδrταblε εxεcµταblε
- Fonctionne sur Windows, Linux, MacOS et plusieurs BSD, avec prise en charge d’ARM64 et de x64
- L’exécutable est aussi un fichier zip qui contient le code Lua faisant tourner l’application, des parseurs du format binaire des bases de données, etc.
Installation et lancement
- Télécharger
sqlite-page-explorer.comdepuis la page des releases - Sur les systèmes de type Unix, exécuter
chmod +x - Glisser un fichier de base de données sur l’exécutable, ou le lancer depuis la console comme suit
sqlite-page-explorer.com mySqliteDatabase.db
- L’application s’ouvre dans un onglet de navigateur
- Une fois l’utilisation terminée, appuyer deux fois sur Ctrl-C dans la console
Points d’attention et mode de développement
- Les exécutables APE peuvent provoquer des faux positifs dans la détection antivirus du navigateur ou du système d’exploitation
- Des projets comme llamafile utilisent la même technique de binaire polyglotte
- Les précautions habituelles s’imposent pour les fichiers téléchargés depuis Internet
- Si une grande base de données de plus de 500 Mo est chargée, la vue de plus haut niveau, qui lit toutes les pages, peut être lente à charger
- La compilation consiste à zipper le contenu de
files/dansredbean-3.0.0-cosmos.com- Le script Python 3.6+ inclus,
zipitup.py, permet aussi de compiler
- Le script Python 3.6+ inclus,
- Pendant le développement,
redbean-3.0.0-cosmos.com -D filespermet de servir l’application depuis le sous-répertoirefilessans recréer le zip à chaque fois - Le projet est né d’une expérimentation avec redbean et d’une première utilisation de Lua, et le code pourrait encore être davantage nettoyé
- Un système de templates pourrait aider à réduire les concaténations de chaînes et les appels à
Write() - Parmi les idées d’amélioration : fermer automatiquement la console quand le dernier onglet est fermé, ou s’arrêter vers 10 000 pages avant confirmation de l’utilisateur pour les très grandes bases de données
- Les PR sont les bienvenues
- Un système de templates pourrait aider à réduire les concaténations de chaînes et les appels à
1 commentaires
Avis sur Hacker News
Vraiment excellent. J’ai publié ici une capture d’écran en GIF animé : https://simonwillison.net/2025/Feb/6/sqlite-page-explorer/
Super ! Il est étonnamment facile de commencer à écrire soi-même du code pour parser un fichier SQLite avec la documentation du format de fichier SQLite à côté.
C’est assez proche de la manière dont ce projet procède, et je le recommande vivement pour les raisons indiquées dans la section « Why? » du README.
https://www.sqlite.org/fileformat.html
J’ai aussi quelques visualisations, mais avec beaucoup moins de fonctionnalités que le logiciel de l’article d’origine : https://www.nayuki.io/page/sqlite-database-file-visualizatio...
Vraiment impressionnant ! Pour avoir déjà travaillé sur les structures internes de SQLite, je sais que ce genre de travail et d’expérimentation est loin d’être anodin.
À ce sujet, j’ai vu récemment sqlite-repr [1] : il est fait avec Dioxus et propose une approche intéressante de la visualisation de SQLite.
[1] https://torymur.github.io/sqlite-repr/
J’ai fait quelque chose de ce genre il y a plus de dix ans en créant un outil de sécurité. Quand on s’y essaie, on apprécie encore davantage à quel point c’est un moteur finement conçu.
J’ai toujours pensé qu’un explorateur, ou même simplement une bibliothèque de base, serait amusant ; c’est donc réjouissant de voir celui-ci publié sous licence MIT.
Ça a l’air super, beau travail.
Ce serait bien d’ajouter une légende des couleurs sur le premier écran. Au début, je ne savais pas ce que les couleurs signifiaient.
Il semble avoir un peu de mal avec les grosses bases de données. La mienne faisait 3,6 Go et 942719 pages ; ce serait pratique de paginer l’affichage.
title, ce qui permet de comprendre le code couleur, mais ce n’est pas très explicite.C’est vrai aussi que les grosses bases deviennent lentes. Comme les pages sont parcourues « côté serveur », cela prend du temps quand il y en a des centaines de milliers.
Idéalement, il faudrait une API de plages de pages avec défilement en temps réel, mais une approche plus simple du type « afficher les 10 000 pages suivantes » pourrait aussi fonctionner.
Bon projet, mais quand je lance l’exécutable, j’obtiens l’erreur
"failed to run lua code: /index.lua:3: module 'utils' not found:".Comme je ne suis pas assez discipliné pour suivre un cours ou une formation jusqu’au bout, c’était vraiment excellent pour comprendre visuellement ce qui se passe en interne et comment structurer les données plus efficacement.
J’ai récemment écrit un article expliquant le format de fichier SQLite, avec quelques diagrammes qui peuvent aider. Ça pourrait être utile.
https://blog.jabid.in/2024/11/24/sqlite.html
Le code source de SQLite inclut un outil CLI appelé showdb, pratique pour inspecter les fichiers de base de données.
Génial. Je suis en train d’apprendre les bases de données et c’est très utile.