12 poin oleh GN⁺ 2025-12-13 | 1 komentar | Bagikan ke WhatsApp
  • 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)
    Iklan
  • 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
    Iklan
  • 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
Iklan

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

1 komentar

 
GN⁺ 2025-12-13
Komentar Hacker News
  • Oh, ini menggunakan modul sqlite vfs untuk Go yang saya buat
    Saya selalu sangat senang setiap kali tahu kode yang saya buat membantu orang lain
    psanford/sqlite3vfs
    • Berjalan dengan baik. Terima kasih berkat itu
    • Pada akhirnya, inilah momen yang kita inginkan dalam hidup
  • Ini benar-benar keren. Litestream VFS benar-benar mewujudkan filosofi Unix
    SQLite bekerja seperti biasa, dan Litestream berjalan di atasnya secara transparan
    Artinya, point-in-time recovery (PITR) bisa diwujudkan hanya dengan SQL dan pragma SQLite.
    Kita bisa dengan cepat menanyakan data lama tanpa menyentuh dataset produksi secara langsung
  • Desain antarmukanya benar-benar rapi
    Tentukan bucket S3 lewat variabel lingkungan, lalu di SQLite jalankan .load litestream.so, setelah itu
    data dari titik waktu lampau bisa langsung ditanyakan dengan PRAGMA litestream_time = '5 minutes ago';
    • Di macOS, setelah brew install sqlite3,
      Anda harus menentukan sendiri nama fungsi init seperti .load litestream sqlite3_litestreamvfs_init
  • Saya juga berhasil menjalankannya dengan bun:sqlite
    Cukup atur "LITESTREAM_REPLICA_URL" dan variabel lingkungan kunci AWS
    Setelah memuat ekstensi dengan temp.loadExtension("/path/to/litestream.dylib", "sqlite3_litestreamvfs_init"),
    buka dengan file:my.db?vfs=litestream dan bisa langsung dipakai
    • Saya penasaran apakah ini terutama ditujukan untuk lingkungan server JavaScript (bun)
    • Keren kalau berjalan baik. Tapi saya penasaran bagaimana Anda menemukan path file .dylib
    • Sebagai catatan, pada contoh ini bagian pengaturan variabel lingkungan tidak bekerja dengan dotenv. Harus ditentukan langsung saat eksekusi
  • Fitur yang sangat keren.
    Kasus penggunaan saya adalah langsung memakai SQLite DB read-only yang disimpan di S3 dari website
    DB diperbarui lewat pekerjaan cron dan semacamnya, dan website hanya membaca data terbaru lewat Litestream VFS
    Saya penasaran apakah penggunaan seperti ini aman, dan apakah ada modul integrasi Python
    Saat ini aplikasi Flask mengambil data dari Google Spreadsheet, mengubahnya ke SQLite, lalu memperbaruinya setiap hari
    Lihat kode aplikasi saya
    • Saya penulisnya. Litestream VFS secara otomatis melakukan polling data backup setiap 1 detik agar tetap mutakhir
      Ini juga bekerja langsung di SQLite CLI tanpa kode Python tambahan
    • Untuk penggunaan serupa, saya juga merekomendasikan ZeroFS
      Hanya memakai S3 sebagai dependensi eksternal dan juga cocok dengan SQLite
      Lihat performa SQLite di ZeroFS
  • Saya juga sudah mengimplementasikannya di driver SQLite untuk Go
    Contoh kode ncruces/go-sqlite3
    Bisa dikendalikan lewat kode program tanpa variabel lingkungan, dan dapat menangani beberapa DB sekaligus
    Hanya saja, PRAGMA litestream_time berlaku per koneksi, jadi perlu hati-hati saat memakai connection pool
    • Begitu melihat .load litestream.so, saya langsung teringat ncruces/go-sqlite3
      Saya penasaran apakah sulit membuatnya berjalan di lingkungan wasm
  • Belakangan saya belajar DuckDB dan merasakan perbedaannya dengan SQLite
    Ekstensi “DuckLake” milik DuckDB membuat snapshot pada setiap transaksi dan menyediakan fitur “time travel”
    Ini mirip dengan PITR milik Litestream VFS
    Di OLTP ini disebut fungsi pemulihan, sedangkan di OLAP disebut “Time Travel”
    DuckLake mengoordinasikan akses multi-proses memakai DB katalog eksternal (PostgreSQL/MySQL/SQLite)
    Sementara itu, Litestream memungkinkan banyak pembaca mengakses secara bersamaan lewat file LTX yang immutable di S3
    Di kedua dunia, semuanya tampak sedang berkumpul pada struktur “shared storage + metadata + compaction”
    Akan bagus jika ada lebih banyak kolaborasi lintas proyek seperti ini
  • Sebagai penggemar sandwich, saya benar-benar penasaran dengan data penilaian sandwich itu
  • Menarik sih, tapi saya bingung perangkat lunak apa tepatnya yang diumumkan. Apakah ini versi baru Litestream?
    • Saya penulisnya. Benar, Litestream v0.5.3 baru saja dirilis, dan opsi VFS read-only telah ditambahkan
      Catatan rilis v0.5.3
    • Versi ini juga mencakup dukungan replikasi direktori untuk DB multi-tenant. Tambahan yang luar biasa
  • Saya penasaran apakah ini juga bekerja bersama fitur ekstensi sqlite
    Misalnya saat memakai ekstensi pencarian vektor seperti sqlite-vec atau vss,
    saya ingin tahu apakah backup real-time ke S3 dengan Litestream dan query jarak jauh lewat Litestream VFS tetap memungkinkan
    • Saya juga penasaran. Mungkin query tetap dieksekusi secara lokal, dan kalau strukturnya mengambil dari S3 per halaman yang diperlukan, seharusnya bisa langsung bekerja
      Sepertinya memang harus diuji sendiri
    • Bisa (itu saja)