1 pontos por GN⁺ 2025-02-08 | 1 comentários | Compartilhar no WhatsApp
  • 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.com na 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 de redbean-3.0.0-cosmos.com
    • Também é possível fazer o build com o script Python 3.6+ incluído, zipitup.py
  • Durante o desenvolvimento, é possível servir o app a partir do subdiretório files com redbean-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

1 comentários

 
GN⁺ 2025-02-08
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/

    • É uma honra :) Enquanto criava isso, pensei: “acho que o SimonW vai gostar”. Obrigado por compartilhar tantos experimentos com LLM e textos excelentes
  • 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

    • Sim, o formato do arquivo é fácil de ler! Sentei uma vez e, em poucas horas, cheguei até a implementar um leitor
      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...
    • Por coincidência, usei isso hoje e foi útil
  • 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

    • Ao passar o mouse, o tipo da página aparece no atributo title, então dá para entender o esquema de cores, mas não é tão claro
      També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