Snaplake - เครื่องมือ self-hosted สำหรับดูข้อมูล DB ในอดีตโดยไม่ต้องกู้คืนแบ็กอัป
(snaplake.clroot.io)ในบริษัท ผมเป็นนักพัฒนาเดี่ยวที่ดูแลหลายเซิร์ฟเวอร์/บริการ และมักจะได้รับคำถามอย่าง "ข้อมูลนี้ ณ สิ้นเดือนที่แล้วเป็นอย่างไร?" อยู่บ่อย ๆ
ทุกครั้งต้องไปหาแบ็กอัป pg_dump แล้วยก DB ชั่วคราวขึ้นมา กู้คืน รันคิวรี แล้วค่อยเก็บกวาด วนแบบนี้ซ้ำ ๆ มันยุ่งยากเกินไป เลยทำขึ้นมาใช้เองครับ
Snaplake เป็นเครื่องมือ self-hosted ที่ทำสแนปช็อตตาราง DB เป็นไฟล์ Parquet ตามช่วงเวลา และสามารถใช้ DuckDB คิวรีด้วย SQL ได้ทันทีโดยไม่ต้องกู้คืนแบ็กอัป
ฟีเจอร์หลัก
- จับสแนปช็อต — บันทึกตาราง PostgreSQL, MySQL เป็นไฟล์ Apache Parquet รองรับสแนปช็อตอัตโนมัติแบบ Cron และนโยบายการเก็บรักษา (รายวัน/รายเดือน)
- SQL คิวรี — ใช้ DuckDB เป็นฐาน สามารถคิวรีสแนปช็อตของช่วงเวลาใดก็ได้ทันทีด้วย SQL รองรับการ join ตาราง การ aggregate และการส่งออกเป็น CSV/JSON
- เปรียบเทียบสแนปช็อต — วางสแนปช็อตจากสองช่วงเวลาเทียบกันแบบเคียงข้าง และดู diff ระดับแถว แยกสีแถวที่ถูกเพิ่ม/ลบ/เปลี่ยนแปลง
- สตอเรจยืดหยุ่น — ใช้ได้ทั้ง local filesystem หรือ S3-compatible storage (AWS S3, MinIO เป็นต้น)
เทคสแตก
- Backend: Kotlin, Spring Boot 3.4, Java 21
- Query Engine: DuckDB (คิวรีไฟล์ Parquet โดยตรง)
- Frontend: React 19, TypeScript, Vite
- การจัดเก็บเมทาดาทา: SQLite
- การยืนยันตัวตน: JWT + Argon2
เริ่มใช้งานได้ทันทีด้วย Docker เพียงบรรทัดเดียว
docker run -d --name snaplake -p 8080:8080 -v snaplake-data:/app/data abcdkh1209/snaplake:latest
คิดว่าน่าจะมีประโยชน์สำหรับทีมหรือ solo developer ขนาดเล็กที่นำเครื่องมือสังเกตการณ์ข้อมูลราคาแพงมาใช้ได้ยาก ยินดีรับฟีดแบ็กครับ!
- Landing: https://snaplake.clroot.io
- GitHub: https://github.com/clroot/snaplake
- Docker Hub: https://hub.docker.com/r/abcdkh1209/snaplake
1 ความคิดเห็น
เรียบง่ายแต่ชัดเจนดี น่าสนุกครับ!