Snaplake - ferramenta self-hosted para consultar dados antigos do banco sem restaurar backups
(snaplake.clroot.io)Na empresa, como desenvolvedor solo, eu administro vários servidores/serviços e às vezes recebo perguntas como: "No fim do mês passado, como esses dados estavam?"
Toda vez, era trabalhoso demais repetir o processo de procurar um backup pg_dump, subir um banco temporário, restaurar, executar consultas e depois limpar tudo, então acabei criando isso eu mesmo.
O Snaplake é uma ferramenta self-hosted que faz snapshots periódicos de tabelas do banco em arquivos Parquet e permite consultar diretamente com SQL via DuckDB, sem restaurar backups.
Principais recursos
- Captura de snapshots — salva tabelas do PostgreSQL e MySQL como arquivos Apache Parquet. Suporta snapshots automáticos baseados em Cron e políticas de retenção (diária/mensal)
- Consultas SQL — com base em DuckDB, permite consultar imediatamente com SQL qualquer snapshot de qualquer momento. Suporta join de tabelas, agregações e exportação em CSV/JSON
- Comparação de snapshots — coloca snapshots de dois momentos lado a lado e mostra diff por linha. Linhas adicionadas/removidas/alteradas são distinguidas por cores
- Armazenamento flexível — sistema de arquivos local ou storage compatível com S3 (AWS S3, MinIO etc.)
Stack técnica
- Backend: Kotlin, Spring Boot 3.4, Java 21
- Query Engine: DuckDB (consulta direta em arquivos Parquet)
- Frontend: React 19, TypeScript, Vite
- Armazenamento de metadados: SQLite
- Autenticação: JWT + Argon2
Você pode começar imediatamente com uma única linha de Docker.
docker run -d --name snaplake -p 8080:8080 -v snaplake-data:/app/data abcdkh1209/snaplake:latest
Parece ser útil para equipes pequenas ou desenvolvedores solo que têm dificuldade para adotar ferramentas caras de observabilidade de dados. Feedbacks são bem-vindos!
- Landing page: https://snaplake.clroot.io
- GitHub: https://github.com/clroot/snaplake
- Docker Hub: https://hub.docker.com/r/abcdkh1209/snaplake
1 comentários
Simples, mas certeiro. Muito interessante!