12 पॉइंट द्वारा GN⁺ 2025-12-13 | 1 टिप्पणियां | WhatsApp पर शेयर करें
  • Litestream VFS एक plugin-शैली का extension है जो SQLite database को object storage (जैसे S3) से सीधे पढ़ने और query करने देता है
  • पूरा database डाउनलोड किए बिना remote backup file से तुरंत query और Point-in-Time Recovery (PITR) करना संभव
  • अंदरूनी तौर पर LTX format का उपयोग करके बदले हुए page sets को कुशलता से प्रबंधित करता है, और duplicate pages को छोड़ने वाली compaction से recovery speed बेहतर होती है
  • SQLite के VFS interface का उपयोग करके केवल read operations को intercept करता है, जबकि write processing मौजूदा Litestream process संभालता है
  • सेकंड-स्तरीय backup और index updates के जरिए लगभग real-time replica प्रदान करता है, जिससे cloud environment में तेज query execution संभव होता है

Litestream VFS का अवलोकन

  • Litestream VFS SQLite को object storage URL को सीधे data source के रूप में उपयोग करने देता है
    • SQLite shell में .load litestream.so और .open file:///my.db?vfs=litestream कमांड से इसे सक्रिय किया जा सकता है
    • इसके बाद S3 में संग्रहित backup files के आधार पर query चलाई जा सकती है
  • पूरे database को डाउनलोड किए बिना remote backup से सीधे query चलाना संभव है
    • उदाहरण में SELECT * FROM sandwich_ratings query के जरिए S3 में संग्रहित कुछ data को तुरंत देखा जाता है

Point-in-Time Recovery (PITR) सुविधा

  • PRAGMA litestream_time = '5 minutes ago'; कमांड से किसी specific time point पर data state को देखना संभव है
    • relative time (5 minutes ago) या absolute time (2000-01-01T00:00:00Z) दिया जा सकता है
  • इससे SQL स्तर पर तुरंत Point-in-Time Recovery (PITR) किया जा सकता है
    • उदाहरण में गलत UPDATE चलाने के बाद, 5 मिनट पहले की स्थिति में लौटकर सही data की पुष्टि की जाती है

LTX format और data compaction

  • Litestream v0.5 ने LTX (Litestream Transaction eXchange) format को एकीकृत किया
    • पहले के version पूरे SQLite pages भेजते थे, लेकिन LTX केवल ordered page sets भेजता है
  • LTX की मुख्य विशेषता “compaction” है, जो recovery के समय हर page का सबसे नया version चुनती है
    • उदाहरण: 1 2 3 5 3 5 4 5 5 में सबसे दाईं ओर वाले 5, 4, 3, 2, 1 का ही उपयोग किया जाता है
  • LTX न केवल पूरे database पर, बल्कि LTX files के sets के बीच भी compaction कर सकता है, जिससे PITR recovery संभव होती है
  • LTX file के trailer में हर page का offset index शामिल होता है, इसलिए
    • पूरी file डाउनलोड किए बिना S3 Range request से केवल ज़रूरी pages पढ़े जा सकते हैं

VFS implementation का तरीका

  • Litestream VFS, SQLite के VFS (Virtual File System) interface का उपयोग करके implement किया गया है
    • VFS, SQLite की OS access layer को abstract करने वाली plugin structure है
  • Litestream VFS केवल read operation संभालता है, जबकि write मौजूदा Litestream process संभालता है
  • जब SQLite page पढ़ता है, VFS requested byte offset की जगह page index आधारित mapping करता है
    • index से filename, actual offset, और page size निकालकर S3 API के Range header से वही block डाउनलोड किया जाता है
  • LRU cache लागू किया गया है ताकि बार-बार उपयोग होने वाले “hot pages” memory में बने रहें और S3 calls कम हों

Real-time replication और performance

  • Litestream हर सेकंड L0 level backup करता है
    • VFS समय-समय पर S3 path को poll करके index को incrementally update करता है
    • नतीजतन near-realtime replica बनता है
  • पूरे database को stream किए बिना भी इसे तुरंत उपयोग किया जा सकता है
  • इस architecture की वजह से तेज़ startup speed और कम recovery time मिलता है

उपयोग और महत्व

  • Litestream database की हर state का backup second-level resolution पर बनाए रखता है
    • DELETE या UPDATE की गलती होने पर, इच्छित समय बिंदु पर तुरंत restore किया जा सकता है
  • object storage से सीधे query करने वाली यह संरचना ephemeral server environment में भी तेज़ी से काम करती है
  • जटिल mechanism के बिना, SQLite की मूल क्षमताओं का उपयोग करके सरल लेकिन शक्तिशाली backup·recovery system प्रदान करती है
  • Fly.io की internal API में भी उपयोग हो रहा है, और production environment में भी स्थिर रूप से चलाया जा सकता है

1 टिप्पणियां

 
GN⁺ 2025-12-13
Hacker News की राय
  • ओह, यह मेरे द्वारा बनाया गया Go के लिए sqlite vfs मॉड्यूल इस्तेमाल कर रहा है
    जब भी पता चलता है कि मेरे बनाए कोड से किसी और को मदद मिल रही है, सच में बहुत खुशी होती है
    psanford/sqlite3vfs
    • यह अच्छी तरह काम किया। इसके लिए धन्यवाद
    • आखिरकार, हम ज़िंदगी में ऐसे ही पलों की उम्मीद करते हैं
  • यह सच में कमाल का है। Litestream VFS में Unix philosophy पूरी तरह झलकती है
    SQLite हमेशा की तरह काम करता है, और Litestream उसके ऊपर पारदर्शी तरीके से काम करता है
    यानी सिर्फ SQL और SQLite pragma से point-in-time recovery (PITR) लागू किया जा सकता है।
    प्रोडक्शन dataset को सीधे छुए बिना भी पुराने डेटा को तेज़ी से क्वेरी किया जा सकता है
  • इंटरफ़ेस डिज़ाइन बहुत साफ़-सुथरा है
    environment variable से S3 bucket सेट करें, और SQLite में .load litestream.so के बाद
    PRAGMA litestream_time = '5 minutes ago'; से पिछले समय का डेटा तुरंत क्वेरी किया जा सकता है
    • macOS पर brew install sqlite3 के बाद
      .load litestream sqlite3_litestreamvfs_init की तरह init function का नाम सीधे देना पड़ता है
  • मैंने इसे bun:sqlite के साथ भी सफलतापूर्वक चलाया
    बस "LITESTREAM_REPLICA_URL" और AWS key environment variables सेट करने होते हैं
    temp.loadExtension("/path/to/litestream.dylib", "sqlite3_litestreamvfs_init") से extension लोड करने के बाद
    file:my.db?vfs=litestream से खोलें और तुरंत इस्तेमाल कर सकते हैं
    • क्या यह मुख्य रूप से JavaScript server (bun) environment में इस्तेमाल के लिए है?
    • बढ़िया है कि यह काम कर गया। लेकिन मैं जानना चाहता हूँ कि आपने .dylib फ़ाइल का path कैसे ढूँढा
    • जानकारी के लिए, इस उदाहरण में environment variable सेट करने वाला हिस्सा dotenv से काम नहीं करता। इसे रनटाइम पर सीधे सेट करना ज़रूरी है
  • यह वाकई शानदार फीचर है।
    मेरा use case यह है कि वेबसाइट पर सीधे S3 में स्टोर की गई read-only SQLite DB इस्तेमाल की जाए
    DB को cron job वगैरह से अपडेट किया जाता है, और वेबसाइट सिर्फ Litestream VFS के ज़रिए नया डेटा पढ़ती है
    क्या इस तरह इस्तेमाल करना ठीक रहेगा, और क्या इसके लिए कोई Python integration module भी है?
    अभी मेरी Flask app Google Spreadsheet से डेटा लेकर उसे SQLite में बदलती है और रोज़ अपडेट करती है
    मेरे app code का संदर्भ
    • मैं लेखक हूँ। Litestream VFS हर 1 सेकंड में backup data को अपने-आप poll करके नवीनतम स्थिति बनाए रखता है
      यह अतिरिक्त Python code के बिना SQLite CLI में भी वैसे ही काम करता है
    • इसी तरह के उपयोग के लिए ZeroFS भी सुझाऊँगा
      यह सिर्फ S3 को external dependency के रूप में इस्तेमाल करता है और SQLite के साथ भी अच्छा बैठता है
      ZeroFS SQLite performance संदर्भ
  • मैंने इसे Go के लिए SQLite driver में भी पहले से लागू कर रखा है
    ncruces/go-sqlite3 उदाहरण code
    इसे environment variables के बिना program code से नियंत्रित किया जा सकता है, और कई DB को एक साथ संभाला जा सकता है
    लेकिन PRAGMA litestream_time connection स्तर पर लागू होता है, इसलिए connection pool इस्तेमाल करते समय सावधानी चाहिए
    • .load litestream.so देखकर मुझे तुरंत ncruces/go-sqlite3 याद आ गया
      क्या इसे wasm environment में चलाना मुश्किल था?
  • हाल में DuckDB सीखते हुए मैं SQLite से उसका अंतर महसूस कर रहा हूँ
    DuckDB का “DuckLake” extension हर transaction पर snapshot बनाकर “time travel” फीचर देता है
    यह Litestream VFS के PITR जैसा है
    OLTP में इसे recovery feature कहा जाता है, जबकि OLAP में इसे “Time Travel” कहा जाता है
    DuckLake external catalog DB(PostgreSQL/MySQL/SQLite) का इस्तेमाल करके multi-process access को समन्वित करता है
    दूसरी तरफ Litestream, S3 की immutable LTX files के ज़रिए कई readers को एक साथ access करने देता है
    दोनों दुनिया आखिरकार “shared storage + metadata + compaction” संरचना की ओर सिमटती दिख रही हैं
    अच्छा होगा अगर ऐसे प्रोजेक्ट्स के बीच cross-collaboration और बढ़े
  • एक sandwich प्रेमी के तौर पर, उस sandwich rating data के बारे में मैं सच में उत्सुक हूँ
  • दिलचस्प तो है, लेकिन मैं थोड़ा उलझन में हूँ कि आखिर कौन-सा software announce किया गया है। क्या यह Litestream का नया version है?
    • मैं लेखक हूँ। हाँ, Litestream v0.5.3 अभी नया रिलीज़ हुआ है, और इसमें read-only VFS option जोड़ा गया है
      v0.5.3 release notes
    • इस version में multi-tenant DB के लिए directory replication support भी शामिल है। यह शानदार जोड़ है
  • क्या यह sqlite extensions के साथ भी काम करता है, यह जानना चाहूँगा
    उदाहरण के लिए, अगर sqlite-vec या vss जैसे vector search extensions इस्तेमाल कर रहे हों,
    तो क्या Litestream से S3 पर real-time backup करते हुए Litestream VFS से remote query करना संभव है?
    • मैं भी जानना चाहता हूँ। शायद queries लोकल पर चलती हों और ज़रूरत पड़ने पर page स्तर पर S3 से डेटा लाने वाली संरचना हो, तो यह बस काम कर जाना चाहिए
      लगता है खुद टेस्ट करके ही पता चलेगा
    • संभव है (बस इतना ही)