Manual:SQLite/hi



इस लेख का उद्देश्य है SQLite पर मीडियाविकि को चलाने के बारे में जानकारी इकट्ठा करना।

मीडियाविकि पर 1.17 से SQLite समर्थित है, मगर कृपया ध्यान रखें कि यह द्वितीय-स्तर समर्थन है, और आपको शायद कुछ बग्स मिल जाएँ। मीडियाविकि से साथ सबसे ज़्यादा प्रयुक्त डेटाबेस है । समस्याओं की सूची के लिए Phabricator देखें। मीडियाविकि को SQLite के संस्करण या अधिक की ज़रूरत है। डेटाबेस में बदलाव करने वाले कुछ ही एक्सटेंशनों पर 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 संस्करण + आवश्यक है। पूरे खोज टेक्स्ट का इस्तेमाल करने के लिए SQLite को FTS3 मॉड्यूल सक्षम करके संकलित करना होता है (आजकल ज़्यादातर बिल्ड्स में यह पहले से मौजूद नहीं होता)। SQLite3 PHP के PDO फ़ंक्शन्स के ज़रिए काम करता है।


 * Debian या Ubuntu पर आधारित सिस्टम्स पर SQLite3 को स्थापित करने के लिए  का इस्तेमाल करें।
 * php.net से Windows बाइनरी से काम चल जाएगा।
 * PHP PDO SQLite मॉड्यूल को लोड करना होगा। अपने  में निम्न पंक्ति को टिप्पणी से हटा दें
 * SQLite डेटाबेस को कहाँ डालना चाहिए? डिफ़ॉल्ट पथ तो '$IP/../data/$dbname.sqlite' लग रहा है। Webroot से बाहर किसी भी जगह पर इसे रखा जा सकता है; इसे पास में रखना बेहतर होगा। या फिर अगर आप चाहें तो इसे webroot में कहीं पर रख सकते हैं और वेबसर्वर कॉन्फ़िगरेशन की मदद से इस तक पहुँच को रोक सकते हैं।
 * SQLite डेटाबेस को कहाँ डालना चाहिए? डिफ़ॉल्ट पथ तो '$IP/../data/$dbname.sqlite' लग रहा है। Webroot से बाहर किसी भी जगह पर इसे रखा जा सकता है; इसे पास में रखना बेहतर होगा। या फिर अगर आप चाहें तो इसे webroot में कहीं पर रख सकते हैं और वेबसर्वर कॉन्फ़िगरेशन की मदद से इस तक पहुँच को रोक सकते हैं।



SQLite बैक-एंड पर मीडियाविकि स्थापित करना

 * अगर PHP के लिए SQLite को ठीक से स्थापित किया जाए, मीडियाविकि इंस्टॉलर आपको SQLite का इस्तेमाल करने का एक विकल्प देगा।
 * अगर आप "SQLite डेटा डिरेक्ट्री" फ़ील्ड में कुछ नहीं डालते हैं, आपका खाली छोड़ दिया जाएगा, जो दस्तावेज़ के जड़ के जनक के   डिरेक्ट्री से संबद्ध है। हालाँकि, यह डिरेक्ट्री अलग-अलग वेब स्क्रिप्टों और अनुरक्षण स्क्रिप्टों के लिए अलग हो सकता है तो इसे निर्दिष्ट करने की सलाह दी जाती है।



खोज इंजन
SQLite बैक-एंड के लिए खोजने की क्षमता मीडियाविकि 1.16 में जोड़ी गई थी। इनमें संकलित FTS3 मॉड्यूल के साथ SQLite की ज़रूरत होती है, जो आम तौर पर ज़्यादातर आधुनिक बिल्ड्स में मौजूद होता ही है। अगर आपने हाल ही में अपने SQLite को किसी ऐसे संस्करण पर अपडेट किया है जिसमें FTS3 शामिल है, अपडेटर को चलाएँ जैसा आप मीडियाविकि को अपग्रेड करते समय चलाते होंगे। जब अपडेटर स्क्रिप्ट ने खोज इनडेक्स टेबल बना लिया हो, उसे से भरें। यह तब भी काम आता है जब आप बिना FTS3 के किसी पर्यावरण में बदल रहे हों: अपडेटर को दोबारा चलाने पर टेबल को डाउनग्रेड किया जाएगा ताकि SQL त्रुटियाँ न आए।



समस्या निवारण


टर्मिनल पर डेटाबेस तक पहुँच नहीं पा रहे हैं
कमांड-पंक्ति की मदद से डेटाबेस का इस्तेमाल करने के लिए टर्मिनल पर लिखें:

sqlite3 /var/data/database_name.sqlite

को उस डिरेक्ट्री से बदल दें जिसे स्थापना की प्रक्रिया के दौरान "SQLite डेटा डिरेक्ट्री" के रूप में सेट किया गया था। वैकल्पिक रूप से, में  ढूँढ़ें।

अगर आपको SQLite का इस्तेमाल करने में अनुभव नहीं है और आप  चला देते हैं, कुछ गोलमाल हो सकता है - चूँकि यह एक बिलकुल ही अलग डेटाबेस खोल देगा (बनाएगा अगर डेटाबेस पहले से मौजूद नहीं है) क्योंकि SQLite इस तर्क को एक सिस्टम-वाइड डेटाबेस के नाम के बजाय फ़ाइल के नाम के रूप में लेता है जिसमें डेटाबेस मौजूद है।

समस्याएँ
बग्स को विकिमीडिया के बग ट्रैकर पर रिपोर्ट किया जाना चाहिए। पहले जाँचें कि आपकी समस्या को पहले से ही रिपोर्ट किया गया है या फिर नहीं - टैग की निर्भरताएँ देखें और खोज का इस्तेमाल करें। अगर आपको अपनी समस्या नहीं मिल रही है, एक नई समस्या खोेलें। कुछ भी हो, अपने बग को इस तरह से बनाएँ ताकि इसे खोजने और ट्रैक करने में आसानी हो: इसके सारांश फ़ील्ड में SQLite का उल्लेख करें और इसपर परियोजना टैग SQLite जोड़ें।

Performance Tips

 * If possible, ensure you have the APCu php extension installed and set to CACHE_ACCEL. If no cache is present, MediaWiki will use the database as a cache backend, which can lead to write contention. On Sqlite this can significantly slow down your wiki.
 * Make sure your SQLite database is in WAL mode. This can have a major impact on performance when people are viewing and editing your site at the same time. You can do this by using the sqlite command line tool to open the DB, and run the command.



ये भी देखें

 * SQLite के लिए कॉन्फ़िगरेशन सेटिंग्स:
 * - मीडियाविकि 1.35 या पहले
 * मीडियाविकि 1.36+
 * मीडियाविकि 1.36+



बाहरी कड़ियाँ

 * Migrating MediaWiki from MySQL to SQLite
 * Tool to migrate MediaWiki from SQLite to MySQL
 * SQLite का मुखपृष्ठ
 * SQLite पर विकिपीडिया लेख