मैन्युअल:SQLite
इस लेख का उद्देश्य है SQLite पर मीडियाविकि को चलाने के बारे में जानकारी इकट्ठा करना।
मीडियाविकि पर 1.17 से SQLite समर्थित है, मगर कृपया ध्यान रखें कि यह द्वितीय-स्तर समर्थन है, और आपको शायद कुछ बग्स मिल जाएँ। मीडियाविकि से साथ सबसे ज़्यादा प्रयुक्त डेटाबेस है MySQL । समस्याओं की सूची के लिए Phabricator देखें। मीडियाविकि को SQLite के संस्करण 3.8.0 या अधिक की ज़रूरत है। डेटाबेस में बदलाव करने वाले कुछ ही एक्सटेंशनों पर SQLite समर्थित है।
क्या SQLite मीडियाविकि के लिए एक अच्छा विकल्प है?
मीडियाविकि के लिए SQLite का इस्तेमाल करने में दो ज़रूरी खामियाँ हैं। पहल, जहाँ ज़्यादातर एक्सटेंशन्स SQLite को समर्थित करते हैं, कुछ प्रसिद्ध एक्सटेंशन्स हैं जिनपर SQLite आज भी समर्थित नहीं है। दूसरा, SQLite का इस्तेमाल एक से ज़्यादा सर्वरों पर नहीं किया जा सकता है। अगर आपके विकि पर काफ़ी सारे सदस्य हो जाते हैं और काफ़ी सारी सामग्री जोड़ी जाती है, MySQL की तरह प्राथमिक-नकल मॉडल को समर्थित करने वाले किसी डेटाबेस प्रणाली का इस्तेमाल करना बेहतर है। परिणाम में, अगर आपका विकि इन एक्सटेंशनों पर निर्भर है, या फिर अगर इसे एक प्राथमिक-नकल डेटाबेस प्रणाली की ज़रूरत होती है, अपने विकि के लिए MySQL का इस्तेमाल करना सुझाया जाता है। SQLite, MySQL, या किसी दूसरे डेटाबेस प्रणाली के इस्तेमाल करने का फैसला आम तौर पर विकि को बनाने से पहले लिया जाता है, क्योंकि विकि का इस्तेमाल करना शुरू कर देने के बाद एक SQLite डेटाबेस को MySQL डेटाबेस में बदलना मुश्किल हो जाता है।
SQLite के बारे में
SQLite एक मुक्त-स्रोत डेटाबेस लाइब्रेरी है जिसे सार्वजनिक डोमेन में प्रकाशित किया गया है। क्लाइंट-सर्वर डेटाबेस प्रबंधन प्रणालियों के विपरीत, SQLite लाइब्रेरी को PHP में जोड़ दिया जाता है, इसलिए यह सर्वर प्रणाली का एक अहम हिस्सा बन जाता है। मीडियाविकि SQLite की कार्यक्षमता का इस्तेमाल करने के लिए साधारण फ़ंक्शन कॉल्स का इस्तेमाल करता है, जो डेटाबेस तक पहुँचने में लेटेंसी को घटाता है, क्योंकि फ़ंक्शन कॉल्स अंतर-प्रणाली संचार से ज़्यादा कुशल होते हैं।
मीडियाविकि के डेटाबेस बैक-एंड के रूप में SQLite का इस्तेमाल करने के अपने पक्ष-विपक्ष हैं:
- पक्ष
- आपको MySQL जैसा कोई स्टैंडअलोन डेटाबेस स्थापित करने की ज़रूरत नहीं; यह प्रबंधन में लगाई जाने वाली प्रयास को काफ़ी हद तक घटाता है और त्रुटियों की संभावना को कम करता है।
- इसका यह भी मतलब है कि SQLite, किसी USB स्टिक से चल रहीं पोर्टेबल मीडियाविकि स्थापनाओं के लिए ज़्यादा अनुकूल है।
- आप साँझित होस्ट्स पर कृत्रिम डेटाबेस सीमाओं से सीमाबद्ध नहीं होते हैं।
- पूरे डेटाबेस को एक ही क्रॉस-मंच फ़ाइल के रूप में रखा जाता है, जिससे बैकअप्स बनाना और माइग्रेट करना आसान हो जाता है।
- विपक्ष
- SQLite स्केलेबल नहीं है, तो अगर आपका विकि काफ़ी बड़ा और प्रसिद्ध है, आपको MySQL का इस्तेमाल करना चाहिए।
- हालाँकि SQLite का अपना खोज इंजन है, यह Lucene जैसी उन्नत सेवाओं द्वारा समर्थित नहीं है।
- कई एक्सटेंशनों पर SQLite का इस्तेमाल करने पर डेटाबेस को अपडेट या स्थापित करने में समस्याएँ आ सकती हैं: दुरुपयोग फ़िल्टर, Echo, Flow, और LiquidThreads।
SQLite की स्थापना
कम-से-कम SQLite संस्करण 3.8.0+ आवश्यक है। पूरे खोज टेक्स्ट का इस्तेमाल करने के लिए SQLite को FTS3 मॉड्यूल सक्षम करके संकलित करना होता है (आजकल ज़्यादातर बिल्ड्स में यह पहले से मौजूद नहीं होता)। SQLite3 PHP के PDO फ़ंक्शन्स के ज़रिए काम करता है।
- Debian या Ubuntu पर आधारित सिस्टम्स पर SQLite3 को स्थापित करने के लिए
apt install php-sqlite3
का इस्तेमाल करें। - php.net से Windows बाइनरी से काम चल जाएगा।
- PHP PDO SQLite मॉड्यूल को लोड करना होगा। अपने
php.ini
में निम्न पंक्ति को टिप्पणी से हटा देंextension=pdo_sqlite
- SQLite डेटाबेस को कहाँ डालना चाहिए? डिफ़ॉल्ट पथ तो '$IP/../data/$dbname.sqlite' लग रहा है। Webroot से बाहर किसी भी जगह पर इसे रखा जा सकता है; इसे पास में रखना बेहतर होगा। या फिर अगर आप चाहें तो इसे webroot में कहीं पर रख सकते हैं और वेबसर्वर कॉन्फ़िगरेशन की मदद से इस तक पहुँच को रोक सकते हैं।
SQLite बैक-एंड पर मीडियाविकि स्थापित करना
- अगर PHP के लिए SQLite को ठीक से स्थापित किया जाए, मीडियाविकि इंस्टॉलर (
/mw-config/index.php
) आपको SQLite का इस्तेमाल करने का एक विकल्प देगा। - अगर आप "SQLite डेटा डिरेक्ट्री" फ़ील्ड में कुछ नहीं डालते हैं, आपका $wgSQLiteDataDir खाली छोड़ दिया जाएगा, जो दस्तावेज़ के जड़ के जनक के
data
डिरेक्ट्री से संबद्ध है। हालाँकि, यह डिरेक्ट्री अलग-अलग वेब स्क्रिप्टों और अनुरक्षण स्क्रिप्टों के लिए अलग हो सकता है तो इसे निर्दिष्ट करने की सलाह दी जाती है।
खोज इंजन
मीडियाविकि संस्करण: | ≥ 1.16 |
SQLite बैक-एंड के लिए खोजने की क्षमता मीडियाविकि 1.16 में जोड़ी गई थी। इनमें संकलित FTS3 मॉड्यूल के साथ SQLite की ज़रूरत होती है, जो आम तौर पर ज़्यादातर आधुनिक बिल्ड्स में मौजूद होता ही है। अगर आपने हाल ही में अपने SQLite को किसी ऐसे संस्करण पर अपडेट किया है जिसमें FTS3 शामिल है, अपडेटर को चलाएँ जैसा आप मीडियाविकि को अपग्रेड करते समय चलाते होंगे। जब अपडेटर स्क्रिप्ट ने खोज इनडेक्स टेबल बना लिया हो, उसे rebuildtextindex.php से भरें। यह तब भी काम आता है जब आप बिना FTS3 के किसी पर्यावरण में बदल रहे हों: अपडेटर को दोबारा चलाने पर टेबल को डाउनग्रेड किया जाएगा ताकि SQL त्रुटियाँ न आए।
बैकअप करना
If your wiki is currently offline, its database can be backed up by simply copying the database file.
Otherwise, you should use a maintenance script: php maintenance/SqliteMaintenance.php --backup-to <backup file name>
, which will make sure that operation is atomic and there are no inconsistencies.
If your database is not really huge and server is not under heavy load, users editing the wiki will notice nothing but a short lag.
Users who are just reading will not notice anything in any case.
समस्या निवारण
टर्मिनल पर डेटाबेस तक पहुँच नहीं पा रहे हैं
कमांड-पंक्ति की मदद से डेटाबेस का इस्तेमाल करने के लिए टर्मिनल पर लिखें:
sqlite3 /var/data/database_name.sqlite
/var/data
को उस डिरेक्ट्री से बदल दें जिसे स्थापना की प्रक्रिया के दौरान "SQLite डेटा डिरेक्ट्री" के रूप में सेट किया गया था।
वैकल्पिक रूप से, LocalSettings.php में $wgSQLiteDataDir ढूँढ़ें।
अगर आपको SQLite का इस्तेमाल करने में अनुभव नहीं है और आप sqlite3 database_name
चला देते हैं, कुछ गोलमाल हो सकता है - चूँकि यह एक बिलकुल ही अलग डेटाबेस खोल देगा (बनाएगा अगर डेटाबेस पहले से मौजूद नहीं है) क्योंकि SQLite इस तर्क को एक सिस्टम-वाइड डेटाबेस के नाम के बजाय फ़ाइल के नाम के रूप में लेता है जिसमें डेटाबेस मौजूद है।
समस्याएँ
बग्स को विकिमीडिया के बग ट्रैकर पर रिपोर्ट किया जाना चाहिए। पहले जाँचें कि आपकी समस्या को पहले से ही रिपोर्ट किया गया है या फिर नहीं - #sqlite टैग की निर्भरताएँ देखें और खोज का इस्तेमाल करें। अगर आपको अपनी समस्या नहीं मिल रही है, एक नई समस्या खोेलें। कुछ भी हो, अपने बग को इस तरह से बनाएँ ताकि इसे खोजने और ट्रैक करने में आसानी हो: इसके सारांश फ़ील्ड में SQLite का उल्लेख करें और इसपर परियोजना टैग SQLite जोड़ें।
प्रदर्शन की टिप्पणियाँ
- अगर संभव हो, सुनिश्चित करें कि आपने APCu PHP एक्सटेंशन को स्थापित किया हुआ है और $wgMainCacheType को CACHE_ACCEL पर सेट किया हुआ है। अगर कोई कैश मौजूद नहीं होता है, मीडियाविकि कैश बैक-एंड के रूप में डेटाबेस का इस्तेमाल करने लगेगा, जिससे लेख विवाद खड़ी हो सकती है। SQLite पर इससे आपका विकि काफ़ी धीमा हो जाएगा।
- सुनिश्चित करें कि आपका SQLite, WAL मोड में है। इससे प्रदर्शन पर काफ़ी बड़ा प्रभाव पड़ सकता है जब लोग आपके विकि को एक ही साथ पढ़ और सम्पादित कर रहे हों। आप ऐसा करने के लिए SQLite कमांड पंक्ति उपकरण की मदद से डेटाबेस खोलकर
PRAGMA journal_mode=wal;
कमांड चला सकते हैं।
ये भी देखें
- SQLite के लिए कॉन्फ़िगरेशन सेटिंग्स:
- sqlite.php - मीडियाविकि 1.35 या पहले
- SqliteMaintenance.php मीडियाविकि 1.36+