और तेज़ SQLite की तलाश
(avi.im)- SQLite पहले से ही एक तेज़ database system है, लेकिन शोधकर्ता इसे और तेज़ बनाने के तरीके खोज रहे हैं
- Helsinki University और Cambridge के शोधकर्ताओं ने "asynchronous I/O के माध्यम से serverless runtime/database co-design" पर एक पेपर प्रकाशित किया, जिसमें दिखाया गया कि tail latency को अधिकतम 100 गुना तक कम किया जा सकता है। यही पेपर Rust में दोबारा लिखा गया SQLite, Limbo, की नींव बना।
io_uring
-
io_uring का विवरण: Linux kernel का io_uring subsystem asynchronous I/O के लिए एक interface प्रदान करता है। यह user space और kernel space के बीच ring buffer के माध्यम से buffer copy overhead को कम करता है। Application I/O request submit कर सकती है और OS से I/O task पूरा होने की सूचना मिलने तक दूसरे काम कर सकती है।
-
SQLite में query execution: SQLite data storage के लिए files का उपयोग करता है, और
sqlite3_open()function से database खोलता है,sqlite3_prepare()function से SQL statements को bytecode में बदलता है।sqlite3_step()function bytecode commands चलाकर query को process करता है।
पूर्वधारणा
-
serverless computing का उभार: serverless environments में database latency एक समस्या बन सकती है। यदि database को सीधे edge runtime में embed किया जाए तो latency नहीं रहती, और SQLite ऐसे environment के लिए उपयुक्त है।
-
SQLite की समस्या: synchronous I/O के उपयोग के कारण resource usage optimally नहीं हो पाता और concurrency तथा multi-tenancy से जुड़ी समस्याएँ पैदा होती हैं।
-
io_uring की ओर बदलाव: POSIX I/O calls को io_uring से बदलना आसान नहीं है, और SQLite को asynchronous I/O model के अनुरूप फिर से design करना पड़ता है।
Limbo
-
asynchronous I/O support: VM और BTree components में बदलाव कर asynchronous I/O support जोड़ा गया, और synchronous bytecode commands को asynchronous commands से बदला गया। asynchronous I/O blocking को हटाता है और concurrency को बेहतर बनाता है।
-
query और storage engine का अलगाव: resource usage को अधिकतम करने के लिए query engine और storage engine को अलग करने का प्रस्ताव दिया गया।
मूल्यांकन और परिणाम
-
benchmarking: multi-tenant serverless runtime को simulate किया गया ताकि हर tenant के पास अपना embedded database हो। SQLite और Limbo की query latency की तुलना में, Limbo ने p999 पर tail latency को 100 गुना कम किया।
-
भविष्य का काम: कई readers और writers को शामिल करते हुए अतिरिक्त benchmarks की योजना है, और performance advantage मुख्य रूप से p999 के बाद ही स्पष्ट दिखता है।
-
open source code: Limbo का code open source के रूप में उपलब्ध है: Limbo GitHub
1 टिप्पणियां
Hacker News राय
इस बात पर चर्चा है कि serverless computing के कुछ विशेष use cases, जैसे AWS Lambda और एक केंद्रीय database के साथ serverless तरीके से बनाई गई apps, हमेशा एक-दूसरे के साथ अच्छी तरह फिट नहीं बैठते
/tmpdirectory होती है और Python runtime में SQLite शामिल होता है, इसलिए function के अलावा कोई अतिरिक्त code upload करने की ज़रूरत नहीं थीयह स्पष्ट करना उपयोगी हो सकता है कि दो researchers में से एक, लेखक का manager है
इस बात से सहमति है कि "फायदा सिर्फ p999 और उससे ऊपर पर साफ़ दिखता है, जबकि p90 और p99 पर performance लगभग SQLite जैसी ही है"
SQLite के पास बहुत व्यापक test suite है, इसलिए उसका बहुत गहराई से परीक्षण हुआ है
benchmarking के लिए ऐसे multi-tenant serverless runtime का simulation किया गया जिसमें हर tenant का अपना embedded database हो
पहले Postgres में async io लाने की कोशिश हुई थी, लेकिन वह रुक गई
इस विचार पर सवाल है कि जब async io चल रहा हो तो क्या उस दौरान दूसरा काम किया जा सकता है
blog post के लेखक के रूप में यह उम्मीद नहीं थी कि यह लेख front page पर आ जाएगा
SQLite open source है, लेकिन उसका महत्वपूर्ण test harness नहीं है
SQLite file format के एक सख्त subset के रूप में JSON-जैसा format बनाने का कोई सरल रास्ता खोजने की कोशिश की गई, लेकिन सफलता नहीं मिली