वेब सर्वर के static content storage के रूप में SQLite का उपयोग
पृष्ठभूमि
- Clace मुख्य रूप से internal tools के लिए web applications उपलब्ध कराने के लिए डिज़ाइन किया गया एक platform है.
- Clace web server और application server द्वारा अलग-अलग संभाले जाने वाले functions को एकीकृत रूप में प्रदान करता है.
- Clace के शुरुआती development के दौरान यह तय करना महत्वपूर्ण था कि application data और metadata को कैसे store किया जाए.
- Metadata को database में store करना तर्कसंगत था, और static files आम तौर पर file system में store की जाती हैं.
फ़ाइलें उपलब्ध कराने के लिए SQLite का उपयोग
- Clace ने file system के बजाय SQLite का उपयोग करके app files को store करने का निर्णय लिया.
- इससे atomic version changes संभव होते हैं, इसलिए update के समय कई files को एक साथ transaction में process किया जा सकता है.
- App creation और update के समय सभी files SQLite database में upload की जाती हैं, जबकि development mode में local file system का उपयोग किया जाता है.
SQLite के उपयोग के फायदे
- Transactional updates: कई files को एक साथ update किया जा सकता है, और यह सुनिश्चित होता है कि update के दौरान टूटा हुआ web app न दिखे.
- Deployment rollback: त्रुटि होने पर deployment को rollback किया जा सकता है, और database transaction rollback करना file system cleanup की तुलना में आसान है.
- Versions के बीच file deduplication: एक ही file कई versions में मौजूद हो तब भी file content केवल एक बार store होता है.
- Apps के बीच deduplication: कई apps में एक जैसी file मौजूद होने पर duplication रोकी जाती है.
- Backup की आसानी: SQLite का उपयोग करके system state का backup आसानी से लिया जा सकता है.
- Content hashing: file upload के समय content SHA store किया जाता है, जिससे browser caching आसान होती है.
- Compression: file content को Brotli से compress करके store किया जाता है, और इसे विभिन्न formats में आसानी से store किया जा सकता है.
प्रदर्शन
- Clace का SQLite database access approach बेहतरीन performance प्रदान करता है.
- File system का उपयोग करने वाला समान implementation न होने के कारण direct benchmark test नहीं किए गए.
- SQLite टीम के benchmark के अनुसार, कुछ workloads में SQLite file system से बेहतर performance दे सकता है.
Multi-node support
- Clace फिलहाल single node पर चलता है.
- Multi-node support जोड़े जाने पर local SQLite के बजाय shared Postgres database का उपयोग करने की योजना है.
- इससे latency की समस्या हो सकती है, और latency कम करने के लिए local SQLite database को file cache के रूप में उपयोग करने की योजना है.
यह approach आम क्यों नहीं है
- अधिकांश web servers file system का उपयोग सुविधा के कारण करते हैं.
- File system tools का उपयोग करके file updates संभव हैं, जबकि database का उपयोग करने पर file upload के लिए API interface की आवश्यकता होती है.
GN⁺ का सार
- Clace internal tools के development और deployment के लिए एक platform है, जो SQLite का उपयोग करके file storage के फायदों को अधिकतम करता है.
- SQLite का उपयोग transactional updates, rollback, deduplication और backup की आसानी जैसे कई लाभ प्रदान करता है.
- यह approach file system की सुविधा और ऐतिहासिक कारणों से आम नहीं है, लेकिन SQLite की performance और features का उपयोग करके efficiency बढ़ाता है.
- समान features वाले projects में Firebase और AWS Lambda की सिफारिश की गई है.
1 टिप्पणियां
Hacker News राय
कुछ साल पहले "35% Faster Than The Filesystem" लेख से प्रेरित होकर SQLite का उपयोग करके static files serve करने का एक प्रयोग किया था। Datasette के जरिए SQLite से static files serve करने वाला एक plugin बनाया था, लेकिन उसका ज़्यादा इस्तेमाल नहीं हुआ। SQLite का उपयोग करके files serve करने के लिए "sqlite-utils insert-files" CLI tool उपयोगी हो सकता है.
transactional updates का बड़ा फ़ायदा यह है कि कई files को एक साथ update किया जा सकता है। चाहे server SQLite इस्तेमाल करे या file system, update के दौरान web app के टूटने को यह अपने-आप नहीं रोकता। यह सुनिश्चित करना होगा कि page के सभी sub-resources किसी खास content hash या version name का इस्तेमाल करके refer किए जाएँ.
2011/2012 में जब एक छोटी game development company में काम करता था, तब सभी assets को sqlite3 database में store करते थे और file offsets store करने के लिए pak files बनाते थे। इससे mobile game में assets तेज़ी से load हो जाते थे, और metadata को database में store करने से मिलती-जुलती files को आसानी से ढूँढा जा सकता था.
file system की जगह SQLite इस्तेमाल करने का एक फ़ायदा यह है that files पर query चलाई जा सकती है। SQL queries को Kysely के साथ type-safe तरीके से इस्तेमाल किया जा सकता है.
SQLite का उपयोग करके static content serve करने का विचार पूरी तरह परिपूर्ण नहीं है। आधुनिक web servers static files को handle करने के लिए सबसे उपयुक्त strategies इस्तेमाल करते हैं। SQLite memory-mapped I/O support देता है, लेकिन बड़े पैमाने की websites के लिए यह उपयुक्त नहीं है.
SQLite उन websites के लिए ठीक है जिन पर रोज़ 100K hits से कम आते हैं। SQLite की अपनी website रोज़ 400K~500K HTTP requests संभालती है, और ज़्यादातर मामलों में load average 0.1 से कम रहता है.
static site generator CMS, SQLite database का उपयोग करके website को develop और update करते हैं, और फिर deployment के लिए उसे static pages के रूप में file system में dump कर देते हैं.
high-performance scientific computing में data तक पहुँचने का सबसे flexible और high-performance तरीका अक्सर RAM disk पर मौजूद read-only SQLite database होता है.
यह तुलना दिलचस्प होगी कि deduplication, snapshots, versioning और compression देने वाले file systems की तुलना में SQLite approach कैसी है। advanced file systems का उपयोग करने पर directory को नए version से replace करना ज़्यादा आसान हो सकता है.
database को file system की तरह इस्तेमाल करने वाला approach अपने फायदे रखता है, लेकिन जब समस्या आती है, तो यह एक बुरा सपना बन सकता है.