12 puan yazan GN⁺ 2025-12-13 | 1 yorum | WhatsApp'ta paylaş
  • Litestream VFS, SQLite veritabanlarını nesne depolamadan (S3 vb.) doğrudan okuyup sorgulamayı mümkün kılan eklenti biçiminde bir genişletmedir
  • Tüm veritabanını indirmeden uzak yedek dosyaları üzerinde anında sorgu ve zamana noktasal geri yükleme (Point-in-Time Recovery, PITR) yapılabilir
  • Dahili olarak LTX formatını kullanarak değişen sayfa kümelerini verimli biçimde yönetir ve tekrarlanan sayfaları atlayan sıkıştırma (compaction) ile geri yükleme hızını artırır
  • SQLite’ın VFS arayüzünü kullanarak yalnızca okuma davranışını yakalar; yazma işlemleri ise mevcut Litestream süreci tarafından yürütülür
  • Saniye düzeyinde yedekleme ve indeks güncellemeleri sayesinde neredeyse gerçek zamanlı bir replika sunar ve bulut ortamlarında hızlı sorgu çalıştırmayı destekler

Litestream VFS’ye genel bakış

  • Litestream VFS, SQLite’ın nesne depolama URL’sini doğrudan veri kaynağı olarak kullanabilmesini sağlayan bir özelliktir
    • SQLite shell’de .load litestream.so ve .open file:///my.db?vfs=litestream komutlarıyla etkinleştirilebilir
    • Sonrasında S3’te saklanan yedek dosyaları temel alınarak sorgular çalıştırılabilir
  • Tüm veritabanını indirmeden uzak yedekten doğrudan sorgu çalıştırmak mümkündür
    • Örnekte SELECT * FROM sandwich_ratings sorgusuyla S3’te depolanan verinin bir kısmı anında görüntülenir

Zamana noktasal geri yükleme (PITR) özelliği

  • PRAGMA litestream_time = '5 minutes ago'; komutuyla belirli bir zamandaki veri durumunu görüntülemek mümkündür
    • Göreli zaman (5 minutes ago) veya mutlak zaman (2000-01-01T00:00:00Z) belirtilebilir
    Reklam
  • Böylece anında zamana noktasal geri yükleme (Point-in-Time Recovery) SQL düzeyinde gerçekleştirilebilir
    • Örnekte hatalı bir UPDATE çalıştırıldıktan sonra 5 dakika önceki duruma dönülerek doğru veriler doğrulanır

LTX formatı ve veri sıkıştırma

  • Litestream v0.5, LTX (Litestream Transaction eXchange) formatını entegre eder
    • Önceki sürümlerde SQLite sayfalarının tamamı aktarılırken, LTX yalnızca sıralı sayfa kümelerini aktarır
  • LTX’in temelinde “compaction” özelliği vardır; bu özellik geri yükleme sırasında yalnızca her sayfanın en güncel sürümünü seçer
    • Örnek: 1 2 3 5 3 5 4 5 5 içinden yalnızca en sağdaki 5, 4, 3, 2, 1 kullanılır
    Reklam
  • LTX yalnızca tüm veritabanında değil, LTX dosya kümeleri arasında da sıkıştırma yapabilir; bu sayede PITR geri yükleme mümkün olur
  • LTX dosyalarının trailer bölümünde her sayfanın ofset indeksi bulunur, bu sayede
    • Tüm dosyayı indirmeden S3 Range istekleri ile yalnızca gerekli sayfalar okunabilir

VFS’nin uygulanma biçimi

  • Litestream VFS, SQLite’ın VFS (Virtual File System) arayüzü kullanılarak uygulanır
    • VFS, SQLite’ın işletim sistemi erişim katmanını soyutlayan eklenti yapısıdır
  • Litestream VFS yalnızca okuma (Read) işlemlerini ele alır; yazma (Write) işlemleri mevcut Litestream süreci tarafından yürütülür
  • SQLite bir sayfayı okuduğunda, VFS istenen bayt ofseti yerine sayfa indeksi tabanlı eşleme yapar
    • İndeksten dosya adı, gerçek ofset ve sayfa boyutu bulunur; ardından S3 API’sinin Range başlığı ile ilgili blok indirilir
  • LRU cache uygulanarak sık erişilen “hot page”ler bellekte tutulur ve S3 çağrılarının sayısı en aza indirilir
Reklam

Gerçek zamanlı replikasyon ve performans

  • Litestream saniyede bir kez L0 düzeyi yedekleme gerçekleştirir
    • VFS, S3 yolunu periyodik olarak yoklayarak indeksi kademeli olarak günceller
    • Sonuç olarak neredeyse gerçek zamanlı bir replika (near-realtime replica) oluşturulur
  • Tüm veritabanını stream etmek gerekmeden hemen kullanılabilir
  • Bu yapı sayesinde hızlı başlangıç süresi ve kısa geri yükleme süresi elde edilir

Kullanım alanları ve önemi

  • Litestream, veritabanının tüm durumlarını saniye düzeyinde çözünürlükle yedek olarak saklar
    • DELETE veya UPDATE hatalarında istenen zamana anında geri dönülebilir
  • Nesne depolamadan doğrudan sorgulama yapabilen bu yapı, ephemeral sunucu ortamlarında da hızlı çalışır
  • Karmaşık mekanizmalara ihtiyaç duymadan SQLite’ın temel özelliklerinden yararlanarak basit ama güçlü bir yedekleme ve geri yükleme sistemi sunar
  • Fly.io’nun dahili API’sinde de kullanılıyor ve üretim ortamında da kararlı şekilde işletilebiliyor

1 yorum

 
GN⁺ 2025-12-13
Hacker News yorumları
  • Vay, bu benim Go için yaptığım sqlite vfs modülünü kullanıyor
    Yazdığım kodun başkalarına yardımcı olduğunu fark ettiğim her seferde gerçekten çok mutlu oluyorum
    psanford/sqlite3vfs
    • İyi çalıştı. Eline sağlık
    • Sonuçta hayatta istediğimiz şey tam da böyle anlar
  • Bu gerçekten harika. Litestream VFS, Unix felsefesini olduğu gibi yansıtıyor
    SQLite her zamanki gibi çalışıyor, Litestream ise onun üstünde şeffaf biçimde çalışıyor
    Yani yalnızca SQL ve SQLite pragma'larıyla belirli bir zamana anında geri yükleme (PITR) sağlanabiliyor.
    Üretim veri setine doğrudan dokunmadan geçmiş verileri hızlıca sorgulayabiliyorsunuz
  • Arayüz tasarımı gerçekten çok temiz
    Ortam değişkeniyle S3 bucket'ını belirleyip, SQLite'ta .load litestream.so sonrasında
    PRAGMA litestream_time = '5 minutes ago'; ile geçmişteki bir andaki veriyi anında sorgulayabiliyorsunuz
    • macOS'ta brew install sqlite3 sonrasında
      .load litestream sqlite3_litestreamvfs_init şeklinde init fonksiyon adını doğrudan belirtmek gerekiyor
  • bun:sqlite ile de başarıyla çalıştırdım
    Sadece "LITESTREAM_REPLICA_URL" ve AWS anahtar ortam değişkenlerini ayarlamak yeterli
    Uzantıyı temp.loadExtension("/path/to/litestream.dylib", "sqlite3_litestreamvfs_init") ile yükledikten sonra
    file:my.db?vfs=litestream olarak açarsanız hemen kullanılabiliyor
    • Bunun daha çok JavaScript sunucu (bun) ortamlarında kullanım için mi düşünüldüğünü merak ediyorum
    • İyi çalışmasına sevindim. Bu arada .dylib dosya yolunu nasıl bulduğunu merak ettim
    • Bu arada, bu örnekte ortam değişkeni ayarlama kısmı dotenv ile çalışmıyor. Mutlaka çalıştırma anında doğrudan verilmesi gerekiyor
  • Gerçekten harika bir özellik.
    Benim kullanım senaryom, S3'te tutulan salt okunur bir SQLite DB'yi web sitesinde doğrudan kullanmak
    DB, cron işi vb. ile güncelleniyor ve web sitesi en güncel veriyi sadece Litestream VFS üzerinden okuyor
    Böyle bir kullanımın uygun olup olmadığını ve Python için entegre bir modül olup olmadığını merak ediyorum
    Şu anda Flask uygulaması veriyi Google Spreadsheet'den alıp SQLite'a dönüştürüyor ve her gün güncelliyor
    Uygulamamın koduna bakın
    • Yazarıyım. Litestream VFS, yedek veriyi her 1 saniyede bir otomatik olarak poll ediyor ve güncel kalıyor
      Ek bir Python kodu olmadan SQLite CLI'da da aynen çalışıyor
    • Benzer bir kullanım için ZeroFS'i de tavsiye ederim
      Dış bağımlılık olarak yalnızca S3 kullanıyor ve SQLite ile de iyi uyum sağlıyor
      ZeroFS SQLite performansı için bakın
  • Bunu Go için SQLite sürücüsünde de zaten uygulamıştım
    ncruces/go-sqlite3 örnek kodu
    Ortam değişkenleri olmadan program koduyla kontrol edilebiliyor ve birden fazla DB aynı anda yönetilebiliyor
    Ancak PRAGMA litestream_time, bağlantı düzeyinde uygulandığı için connection pool kullanırken dikkat etmek gerekiyor
    • .load litestream.so ifadesini görünce aklıma hemen ncruces/go-sqlite3 geldi
      Bunu wasm ortamında da çalıştırmak zor oldu mu diye merak ettim
  • Son zamanlarda DuckDB öğrenirken SQLite ile farklarını hissediyorum
    DuckDB'nin “DuckLake” uzantısı, her transaction için snapshot oluşturarak “time travel” özelliği sunuyor
    Bu, Litestream VFS'nin PITR özelliğine benziyor
    OLTP tarafında buna kurtarma özelliği deniyor, OLAP tarafında ise “Time Travel” deniyor
    DuckLake, dış katalog DB'si (PostgreSQL/MySQL/SQLite) kullanarak çoklu süreç erişimini koordine ediyor
    Buna karşılık Litestream, S3 üzerindeki değişmez LTX dosyaları sayesinde birden fazla okuyucunun aynı anda erişmesine izin veriyor
    Her iki dünya da “paylaşımlı depolama + metadata + compaction” yapısına yakınsıyor
    Böyle projeler arasında daha fazla çapraz iş birliği olmasını isterim
  • Bir sandviç meraklısı olarak, o sandviç puanlama verisini gerçekten merak ediyorum
  • İlginç ama tam olarak hangi yazılımın duyurulduğu kafamı karıştırdı. Bu, Litestream'in yeni bir sürümü mü?
    • Yazarıyım. Evet, Litestream v0.5.3 yeni yayımlandı ve salt okunur VFS seçeneği eklendi
      v0.5.3 sürüm notları
    • Bu sürümde multi-tenant DB'ler için dizin replikasyonu desteği de var. Harika bir ekleme olmuş
  • Bunun sqlite uzantılarıyla birlikte de çalışıp çalışmadığını merak ediyorum
    Örneğin sqlite-vec ya da vss gibi vektör arama uzantıları kullanırken,
    Litestream ile S3'e gerçek zamanlı yedek alıp Litestream VFS ile uzaktan sorgulama yapılabiliyor mu bilmek istiyorum
    • Ben de merak ediyorum. Muhtemelen sorgular yerelde çalışıyor ve gereken sayfaları S3'ten sayfa bazında çekiyorsa muhtemelen çalışır
      Galiba doğrudan test etmekten başka yol yok
    • Mümkün (hepsi bu)