- SQLite एक row-based स्टोरेज है जो डिस्क पर B-tree संरचना में डेटा संग्रहीत करता है, और क्वेरी चलाने के लिए VDBE नाम की virtual machine का उपयोग करता है। यह प्लेटफ़ॉर्म-स्वतंत्र है और single-threaded रूप में लगभग हर environment में चल सकता है
- यह एक general-purpose database है, लेकिन OLTP workloads में विशेष रूप से उत्कृष्ट है। 2015 में University at Buffalo के शोधकर्ताओं ने पाया कि अधिकांश queries या तो सरल key-value lookups थीं या जटिल OLAP queries
- University of Wisconsin–Madison के शोधकर्ताओं ने analytical queries को तेज़ बनाने पर काम किया। उन्होंने प्रदर्शन की तुलना के लिए DuckDB और Star Schema Benchmark (SSB) का उपयोग किया
कारण
- SQLite धीमा क्यों है, यह समझने के लिए
VDBE_PROFILE विकल्प का उपयोग करके VDBE के हर instruction द्वारा खर्च किए गए CPU cycles को मापा गया
SeekRowID और Column नाम के दो opcode मुख्य कारण निकले
डेटाबेस जॉइन
- डेटाबेस में join लागू करने के तरीके nested loop join, hash join, और sort-merge join होते हैं
- SQLite सबसे सरल "nested loop join" का उपयोग करता है। यह B-tree traversal जैसा होने के कारण महंगा पड़ता है
join optimization का महत्व
- join operation में tables का क्रम महत्वपूर्ण होता है। क्रम बदलने से operations की संख्या बहुत कम हो सकती है। यह एक NP-hard समस्या है
- nested loop join से बेहतर दो join algorithms मौजूद हैं, लेकिन hash join बहुत memory खर्च करता है, और SQLite अक्सर memory-constrained environments में चलता है
- शोधकर्ताओं ने space efficiency बढ़ाने और CPU cache line के अनुरूप रखने के लिए Bloom फ़िल्टर का उपयोग किया। उन्होंने
Filter और FilterAdd नाम के दो opcode जोड़े
परिणाम
- optimization के बाद CPU cycle analysis में बड़े नीले बार लगभग गायब हो गए
- SQLite 7 गुना से 10 गुना तक तेज़ हो गया। यह शोध परिणाम SQLite v3.38.0 में लागू किया गया
- Bloom फ़िल्टर न्यूनतम memory overhead के साथ SQLite के सरल implementation के लिए उपयुक्त है और मौजूदा query engine के भीतर काम करता है
3 टिप्पणियां
अभी वर्ज़न चेक किया तो दिखा कि यह सिस्टम 3.42.0 इस्तेमाल कर रहा है। फिलहाल सबसे नया वर्ज़न 3.47.2 है।
लगता है अब मुझे यह देखना पड़ेगा कि मैं अभी SQLite का कौन-सा version इस्तेमाल कर रहा हूँ।
असल में, मैं इससे भी ज़्यादा openpyxl का इस्तेमाल करके Excel file बना रहा हूँ, लेकिन इसमें काफी समय लगता है, इसलिए मुझे देखना होगा कि कोई दूसरी library है या नहीं।
क्या प्रोफाइलिंग करके देखना बेहतर नहीं होगा?