20 पॉइंट द्वारा GN⁺ 2025-03-05 | 2 टिप्पणियां | WhatsApp पर शेयर करें
  • कई डेवलपर्स मानते हैं कि सर्वर पर SQLite का उपयोग केवल छोटे एप्लिकेशन के लिए ही उपयुक्त है
  • इसके कारण आम तौर पर ये माने जाते हैं:
    • कम इंफ्रास्ट्रक्चर लागत: अलग डेटाबेस सर्वर की ज़रूरत नहीं होती (एक single file पर चलता है)
    • डेवलपमेंट और टेस्टिंग में आसानी: वही DB file क्लाइंट और सर्वर दोनों पर उपयोग की जा सकती है
    • न्यूनतम प्रबंधन बोझ: जटिल configuration या daemon management की आवश्यकता नहीं
    • उच्च विश्वसनीयता: SQLite दुनिया में सबसे अधिक deploy किया गया DB है और इसकी durability बहुत मजबूत है
  • LiteFS, Litestream, rqlite, Dqlite, Bedrock जैसे टूल SQLite में replication और high availability (HA) जोड़ते हैं, जिससे यह छोटे deployment के लिए उपयुक्त बनता है

लेकिन यह लेख छोटे नहीं बल्कि Hyper-Scale एप्लिकेशन के लिए SQLite की संभावनाओं की पड़ताल करता है

मौजूदा बड़े डेटाबेस के स्केलिंग की समस्या

  • बड़े एप्लिकेशन में आम तौर पर PostgreSQL या MySQL को एक single DB के रूप में बनाए रखना कठिन होता है, इसलिए sharded database का उपयोग किया जाता है
  • उदाहरण: Cassandra, ScyllaDB, DynamoDB, Vitess (sharded MySQL), Citus (sharded Postgres)
  • Sharded DB के कुछ फायदे हैं:
    • data partitioning के ज़रिए batch read optimization
    • horizontal scalability
    • तेज़ write performance

लेकिन मौजूदा partitioning solutions में ये कमियाँ हैं

  • Rigid schemas: MySQL या Postgres जैसी लचीली queries को support नहीं करते
  • Schema बदलना कठिन: index जोड़ने या relations बदलने पर operational burden बढ़ता है
  • जटिल cross-partition operations: ACID transactions को बनाए रखना मुश्किल होता है, और two-phase commit (2PC) जैसी जटिल तकनीकों की ज़रूरत पड़ती है
  • Data inconsistency की समस्या: partitions के बीच मजबूत data constraints लागू करना कठिन होता है, इसलिए data consistency टूटने की संभावना अधिक रहती है

SQLite-आधारित hyper-scale database की संभावना

  • Cloudflare Durable Objects और Turso दिखाते हैं कि SQLite के आधार पर hyper-scale applications कैसे डिज़ाइन किए जा सकते हैं
  • ये सिस्टम निम्नलिखित ताकतें देते हैं:
    • Dynamic scaling: हर entity के लिए अलग database बनाकर infrastructure complexity कम की जा सकती है
    • कम लागत पर लगभग असीमित databases: पारंपरिक sharding की तरह data partitioning को मजबूर किए बिना, ज़रूरत पड़ने पर नए SQLite instances बनाए जा सकते हैं
    • Global distribution: database को user के नज़दीक रखकर performance बेहतर की जा सकती है
    • Built-in replication & durability: पारंपरिक SQLite से अलग, data को कई regions में replicate करके high availability बनाए रखी जा सकती है
  • SQLite का उपयोग करते हुए sharding के विकल्प का तरीका (Cloudflare Durable Objects & Turso का उपयोग)
    • पारंपरिक sharding में एक ही database partition में कई chat logs रखे जाते हैं
    • SQLite के साथ हर channel के लिए स्वतंत्र SQLite database बनाया जा सकता है, जिससे अधिक flexible schema का उपयोग संभव होता है
    • उदाहरण संरचना
      • पारंपरिक sharding: chat log table + partition key
      • SQLite-आधारित: प्रत्येक channel के लिए अलग SQLite DB (chat logs, participants, reactions की जानकारी सहित)
  • SQLite के साथ इस तरीके के फायदे:
    • Local ACID transactions: cross-partition समस्याओं के बिना प्रत्येक DB के भीतर transaction चलाया जा सकता है
    • उच्च-प्रदर्शन I/O: SQLite एक single-file DB है, इसलिए read और write performance बहुत उत्कृष्ट होती है
    • SQL extension features का उपयोग संभव:
      • FTS5 (Full-Text Search): search performance बेहतर
      • JSON1: JSON data storage और query support
      • R*Tree, SpatiaLite: spatial data का उपयोग संभव
    • SQL migration support: Prisma, Drizzle जैसे मौजूदा migration tools के साथ compatible
    • Lazy schema migration support:
      • migration को तुरंत चलाने की ज़रूरत नहीं; SQLite instance खुलते समय हल्का migration चलाने का तरीका अपनाया जा सकता है

सर्वर पर SQLite उपयोग करने की सीमाएँ

  • open source, self-hostable solutions की कमी
  • cross-database query support नहीं → analytics के लिए अलग data lake की आवश्यकता
  • सीमित database tooling (SQL browser, ETL pipeline, monitoring, backup)
    • StarbaseDB Cloudflare Durable Objects + SQLite के आधार पर इस समस्या को हल करने की कोशिश कर रहा है
  • एकीकृत standard protocol की कमी
    • PostgreSQL, MySQL, Cassandra standardized protocols का उपयोग करते हैं, लेकिन SQLite server के लिए अब भी standardized network protocol की कमी है
  • hyper-scale पर SQLite के बड़े-scale उपयोग के उदाहरण कम हैं
    • Cassandra, DynamoDB जैसी case studies कम हैं, लेकिन समय के साथ यह बदल सकता है

निष्कर्ष: SQLite सिर्फ़ एक साधारण local DB नहीं, बल्कि hyper-scale applications के लिए भी एक मजबूत विकल्प

  • SQLite सिर्फ़ छोटे प्रोजेक्ट्स के लिए DB नहीं, बल्कि hyper-scale applications में भी पारंपरिक sharding approaches का विकल्प बन सकने वाला एक शक्तिशाली टूल है
  • Cloudflare Durable Objects & Turso के साथ database को entity स्तर पर विभाजित करके SQL की ताकत और ACID transactions को बनाए रखते हुए scale किया जा सकता है
  • यह पारंपरिक sharded databases की तुलना में अधिक flexible और manage करने में आसान विकल्प बन सकता है

2 टिप्पणियां

 
pcj9024 2025-03-05

कोई बहादुर व्यक्ति ही शायद बहुत सारे requests संभालने वाले hyper-scale स्तर पर खुशी-खुशी sqlite का इस्तेमाल करेगा...

 
GN⁺ 2025-03-05
Hacker News टिप्पणियाँ
  • एक उपयोगकर्ता SQL के साथ custom database को बदलने पर विचार कर रहा है

    • चूँकि Sqlite3 एक single server पर चलता है, इसलिए उसे एक उम्मीदवार के रूप में देखा जा रहा है
    • database में मुख्यतः read operations ज़्यादा हैं, इसलिए Sqlite3 फायदेमंद है
    • custom database कुछ खास कार्यों में बहुत तेज़ है, लेकिन यह एक जटिल निर्णय है
    • benchmark tests के ज़रिए Sqlite3 और Postgresql की तुलना की गई
    • Sqlite3 सभी कार्यों में Postgresql से लगभग दोगुना तेज़ है
    • custom database single record access में Sqlite3 से 100~1,000 गुना तेज़ है
  • एक उपयोगकर्ता local-first web app विकसित कर रहा है और उसे लगता है कि SQLite उपयुक्त है

    • वह SQLite database state को cloud service के साथ आसानी से sync करने का तरीका चाहता है
    • Turso और SQLite Cloud आशाजनक विकल्प लगते हैं
    • वह एक सरल तरीका भी सोच रहा है जिसमें उपयोगकर्ता S3 storage पर push कर सकें
  • SQLite-Per-Partition के फायदों पर चर्चा हुई

    • global table की ज़रूरत वाले मामलों में इसकी सीमाएँ हैं
    • SQLite का उपयोग किए गए विभिन्न प्रोजेक्ट्स के अनुभव साझा किए गए
  • multi-user environment में SQLite को MVCC की कमी के कारण कठिनाइयों का सामना करना पड़ता है

    • sqlite-compatible implementation और extensions के बारे में जिज्ञासा है जो MVCC जोड़ते हों
  • Ruby on Rails के 8.0 release में SQLite support का विस्तार किया गया

    • इसने cache और job queue components को replace किया और इसे सामान्य web apps के लिए उपयुक्त बनाया
  • Vitess या Citus से परिचित न होने वाले एक उपयोगकर्ता को लेख की सामग्री समझना कठिन लगा

    • वह sharded Sqlite और sharded Postgres के बीच अंतर जानना चाहता है
  • एक उपयोगकर्ता VPS hosting नहीं चाहता था, इसलिए उसने SQLite का उपयोग करके web pages बनाए

    • database को उपयोगकर्ता के device पर download करके उपयोग किया जाता है
  • Ubiquiti controller सेट करने में कठिनाई झेलने वाले एक उपयोगकर्ता ने SQLite के उपयोग का सुझाव दिया

    • उसका मानना है कि MongoDB के बजाय SQLite बेहतर अनुभव दे सकता है
  • Apple 2022 तक लगभग 300,000 Cassandra/ScyllaDB instances चला रहा था

    • DB-per-tenant approach को बेहतर दिशा में बढ़ता हुआ माना गया
  • TDLib (Telegram database library) SQLite का उपयोग करता है

    • प्रत्येक TDLib instance एक साथ 24,000 से अधिक active bots को संभालता है