HN abierto: Explorador de páginas en disco para SQLite
(github.com/QuadrupleA)- SQLite Page Explorer es una pequeña aplicación GUI que permite explorar una base de datos SQLite a nivel de páginas de disco, tal como la ve SQLite
- En lugar del nivel de esquema que los desarrolladores suelen manejar —tablas, filas y SQL—, muestra el nivel de páginas, lo que permite observar la estructura real en disco de los índices y la eficiencia del almacenamiento
- Usando redbean, cosmopolitan y αcτµαlly pδrταblε εxεcµταblε, se ejecuta de forma nativa en Windows, Linux, MacOS, varios BSD, ARM64 y x64 como un único ejecutable de 6.5 MB
- El ejecutable también es un archivo zip que contiene código Lua, un parser del formato binario de la base de datos, etc.; al arrastrar un archivo de base de datos o ejecutarlo desde la consola, la app se abre en una pestaña del navegador
- Los ejecutables con formato APE pueden generar falsos positivos en el navegador o en la detección de virus del sistema operativo, y en bases de datos grandes de más de 500 MB la carga de la vista de nivel superior puede ser lenta
Una GUI para ver directamente las páginas de SQLite
- SQLite Page Explorer es una pequeña aplicación GUI para explorar una base de datos SQLite “page by page”
- SQLite y la mayoría de las bases de datos suelen guardar los datos en páginas de bloques de disco de 4 KB, una estructura pensada para acelerar la lectura y la escritura
- El trabajo habitual de los desarrolladores se hace en el nivel de esquema, con tablas, filas y SQL, pero esta herramienta permite mirar el nivel de páginas tal como lo ve SQLite
Qué se puede ver con la exploración a nivel de páginas
- Permite comprobar cómo se ven realmente los índices en disco
- Básicamente, los índices se almacenan como pequeñas tablas separadas
- Permite analizar formas de almacenar los datos de manera más compacta, lo que puede ayudar a hacer más rápidas las consultas y las aplicaciones
- Ayuda a encontrar problemas e ineficiencias que quizá no sean visibles a nivel de esquema
- Permite ganar intuición sobre el B-Tree, una estructura de datos fundamental para los sistemas de archivos y las bases de datos
Ejecutarlo en cualquier parte con un solo archivo
- Se distribuye como un ejecutable único de 6.5 MB usando redbean, cosmopolitan y αcτµαlly pδrταblε εxεcµταblε
- Funciona en Windows, Linux, MacOS y varios BSD, con soporte tanto para ARM64 como para x64
- El ejecutable también es un archivo zip que incluye el código Lua que ejecuta la app, un parser del formato binario de la base de datos y más
Instalación y forma de ejecución
- Descarga
sqlite-page-explorer.comdesde la página de releases - En sistemas tipo Unix, ejecuta
chmod +x - Arrastra un archivo de base de datos al ejecutable o ejecútalo desde la consola así
sqlite-page-explorer.com mySqliteDatabase.db
- La app se abre en una pestaña del navegador
- Cuando termines de usarla, presiona Ctrl-C dos veces en la consola
Consideraciones y forma de desarrollo
- Los ejecutables APE pueden generar falsos positivos en el navegador o en la detección de virus del sistema operativo
- Proyectos como llamafile usan la misma técnica de binario políglota
- Conviene tomar las precauciones habituales con cualquier archivo descargado de internet
- Si se carga una base de datos grande de más de 500 MB, la vista superior que lee todas las páginas puede tardar en cargar
- El build se hace comprimiendo el contenido de
files/dentro deredbean-3.0.0-cosmos.com- También se puede compilar con el script
zipitup.py, compatible con Python 3.6+
- También se puede compilar con el script
- Durante el desarrollo, se puede usar
redbean-3.0.0-cosmos.com -D filespara servir la app desde el subdirectoriofilessin tener que volver a crear el zip cada vez - El proyecto formó parte de un experimento con redbean y del primer uso de Lua por parte del autor, por lo que todavía hay margen para ordenar mejor el código
- Un sistema de plantillas podría ayudar a reducir la concatenación de cadenas y las llamadas a
Write() - También hay ideas de mejora, como cerrar automáticamente la consola cuando se cierra la última pestaña o pausar cerca de las 10,000 páginas en bases de datos enormes antes de pedir confirmación al usuario
- Se aceptan PR
- Un sistema de plantillas podría ayudar a reducir la concatenación de cadenas y las llamadas a
1 comentarios
Opiniones en Hacker News
Realmente genial. Dejé aquí una captura de pantalla en GIF animado: https://simonwillison.net/2025/Feb/6/sqlite-page-explorer/
¡Genial! Es sorprendentemente fácil empezar a escribir uno mismo código para parsear un archivo SQLite con la documentación del formato de archivos de SQLite al lado.
Es parecido a cómo lo hace este proyecto, y lo recomiendo mucho por las razones que aparecen en la sección “Why?” del README.
https://www.sqlite.org/fileformat.html
También tengo una pequeña herramienta de visualización, aunque tiene muchas menos funciones que el software del post original: https://www.nayuki.io/page/sqlite-database-file-visualizatio...
¡Realmente impresionante! Habiendo trabajado antes con la estructura interna de SQLite, sé que este tipo de trabajo y experimentación no es para nada poca cosa.
Relacionado con esto, hace poco vi sqlite-repr [1], que está hecho con Dioxus y muestra un enfoque interesante para visualizar SQLite.
[1] https://torymur.github.io/sqlite-repr/
Hice algo así hace más de 10 años mientras creaba una herramienta de seguridad. Cuando lo haces, terminas apreciando más un motor diseñado con mucho cuidado.
Siempre pensé que sería divertido tener un explorador o aunque fuera una biblioteca básica, y me alegra especialmente ver que está publicado con licencia MIT.
Se ve genial, muy bien hecho.
Creo que estaría bueno agregar una leyenda de colores en la primera pantalla. Al principio no sabía qué significaban los colores.
Parece sufrir un poco con bases de datos grandes. Era una de 3.6 GB, con 942719 páginas; creo que sería bueno mostrarlas paginadas.
title, así que se puede entender el esquema de colores, pero no es muy claro.También es cierto que las bases de datos grandes se vuelven lentas. Como recorre las páginas del lado del “servidor”, si hay cientos de miles toma tiempo.
Idealmente estaría bueno tener una API de rangos de páginas con scroll en tiempo real, pero quizá también funcionaría algo simple como “ver las siguientes 10 mil páginas”.
Es un buen proyecto, pero al ejecutar el archivo sale el error
"failed to run lua code: /index.lua:3: module 'utils' not found:".Como alguien que no es lo suficientemente disciplinado como para seguir una conferencia o clase hasta el final, me resultó realmente bueno para entender visualmente qué ocurre por dentro y cómo estructurar los datos de forma más eficiente.
Hace poco escribí un artículo que explica el formato de archivos de SQLite, e incluí algunos diagramas que podrían ayudar. Puede ser útil.
https://blog.jabid.in/2024/11/24/sqlite.html
El código fuente de SQLite incluye una herramienta CLI llamada showdb que sirve para inspeccionar archivos de base de datos.
Genial. Estoy aprendiendo sobre bases de datos y me ayuda muchísimo.