Este projeto mostra como publicar um site estático no GitHub Pages que baixa um banco SQLite grande, comprime em gzip/brotli, grava no navegador (OPFS/IndexedDB) e executa consultas localmente com SQLite WASM.
- Repositório e artefatos publicados: ~1 GB é o teto prático. Acima disso a publicação costuma falhar.
- Arquivos individuais no Git: evite >100 MB. Para bancos >500 MB, publique o
.sqlite.gzvia GitHub Releases ou outro storage estático e aponte a URL no loader. - Builds automatizados (Pages Actions) têm janela curta (~10 min) e banda limitada. Prefira subir o arquivo já comprimido, sem etapas pesadas no CI.
docs/: site servível pelo Pages.docs/data/: manifest e (opcionalmente) o banco comprimido. Para arquivos grandes, use só um placeholder e referencie uma URL externa.docs/js/: loader do banco e UI.docs/vendor/: dependências de terceiros (pako). O wasm do SQLite é carregado de CDN por padrão.scripts/: utilitários para preparar o banco.
- Gerar/atualizar o banco:
sqlite3 data/source.sqlite ".read migrations.sql", depoisscripts/prepare-db.sh. - Publicar o
.sqlite.gz(recomendado via Releases) e atualizardocs/data/manifest.jsoncomversion,url,sizeesha256. - Rodar
scripts/serve.shpara testar localmente (http://localhost:8080). - Subir para o GitHub e habilitar Pages apontando para
docs/.
- O deploy do Pages gera os artefatos no CI (db comprimido + manifest).
- Por isso os arquivos gerados localmente ficam no
.gitignore:data/source.sqlite,docs/data/db.sqlite.*,docs/data/manifest.jsonetmp/. - Para testes locais, gere com
scripts/generate-test-db.shescripts/prepare-db.sh.
- Gerar o banco grande de teste:
scripts/generate-test-db.sh
Opcional (ajustar tamanho):
ROWS=450000 PAYLOAD_SIZE=1024 scripts/generate-test-db.sh data/source.sqlite
Observações:
- Execute os comandos a partir da raiz do projeto.
- O banco de origem fica em
data/source.sqlite(fora dedocs/). - Os arquivos comprimidos e o
manifest.jsonsão gravados emdocs/data/.
- Compactar e gerar o manifest:
DB_VERSION=test-500mb \
DB_URL=./data/db.sqlite.gz \
DB_BROTLI_URL=./data/db.sqlite.br \
scripts/prepare-db.sh data/source.sqlite
- Servir localmente:
scripts/serve.sh 8080
Abrir http://localhost:8080 e executar uma query de teste:
SELECT id, nome, categoria, valor, length(payload) AS payload_len
FROM items
LIMIT 10;
- Navegador precisa suportar WASM e, para streaming eficiente,
DecompressionStreame OPFS. O loader possui fallback para pako + buffer em memória (menos ideal). - Mantenha consultas paginadas/limitadas na UI para evitar estouro de memória ao ler tabelas grandes.