SQLite इससे 138 गुना धीमा है?! (Stoolap की टेस्टिंग)

BBetter Stack
컴퓨터/소프트웨어AI/미래기술

Transcript

00:00:00जब आप एक नया प्रोजेक्ट शुरू कर रहे होते हैं और आपको एक डेटाबेस की जरूरत होती है, तो सबसे पहला विकल्प
00:00:03क्या दिमाग में आता है? SQLite? शायद SQLite ही है, है न? मेरा मतलब है, यह बेहतरीन और भरोसेमंद है,
00:00:09इसमें जीरो कॉन्फिग है और यह एक इंडस्ट्री स्टैंडर्ड है। लेकिन जैसे-जैसे हमारा लोकल डेटा भारी होता जाता है और हमारी क्वेरीज
00:00:14जटिल होती जाती हैं, हम उस सीमा तक पहुँचने लगते हैं जो एक सिंगल थ्रेडेड फाइल लॉकिंग
00:00:20इंजन कर सकता है। लेकिन अब बाजार में एक नया खिलाड़ी है जो इन समस्याओं को हल करने की कोशिश कर रहा है।
00:00:25इसका नाम Stulab है और यह पूरी तरह से Rust में लिखा गया एक डेटाबेस इंजन है और इसने अभी-अभी
00:00:31एक नेटिव Node.js ड्राइवर रिलीज किया है जो सच में बहुत जबरदस्त परफॉर्मेंस दिखा रहा है। यह
00:00:36डेटाबेस SQLite से 138 गुना ज्यादा तेज है। तो इस वीडियो में, हम Stulab की बारीकियों को
00:00:43देखेंगे, समझेंगे कि यह कैसे काम करता है और एक लाइव बेंचमार्किंग टेस्ट करेंगे यह देखने के लिए कि क्या यह वाकई
00:00:50उतना ही शक्तिशाली है जितना यह दावा करता है। इसमें बहुत मजा आने वाला है, तो चलिए शुरू करते हैं। तो आखिर Stulab क्या है?
00:01:00देखा जाए तो, Stulab मूल रूप से एक एम्बेडेड OLAP या ऑनलाइन एनालिटिकल प्रोसेसिंग डेटाबेस है। अब अगर
00:01:06आप SQLite या Postgres जैसे स्टैंडर्ड डेटाबेस के आदी हैं, तो वे आम तौर पर OLTP या ऑनलाइन
00:01:14ट्रांजैक्शन प्रोसेसिंग डेटाबेस होते हैं, जो जैसा कि नाम से पता चलता है, ट्रांजैक्शन के लिए अनुकूलित होते हैं। लेकिन
00:01:20Stulab अलग है। इसे एनालिटिकल वर्कलोड के लिए डिजाइन किया गया है और इसे हाई-स्पीड डेटा प्रोसेसिंग पर ध्यान देते हुए
00:01:27पूरी तरह से Rust में बनाया गया है। इसे SQLite फाइल जैसी पोर्टेबिलिटी वाले,
00:01:33लेकिन DuckDB या BigQuery जैसी रॉ एनालिटिकल पावर वाले इंजन के रूप में देखें। लेकिन सबसे अच्छी बात
00:01:39यह है कि अब आप इसके नेटिव Node ड्राइवर की मदद से इसे Node.js के साथ इस्तेमाल कर सकते हैं। अब जब मैं कहता हूँ कि
00:01:45यह एक नेटिव ड्राइवर है, तो मैं किसी साधारण रैपर की बात नहीं कर रहा हूँ। आमतौर पर जब कोई डेटाबेस
00:01:49Rust या C++ जैसी किसी दूसरी भाषा में लिखा होता है, तो आपके Node.js ऐप को उससे एक ब्रिज के जरिए बात करनी पड़ती है।
00:01:56अक्सर इसका मतलब है कि आपके डेटा को JSON या किसी अन्य फॉर्मेट में बदलना, उसे लोकल नेटवर्क
00:02:02सॉकेट पर भेजना और फिर दूसरी तरफ उसे वापस बदलना। इसे सीरियलाइजेशन ओवरहेड कहा जाता है और
00:02:08यह परफॉर्मेंस को बहुत कम कर देता है। लेकिन Stulab Node चीजें अलग तरह से करता है। यह NAPI-RS का उपयोग करता है,
00:02:15जो एक ऐसा फ्रेमवर्क है जो Rust इंजन को एक नेटिव बाइनरी में कंपाइल करने की अनुमति देता है जो
00:02:21सीधे आपके Node.js प्रोसेस में लोड हो जाती है। इसलिए बीच में कोई ब्रिज और कोई ट्रांसलेटर नहीं है। जब आप
00:02:27एक क्वेरी भेजते हैं, तो Node.js और Rust असल में एक ही मेमोरी स्पेस साझा कर रहे होते हैं। और Stulab के
00:02:33इतना तेज होने के तीन बड़े कारण हैं। पहला, यह MVCC या मल्टी-वर्जन कॉन्करेंसी कंट्रोल का उपयोग कर रहा है।
00:02:40SQLite के विपरीत जहाँ एक अकेला राइटर पूरे डेटाबेस को लॉक कर सकता है, Stulab एक ही समय में
00:02:47कई रीडर्स और राइटर्स को काम करने की अनुमति देता है। दूसरा, यह पैरेलल एग्जीक्यूशन का उपयोग करता है। Stulab
00:02:53Rayon नाम के शेड्यूलर का उपयोग करता है। और Rayon के साथ, जब आप कोई बड़ी क्वेरी चलाते हैं, तो उसे एक CPU कोर पर भेजने के बजाय,
00:03:00यह उस क्वेरी को छोटे टुकड़ों में बाँट देता है और आपकी मशीन के हर कोर का उपयोग करता है। और तीसरा, यह कॉस्ट-बेस्ड
00:03:06ऑप्टिमाइज़र का उपयोग करता है। तो यह आपके SQL को आँख बंद करके एग्जीक्यूट नहीं करता, यह असल में आपके डेटा का विश्लेषण करता है,
00:03:13अलग-अलग रास्तों की लागत का अनुमान लगाता है, और आपके परिणामों तक पहुँचने का सबसे तेज़ तरीका चुनता है। तो यही वो चीजें हैं
00:03:19जो कथित तौर पर Stulab को SQLite की तुलना में बहुत तेज़ बनाती हैं। लेकिन चलिए इसे परखते हैं कि क्या यह वाकई सच है।
00:03:25इस टेस्ट के लिए, हम एक साधारण Node.js प्रोजेक्ट का उपयोग करेंगे और हम Stulab और
00:03:30SQLite दोनों को डिपेंडेंसी के रूप में इंस्टॉल करेंगे। तो एक सबसे बड़ी जीत जहाँ Stulab वास्तव में चमकता है, वह है count distinct का उपयोग।
00:03:37तो मैं यह जानने के लिए बहुत उत्सुक हूँ कि क्या वास्तव में ऐसा ही है। तो मैंने यह साधारण स्क्रिप्ट तैयार की है जहाँ हम
00:03:43प्रत्येक डेटाबेस का एक इन-मेमोरी वर्जन शुरू करते हैं और एक साधारण सेल्स टेबल बनाते हैं। फिर हम इस टेबल को
00:03:49रैंडम सेल्स डेटा की 10,000 पंक्तियों से भरते हैं जहाँ प्रत्येक पंक्ति एक ऐसे यूजर की सेल दिखाती है जिसकी ID 0 से 1,000
00:03:56के बीच हो सकती है और जिसकी एक विशिष्ट कैटेगरी है। फिर हम दोनों डेटाबेस में डेटा को
00:04:03बैच इंसर्ट करेंगे और फिर बेंचमार्क चलाएंगे जहाँ हम एक विशिष्ट कैटेगरी पर एक विशिष्ट
00:04:10यूजर द्वारा की गई सेल्स की डिस्टिंक्ट काउंट चुनेंगे और प्रत्येक डेटाबेस की परफॉर्मेंस को मापेंगे। अब मुझे
00:04:16यह बताना होगा कि यह थोड़ा निराशाजनक है कि अभी के लिए पैकेज इंस्टॉलेशन काम नहीं कर रहा है। अगर हम अभी
00:04:22बेंचमार्क टेस्ट चलाते हैं, तो हम देखते हैं कि यह मिसिंग नेटिव बाइंडिंग की शिकायत कर रहा है। तो प्रोजेक्ट के
00:04:28लेखक स्पष्ट रूप से बाइनरीज जोड़ना या पैकेज में सही बाइनरीज को लिंक करना भूल गए हैं। इसलिए मुझे
00:04:34इसे सोर्स से बिल्ड करना पड़ा। तो मैंने रेपो को क्लोन किया, उसके अंदर बिल्ड चलाया और फिर वापस
00:04:39अपने बेंचमार्क प्रोजेक्ट पर आया और अपनी सोर्स डायरेक्टरी को डिपेंडेंसी के रूप में लिंक किया। यह इस समय
00:04:44थोड़ा निराशाजनक है, इसलिए मुझे उम्मीद है कि प्रोजेक्ट के लेखक भविष्य में इसे ठीक कर देंगे। लेकिन
00:04:49फिर भी, ऐसा करने के बाद, हम आखिरकार बेंचमार्क चलाने में सक्षम हैं। तो चलिए इसे अभी करते हैं।
00:04:54जैसा कि आप देख सकते हैं, count distinct ऑपरेशन वास्तव में Stulab पर बहुत तेज़ है, हालाँकि उतना नहीं
00:05:01जितना विज्ञापन में दिया गया था। यह केवल चार गुना तेज़ है। तो क्या होगा अगर हम डेटा की संख्या में एक और
00:05:07जीरो जोड़ दें और फिर 1,000,000 पंक्तियों के साथ टेस्ट फिर से चलाएं? तो चलिए इसे अभी आजमाते हैं।
00:05:12तो दस लाख पंक्तियों के लिए भी, Stulab केवल छह गुना तेज़ है, 138 गुना नहीं। लेकिन फिर भी,
00:05:20यह अभी भी एक शानदार परिणाम है। तो यह था count distinct टेस्ट। मैंने एक और बेंचमार्क टेस्ट
00:05:26करने का फैसला किया ताकि distinct + order by ऑपरेशन को परखा जा सके। और इस दूसरे टेस्ट में, मैंने एक ऐसा सेटअप किया जहाँ हम
00:05:33अलग-अलग IP एड्रेस और स्टेटस कोड के साथ कुछ रैंडम लॉग्स डालते हैं, और फिर IP एड्रेस और स्टेटस कोड
00:05:39पेयर द्वारा डिस्टिंक्ट लॉग्स खोजने की कोशिश करते हैं, और फिर उन्हें IP असेंडिंग और स्टेटस कोड
00:05:47डिसेंडिंग के अनुसार व्यवस्थित करते हैं। और जैसा कि आप देख सकते हैं, एक बार जब हम यह टेस्ट चलाते हैं, तो Stulab अभी भी SQLite से बेहतर
00:05:53परफॉर्म करता है, लेकिन 14 गुना नहीं, बल्कि केवल 1 से 1.5 गुना तेज़। तो मेरी राय में, यहाँ दी गई
00:06:01माप थोड़ी बढ़ा-चढ़ाकर बताई गई हैं। लेकिन फिर भी, Stulab वास्तव में SQLite से तेज़ है, जैसा कि हमने अभी टेस्ट में देखा।
00:06:08निष्पक्ष होने के लिए, लेखक ने उन क्षेत्रों का भी उल्लेख किया है जहाँ SQLite अभी भी Stulab से बेहतर प्रदर्शन करता है।
00:06:13और ये ज्यादातर ऐसी स्थितियाँ हैं जहाँ आप सिंगल रो ऑपरेशन्स करते हैं। इसलिए Stulab एनालिटिकल
00:06:19और जटिल क्वेरीज के लिए बेहतरीन है। तो क्या Stulab, SQLite को खत्म कर देगा? सच कहूँ तो, नहीं। वे
00:06:26बिल्कुल अलग चीजों के लिए बने हैं। SQLite अभी भी ट्रांजैक्शन के लिए आपका भरोसेमंद डेली ड्राइवर है,
00:06:32लेकिन Stulab डेटा विश्लेषण के लिए आपकी हाई परफॉर्मेंस रेस कार हो सकता है। लेकिन यह तथ्य कि अब
00:06:38हमारे पास एक शुद्ध Rust एनालिटिकल इंजन है जिसे हम NAPI-RS के साथ किसी Node.js प्रोजेक्ट में डाल सकते हैं,
00:06:45काफी अच्छी बात है। प्रोजेक्ट मालिकों को बस यह सुनिश्चित करना होगा कि वे अपने वर्तमान NPM पैकेज को पैच करें,
00:06:50ताकि हमें इसे सोर्स से बिल्ड न करना पड़े। तो दोस्तों, यह था संक्षेप में Stulab।
00:06:55लेकिन आप इसके बारे में क्या सोचते हैं? क्या परफॉर्मेंस बूस्ट Stulab पर स्विच करने के लायक है, या आप
00:07:01SQLite की विश्वसनीयता के साथ ही बने रहेंगे? हमें नीचे कमेंट्स में बताएं। और दोस्तों, अगर आपको यह
00:07:06वीडियो उपयोगी लगा, तो कृपया वीडियो के नीचे उस लाइक बटन को दबाकर मुझे बताएं। और यह भी
00:07:11मत भूलना कि हमारे चैनल को सब्सक्राइब करें। मैं Better Stack से Andris हूँ और मैं आपसे
00:07:17अगले वीडियो में मिलूँगा।

Key Takeaway

Stulab एनालिटिकल क्वेरीज के लिए एक शक्तिशाली Rust-आधारित विकल्प है, जो Node.js के साथ बेहतरीन एकीकरण प्रदान करता है, हालांकि यह SQLite को पूरी तरह से रिप्लेस करने के बजाय उसके पूरक के रूप में कार्य करता है।

Highlights

Stulab एक नया एम्बेडेड OLAP डेटाबेस है जिसे पूरी तरह से Rust भाषा में लिखा गया है।

यह SQLite जैसे OLTP डेटाबेस के विपरीत एनालिटिकल वर्कलोड के लिए अनुकूलित है।

NAPI-RS का उपयोग करके यह Node.js के साथ नेटिव बाइनरी के रूप में सीधे मेमोरी साझा करता है।

इसके तेज़ होने के मुख्य कारणों में MVCC, पैरेलल एग्जीक्यूशन और कॉस्ट-बेस्ड ऑप्टिमाइज़र शामिल हैं।

बेंचमार्क टेस्ट में Stulab ने 'count distinct' ऑपरेशन्स में SQLite से 6 गुना बेहतर प्रदर्शन किया।

लेखक ने स्वीकार किया कि विज्ञापित '138 गुना तेज़' का दावा वास्तविक परीक्षणों में सटीक नहीं पाया गया।

SQLite अभी भी सिंगल-रो ट्रांजैक्शनल ऑपरेशन्स के लिए Stulab से अधिक भरोसेमंद और तेज़ है।

Timeline

SQLite की सीमाएँ और Stulab का परिचय

वीडियो की शुरुआत में SQLite की लोकप्रियता और इसकी सिंगल-थ्रेडेड फ़ाइल लॉकिंग की सीमाओं पर चर्चा की गई है। वक्ता बताते हैं कि भारी स्थानीय डेटा और जटिल क्वेरीज़ के लिए एक नए समाधान की आवश्यकता है। यहाँ Stulab का परिचय दिया गया है जो एक Rust-आधारित डेटाबेस इंजन है। यह दावा किया गया है कि यह विशिष्ट परिस्थितियों में SQLite से 138 गुना तेज़ हो सकता है। यह खंड आधुनिक विकास में डेटाबेस की बदलती जरूरतों को समझने के लिए महत्वपूर्ण है।

OLAP बनाम OLTP और Rust की शक्ति

इस भाग में Stulab को एक एम्बेडेड OLAP यानी ऑनलाइन एनालिटिकल प्रोसेसिंग डेटाबेस के रूप में परिभाषित किया गया है। वक्ता SQLite और Postgres जैसे पारंपरिक OLTP डेटाबेस के साथ इसका अंतर स्पष्ट करते हैं जो ट्रांजैक्शन के लिए बने हैं। Stulab को DuckDB या BigQuery जैसी एनालिटिकल शक्ति वाला इंजन बताया गया है जिसे आसानी से पोर्ट किया जा सकता है। इसे पूरी तरह Rust में विकसित करने का उद्देश्य उच्च गति वाली डेटा प्रोसेसिंग सुनिश्चित करना है। यह तकनीकी स्पष्टीकरण डेटाबेस के चयन के पीछे के तर्क को मजबूत करता है।

नेटिव Node.js ड्राइवर और तकनीकी वास्तुकला

यहाँ NAPI-RS फ्रेमवर्क के महत्व पर प्रकाश डाला गया है जो Stulab को Node.js में नेटिव बाइनरी के रूप में चलने की अनुमति देता है। यह आर्किटेक्चर सीरियलाइजेशन ओवरहेड को खत्म कर देता है क्योंकि Node.js और Rust एक ही मेमोरी स्पेस साझा करते हैं। वक्ता तीन मुख्य तकनीकी कारणों का उल्लेख करते हैं: MVCC, Rayon का उपयोग करके पैरेलल एग्जीक्यूशन, और कॉस्ट-बेस्ड ऑप्टिमाइज़र। ये विशेषताएँ Stulab को एक साथ कई रीडर्स और राइटर्स को संभालने की क्षमता प्रदान करती हैं। यह तकनीकी गहराई दिखाती है कि क्यों यह इंजन पारंपरिक माध्यमों से भिन्न और कुशल है।

लाइव बेंचमार्किंग और सेटअप की चुनौतियाँ

वक्ता 10,000 पंक्तियों के डेटा के साथ 'count distinct' ऑपरेशन का उपयोग करके एक व्यावहारिक परीक्षण शुरू करते हैं। परीक्षण के दौरान उन्हें NPM पैकेज में बाइनरी मिसिंग होने जैसी तकनीकी समस्याओं का सामना करना पड़ता है। समाधान के रूप में उन्हें प्रोजेक्ट को सोर्स से बिल्ड करना पड़ता है, जो वर्तमान रिलीज की एक खामी को दर्शाता है। यह खंड दर्शाता है कि नए टूल्स का उपयोग करते समय किस तरह की शुरुआती बाधाएँ आ सकती हैं। यह डेवलपर्स के लिए एक चेतावनी और मार्गदर्शन दोनों का काम करता है।

परीक्षण के परिणाम और विज्ञापन बनाम वास्तविकता

जब डेटा को बढ़ाकर 1,000,000 पंक्तियाँ किया जाता है, तो Stulab केवल 6 गुना तेज़ पाया जाता है, जो विज्ञापित 138 गुना से काफी कम है। एक अन्य टेस्ट 'distinct + order by' में यह प्रदर्शन सुधार मात्र 1.5 गुना तक ही सीमित रहता है। वक्ता का निष्कर्ष है कि विज्ञापन में किए गए दावे थोड़े बढ़ा-चढ़ाकर बताए गए हो सकते हैं। हालांकि, इसके बावजूद Stulab का प्रदर्शन SQLite से बेहतर बना रहता है। यह तुलना वास्तविक उपयोग के मामलों में प्रदर्शन की स्पष्ट तस्वीर पेश करती है।

निष्कर्ष: क्या Stulab, SQLite की जगह लेगा?

अंतिम खंड में यह स्पष्ट किया गया है कि Stulab और SQLite अलग-अलग उद्देश्यों के लिए बने हैं और एक-दूसरे के प्रतिद्वंद्वी नहीं हैं। SQLite अभी भी ट्रांजैक्शनल कार्यों के लिए सबसे भरोसेमंद विकल्प बना हुआ है, जबकि Stulab एनालिटिक्स के लिए श्रेष्ठ है। वक्ता प्रोजेक्ट के भविष्य के बारे में आशावादी हैं लेकिन NPM पैकेज को पैच करने की सलाह देते हैं। वीडियो दर्शकों से उनके अनुभवों के बारे में पूछते हुए और चैनल को सब्सक्राइब करने के अनुरोध के साथ समाप्त होता है। यह सारांश डेवलपर्स को सही टूल चुनने में मदद करने के लिए अंतिम निर्णय प्रदान करता है।

Community Posts

View all posts