- Litestream VFS adalah ekstensi berbentuk plugin yang memungkinkan SQLite membaca dan menjalankan kueri langsung dari object storage (seperti S3)
- Memungkinkan kueri instan dari file cadangan jarak jauh dan pemulihan titik waktu (Point-in-Time Recovery, PITR) tanpa perlu mengunduh seluruh database
- Secara internal menggunakan format LTX untuk mengelola kumpulan halaman yang berubah secara efisien, serta meningkatkan kecepatan pemulihan dengan compaction yang melewati halaman duplikat
- Memanfaatkan antarmuka VFS milik SQLite untuk hanya mencegat operasi baca, sementara penulisan tetap ditangani oleh proses Litestream yang sudah ada
- Menyediakan replika yang nyaris real-time melalui backup per detik dan pembaruan indeks, sehingga mendukung eksekusi kueri cepat di lingkungan cloud
Gambaran Umum Litestream VFS
- Litestream VFS adalah fitur yang memungkinkan SQLite menggunakan URL object storage langsung sebagai sumber data
- Dapat diaktifkan di shell SQLite dengan perintah
.load litestream.so dan .open file:///my.db?vfs=litestream
- Setelah itu, kueri dapat dijalankan berdasarkan file cadangan yang disimpan di S3
- Memungkinkan menjalankan kueri langsung dari backup jarak jauh tanpa mengunduh seluruh database
- Dalam contoh, kueri
SELECT * FROM sandwich_ratings langsung mengambil sebagian data yang tersimpan di S3
Fitur Point-in-Time Recovery (PITR)
- Dengan perintah
PRAGMA litestream_time = '5 minutes ago';, pengguna dapat melihat status data pada titik waktu tertentu
- Bisa menggunakan waktu relatif (
5 minutes ago) atau waktu absolut (2000-01-01T00:00:00Z)
- Ini memungkinkan Point-in-Time Recovery instan di level SQL
- Dalam contoh, setelah
UPDATE yang salah dijalankan, data dikembalikan ke kondisi 5 menit sebelumnya untuk memverifikasi keadaan normal
Format LTX dan kompresi data
- Litestream v0.5 mengintegrasikan format LTX (Litestream Transaction eXchange)
- Versi sebelumnya mengirim seluruh halaman SQLite, tetapi LTX hanya mengirim kumpulan halaman berurutan yang diperlukan
- Inti dari LTX adalah fitur “compaction”, yang memilih hanya versi halaman terbaru saat pemulihan
- Contoh: dari
1 2 3 5 3 5 4 5 5, yang dipakai hanya 5, 4, 3, 2, 1 paling kanan
- LTX dapat dikompaksi bukan hanya untuk seluruh database tetapi juga antar kumpulan file LTX, sehingga pemulihan PITR menjadi mungkin
- Trailer pada file LTX berisi indeks offset tiap halaman, sehingga
- halaman yang dibutuhkan saja bisa dibaca melalui permintaan S3 Range tanpa mengunduh seluruh file
Cara implementasi VFS
- Litestream VFS diimplementasikan menggunakan antarmuka VFS (Virtual File System) milik SQLite
- VFS adalah struktur plugin yang mengabstraksikan lapisan akses OS pada SQLite
- Litestream VFS hanya menangani operasi Read, sedangkan Write tetap ditangani oleh proses Litestream yang sudah ada
- Saat SQLite membaca halaman, VFS melakukan pemetaan berbasis indeks halaman alih-alih menggunakan byte offset yang diminta
- Dari indeks, sistem mencari nama file, offset aktual, dan ukuran halaman, lalu hanya mengunduh blok yang diperlukan melalui header Range pada API S3
- Menerapkan cache LRU untuk menyimpan “hot page” yang sering diakses di memori, sehingga jumlah panggilan ke S3 dapat diminimalkan
Replikasi real-time dan performa
- Litestream melakukan backup level L0 sekali per detik
- VFS secara berkala melakukan polling ke jalur S3 untuk memperbarui indeks secara bertahap
- Hasilnya adalah replika nyaris real-time (near-realtime replica)
- Dapat langsung digunakan tanpa perlu melakukan streaming seluruh database
- Berkat struktur ini, sistem memperoleh startup yang cepat dan waktu pemulihan yang singkat
Pemanfaatan dan makna
- Litestream menyimpan backup semua status database dengan resolusi per detik
- Saat terjadi kesalahan
DELETE atau UPDATE, data bisa langsung dipulihkan ke titik waktu yang diinginkan
- Struktur yang memungkinkan kueri langsung dari object storage membuatnya cepat bahkan di lingkungan server ephemeral
- Tanpa mekanisme yang rumit, sistem ini memanfaatkan fitur dasar SQLite untuk menyediakan skema backup dan pemulihan yang sederhana namun kuat
- Sudah digunakan dalam API internal Fly.io, dan dapat dioperasikan secara stabil di lingkungan produksi
Belum ada komentar.