HN em destaque: Explorador de páginas em disco do SQLite
(github.com/QuadrupleA)- O SQLite Page Explorer é um pequeno aplicativo com GUI que permite explorar um banco de dados SQLite do jeito que o SQLite o enxerga, no nível das páginas de disco
- Em vez do nível de esquema com que desenvolvedores normalmente lidam, como tabelas, linhas e SQL, ele mostra o nível de páginas, permitindo examinar a estrutura real em disco dos índices e a eficiência de armazenamento
- Usando redbean, cosmopolitan e αcτµαlly pδrταblε εxεcµταblε, ele roda nativamente em Windows, Linux, MacOS, vários BSDs, ARM64 e x64 como um único executável de 6,5 MB
- O executável também é um arquivo zip que contém código Lua, analisadores do formato binário do banco de dados e mais; ao arrastar um arquivo de banco de dados para ele ou executá-lo pelo console, o aplicativo abre em uma aba do navegador
- Executáveis no formato APE podem gerar falsos positivos em navegadores ou na detecção de vírus do sistema operacional, e bancos de dados grandes com mais de 500 MB podem ter carregamento lento na visualização de nível superior
GUI para ver páginas do SQLite diretamente
- SQLite Page Explorer é um pequeno aplicativo com GUI para explorar bancos de dados SQLite “page by page”
- O SQLite, assim como a maioria dos bancos de dados, normalmente armazena dados em páginas de bloco de disco de 4 KB, uma estrutura pensada para tornar leituras e gravações mais rápidas
- O trabalho comum de desenvolvimento acontece no nível de esquema, com tabelas, linhas e SQL, mas esta ferramenta permite observar o nível de páginas como o SQLite o vê
O que dá para ver com a exploração no nível de páginas
- É possível verificar como um índice realmente se parece em disco
- Basicamente, índices são armazenados como pequenas tabelas separadas
- Dá para analisar formas de armazenar dados de maneira mais compacta, o que pode se conectar a consultas e aplicações mais rápidas
- Ajuda a encontrar problemas e ineficiências que podem não aparecer no nível de esquema
- Permite ganhar intuição sobre a B-Tree, uma estrutura de dados importante que sustenta sistemas de arquivos e bancos de dados
Um único executável para rodar em qualquer lugar
- Distribuído como um executável único de 6,5 MB usando redbean, cosmopolitan e αcτµαlly pδrταblε εxεcµταblε
- Funciona em Windows, Linux, MacOS e vários BSDs, com suporte a ARM64 e x64
- O executável também é um arquivo zip que inclui o código Lua que roda o app, analisadores do formato binário do banco de dados e outros componentes
Instalação e forma de execução
- Baixe
sqlite-page-explorer.comna página de releases - Em sistemas Unix, execute
chmod +x - Arraste um arquivo de banco de dados para o executável ou execute no console assim
sqlite-page-explorer.com mySqliteDatabase.db
- O aplicativo será aberto em uma aba do navegador
- Ao terminar de usar, pressione Ctrl-C duas vezes no console
Pontos de atenção e forma de desenvolvimento
- Executáveis APE podem gerar falsos positivos na detecção de vírus do navegador ou do sistema operacional
- Projetos como llamafile também usam a mesma técnica de binário políglota
- Arquivos baixados da internet exigem os cuidados habituais
- Ao usar bancos de dados grandes, acima de 500 MB, a visualização de nível superior que lê todas as páginas pode ficar lenta
- O build é feito empacotando o conteúdo de
files/como zip dentro deredbean-3.0.0-cosmos.com- Também é possível fazer o build com o script Python 3.6+ incluído,
zipitup.py
- Também é possível fazer o build com o script Python 3.6+ incluído,
- Durante o desenvolvimento, é possível servir o app a partir do subdiretório
filescomredbean-3.0.0-cosmos.com -D files, sem recriar o zip toda vez - O projeto fez parte de um experimento com redbean e do primeiro uso de Lua pelo autor, então ainda há espaço para organizar melhor o código
- Um sistema de templates pode ajudar a reduzir concatenação de strings e chamadas a
Write() - Há ideias de melhoria, como encerrar automaticamente o console quando a última aba for fechada ou pausar por volta da página 10.000 em bancos de dados gigantes antes de pedir confirmação ao usuário
- PRs são bem-vindos
- Um sistema de templates pode ajudar a reduzir concatenação de strings e chamadas a
1 comentários
Opiniões no Hacker News
Muito legal. Publiquei aqui uma captura de tela em GIF animado: https://simonwillison.net/2025/Feb/6/sqlite-page-explorer/
Legal! É surpreendentemente fácil começar a escrever seu próprio código para fazer parsing de um arquivo SQLite com a documentação do formato de arquivo do SQLite ao lado
É parecido com a forma como este projeto faz, e recomendo muito pelos motivos descritos na seção “Why?” do README
https://www.sqlite.org/fileformat.html
Também há uma pequena ferramenta de visualização, mas com muito menos recursos do que o software do post original: https://www.nayuki.io/page/sqlite-database-file-visualizatio...
Realmente impressionante! Como alguém que já trabalhou com a estrutura interna do SQLite, sei que esse tipo de trabalho e experimentação não é pouca coisa
Relacionado a isso, vi recentemente o sqlite-repr [1], feito com Dioxus, que mostra uma abordagem interessante para visualização do SQLite
[1] https://torymur.github.io/sqlite-repr/
Fiz algo assim há mais de 10 anos ao criar uma ferramenta de segurança. Quando você faz isso, passa a gostar ainda mais de um engine projetado de forma muito enxuta
Sempre achei que seria divertido ter um explorador ou até uma biblioteca básica, e fiquei especialmente feliz ao ver que foi publicado sob licença MIT
Parece legal, ficou bem feito
Seria bom adicionar uma legenda de cores na primeira tela. No começo, eu não sabia o que as cores significavam
Ele parece sofrer um pouco com bancos de dados grandes. O meu tinha 3,6 GB e 942719 páginas; acho que seria bom paginar a exibição
title, então dá para entender o esquema de cores, mas não é tão claroTambém é verdade que bancos de dados grandes ficam lentos. Como as páginas são percorridas “no lado do servidor”, leva tempo quando há centenas de milhares delas
O ideal seria uma API de intervalo de páginas com rolagem em tempo real, mas algo simples como “ver as próximas 10 mil páginas” também poderia funcionar
Bom projeto, mas ao rodar o executável aparece o erro
"failed to run lua code: /index.lua:3: module 'utils' not found:"Como alguém sem disciplina suficiente para acompanhar uma palestra ou aula até o fim, isso foi ótimo para entender visualmente o que acontece internamente e como estruturar os dados de forma mais eficiente
Escrevi recentemente um texto explicando o formato de arquivo do SQLite e incluí alguns diagramas que podem ajudar. Talvez seja útil
https://blog.jabid.in/2024/11/24/sqlite.html
O código-fonte do SQLite inclui uma ferramenta de CLI chamada showdb, boa para inspecionar arquivos de banco de dados
Legal. Estou aprendendo sobre bancos de dados e isso ajuda bastante