Snaplake – Self-Hosting-Tool zum Abfragen historischer DB-Daten ohne Backup-Wiederherstellung
(snaplake.clroot.io)Als Solo-Entwickler in einem Unternehmen verwalte ich mehrere Server und Services, und bekomme dabei immer wieder Fragen wie: „Wie sahen diese Daten Ende letzten Monats aus?“
Jedes Mal erst ein pg_dump-Backup zu suchen, eine temporäre DB hochzufahren, sie wiederherzustellen, Queries auszuführen und danach alles aufzuräumen, war mir viel zu umständlich – deshalb habe ich das selbst gebaut.
Snaplake ist ein Self-Hosting-Tool, das DB-Tabellen regelmäßig als Parquet-Dateien snapshotet und sie ohne Backup-Wiederherstellung direkt mit DuckDB per SQL abfragbar macht.
Hauptfunktionen
- Snapshot-Erfassung — Speichert PostgreSQL- und MySQL-Tabellen als Apache-Parquet-Dateien. Unterstützt Cron-basierte automatische Snapshots und Aufbewahrungsrichtlinien (täglich/monatlich)
- SQL-Abfragen — Auf Basis von DuckDB lassen sich Snapshots beliebiger Zeitpunkte sofort per SQL abfragen. Tabellen-Joins, Aggregationen sowie Export nach CSV/JSON sind möglich
- Snapshot-Vergleich — Stellt Snapshots von zwei Zeitpunkten nebeneinander und zeigt zeilenweise Diffs. Hinzugefügte/gelöschte/geänderte Zeilen werden farblich unterschieden
- Flexibler Storage — Lokales Dateisystem oder S3-kompatibler Storage (AWS S3, MinIO usw.)
Tech-Stack
- Backend: Kotlin, Spring Boot 3.4, Java 21
- Query Engine: DuckDB (direkte Abfrage von Parquet-Dateien)
- Frontend: React 19, TypeScript, Vite
- Speicherung der Metadaten: SQLite
- Authentifizierung: JWT + Argon2
Mit einer einzigen Docker-Zeile kann man sofort loslegen.
docker run -d --name snaplake -p 8080:8080 -v snaplake-data:/app/data abcdkh1209/snaplake:latest
Ich denke, das könnte für kleine Teams oder Solo-Entwickler nützlich sein, für die teure Datenbeobachtungs-Tools schwer einzuführen sind. Feedback ist willkommen!
- Landingpage: https://snaplake.clroot.io
- GitHub: https://github.com/clroot/snaplake
- Docker Hub: https://hub.docker.com/r/abcdkh1209/snaplake
1 Kommentare
Einfach, aber überzeugend – macht Spaß!