मैंने हाल ही में SQLite बनाम MySQL के बारे में यह प्रश्न पढ़ा और उत्तर ने बताया कि SQLite अच्छी तरह से पैमाने पर नहीं है और आधिकारिक वेबसाइट इस तरह की पुष्टि करती है ।
SQLite कितना स्केलेबल है और इसकी ऊपरी सबसे अधिक सीमाएँ क्या हैं?
मैंने हाल ही में SQLite बनाम MySQL के बारे में यह प्रश्न पढ़ा और उत्तर ने बताया कि SQLite अच्छी तरह से पैमाने पर नहीं है और आधिकारिक वेबसाइट इस तरह की पुष्टि करती है ।
SQLite कितना स्केलेबल है और इसकी ऊपरी सबसे अधिक सीमाएँ क्या हैं?
जवाबों:
कल मैंने एक छोटी सी साइट जारी की *सभी आगंतुकों के लिए एक साझा SQLite डेटाबेस का उपयोग करने वाले अपने प्रतिनिधि को ट्रैक करने के लिए। दुर्भाग्य से, यहां तक कि मामूली भार के साथ यह मेरे मेजबान पर डाल दिया यह काफी धीमी गति से चला। ऐसा इसलिए है क्योंकि हर बार किसी ने पृष्ठ देखे जाने पर पूरे डेटाबेस को लॉक कर दिया था क्योंकि इसमें अपडेट / इंसर्ट थे। मैंने जल्द ही MySQL पर स्विच कर दिया और जब मुझे इसका परीक्षण करने का अधिक समय नहीं मिला, तो यह SQLite की तुलना में बहुत अधिक स्केलेबल लगता है। मुझे सिर्फ धीमा पृष्ठ लोड याद है और कभी-कभी एक डेटाबेस लॉक की गई त्रुटि प्राप्त होती है जब साइक्लाइट में शेल से प्रश्नों को निष्पादित करने का प्रयास किया जाता है। उस ने कहा, मैं ठीक ठीक SQLite से एक और साइट चला रहा हूँ। अंतर यह है कि साइट स्थिर है (यानी मैं केवल एक ही हूं जो डेटाबेस को बदल सकता है) और इसलिए यह समवर्ती रीड्स के लिए ठीक काम करता है। कहानी का नैतिक:
संपादित करें : मुझे बस एहसास हुआ कि मैं SQLite के लिए उचित नहीं हो सकता था - मैंने SQLite डेटाबेस में किसी भी कॉलम को इंडेक्स नहीं किया था जब मैं इसे वेब पेज से सेवा दे रहा था। यह आंशिक रूप से मंदी का कारण था जो मैं अनुभव कर रहा था। हालाँकि, डेटाबेस-लॉकिंग स्टैंड का अवलोकन - यदि आपके पास विशेष रूप से अपडेट है, तो SQLite प्रदर्शन MySQL या Postgres से मेल नहीं खाएगा।
एक और संपादन: चूंकि मैंने इसे लगभग 3 महीने पहले पोस्ट किया था, इसलिए मुझे SQLite की मापनीयता की बारीकी से जांच करने का अवसर मिला है, और कुछ ट्रिक्स के साथ यह काफी स्केलेबल हो सकता है। जैसा कि मैंने अपने पहले संपादन में उल्लेख किया है, डेटाबेस इंडेक्स नाटकीय रूप से क्वेरी समय को कम करते हैं, लेकिन यह डेटाबेस के बारे में सामान्य अवलोकन से अधिक है क्योंकि यह SQLite के बारे में है। हालाँकि, एक और चाल है जो आप SQLite: लेनदेन को गति देने के लिए उपयोग कर सकते हैं । जब भी आपको कई डेटाबेस लिखना होता है, तो उन्हें लेनदेन के अंदर रखें। फ़ाइल को लिखने (और लॉक करने) के बजाय हर बार जब कोई लिखित क्वेरी जारी की जाती है, तो लेनदेन पूरा होने के बाद ही लिखना होगा।
जिस साइट का मैं उल्लेख करता हूं, मैंने पहले पैराग्राफ में जारी किया था, उसे वापस SQLite में बदल दिया गया है, और कुछ स्थानों पर अपना कोड ट्यून करने के बाद यह काफी आसानी से चल रहा है।
* साइट अब उपलब्ध नहीं है
Sqlite एकल-उपयोगकर्ता के संदर्भ में स्केलेबल है, मेरे पास बहु-गीगाबाइट डेटाबेस है जो बहुत अच्छा प्रदर्शन करता है और मुझे इसके साथ बहुत समस्या नहीं है।
लेकिन यह है , एकल उपयोगकर्ता तो यह क्या स्केलिंग की तरह आप के बारे में बात कर रहे हैं पर निर्भर करता है।
टिप्पणियों के जवाब में। ध्यान दें कि ऐसा कुछ भी नहीं है जो मल्टी-उपयोगकर्ता वातावरण में एक स्क्लेइट डेटाबेस का उपयोग करने से रोकता है, लेकिन प्रत्येक लेनदेन (वास्तव में, प्रत्येक एसक्यूएल बयान जो डेटाबेस को संशोधित करता है) फ़ाइल पर ताला लगाता है। है, जो डेटाबेस तक पहुँचने से अन्य उपयोगकर्ताओं के पाएगा पर सभी ।
इसलिए यदि आपके पास डेटाबेस में बहुत सारे संशोधन हैं, तो आप अनिवार्य रूप से स्केलिंग की समस्याओं से बहुत जल्दी निपटने जा रहे हैं। यदि, दूसरी ओर, आपके पास लिखने की पहुंच की तुलना में बहुत अधिक रीड एक्सेस है, तो यह इतना बुरा नहीं हो सकता है।
लेकिन Sqlite एक बहु-उपयोगकर्ता वातावरण में निश्चित रूप से कार्य करेगा , लेकिन यह अच्छा प्रदर्शन नहीं करेगा ।
SQLite sqlite.org वेब साइट और अन्य ट्रैफ़िक को बहुत अधिक चलाती है। वे सुझाव देते हैं कि यदि आपके पास प्रति दिन 100k से कम हिट हैं, तो SQLite को ठीक काम करना चाहिए। और इससे पहले कि वे "राइटिटहेड लॉगिंग" सुविधा देते।
यदि आप SQLite के साथ चीजों को गति देना चाहते हैं, तो निम्न कार्य करें:
आप YouTube पर मेरे वीडियो पर एक नज़र डाल सकते हैं, जिसका नाम " राइट-लॉग के साथ SQLite के प्रदर्शन में सुधार " है, जो दिखाता है कि राइट- फॉरवर्ड लॉगिंग का उपयोग कैसे करें और राइट्स के लिए 5x गति सुधार प्रदर्शित करता है।
Sqlite एक डेस्कटॉप या इन-प्रोसेस डेटाबेस है। SQL सर्वर, MySQL, Oracle, और उनके भाई सर्वर हैं ।
डेस्कटॉप डेटाबेस उनकी प्रकृति द्वारा किसी भी अनुप्रयोग के लिए एक अच्छा विकल्प नहीं है जो डेटा स्टोर में समवर्ती लिखने की पहुंच का समर्थन करने की आवश्यकता है। इसमें कुछ ऐसे स्तर शामिल हैं जो अब तक की सबसे अधिक वेब साइटें हैं। यदि आपको किसी भी चीज़ के लिए लॉग इन करना है, तो संभवतः आपको DB तक लिखने की आवश्यकता है।
क्या आपने यह SQLite डॉक्स - http://www.sqlite.org/whentouse.html पढ़ा है ?
SQLite आमतौर पर निम्न से मध्यम यातायात वेबसाइटों के लिए डेटाबेस इंजन के रूप में महान काम करेगा (जो कहना है, सभी वेबसाइटों का 99.9%)। SQLite कितनी भारी मात्रा में वेब ट्रैफ़िक को संभाल सकता है, इस बात पर निर्भर करता है कि वेबसाइट अपने डेटाबेस का कितना भारी उपयोग करती है। सामान्यतया, किसी भी साइट को जो 100K हिट / दिन से कम मिलता है, उसे SQLite के साथ ठीक काम करना चाहिए। 100K हिट / दिन का आंकड़ा एक रूढ़िवादी अनुमान है, न कि एक कठिन ऊपरी सीमा। SQLite को ट्रैफ़िक की 10 गुना राशि के साथ काम करने के लिए प्रदर्शित किया गया है।
SQLite स्केलेबिलिटी अत्यधिक उपयोग किए गए डेटा और उनके प्रारूप पर निर्भर करेगा। मुझे अतिरिक्त लंबी तालिकाओं (जीपीएस रिकॉर्ड, प्रति सेकंड एक रिकॉर्ड) के साथ कुछ कठिन अनुभव हुआ है। अनुभव से पता चला कि SQLite चरणों में धीमा हो जाएगा, आंशिक रूप से अनुक्रमित (और समय-स्टैम्प्ड अनुक्रमित) के साथ बढ़ते हुए बाइनरी पेड़ों के लगातार असंतुलन के कारण, आप बस जानते हैं कि पेड़ बहुत अधिक असंतुलित होने वाला है, फिर भी यह आपके लिए महत्वपूर्ण है खोज)। तो अंत में लगभग 1 जीबी (बहुत ही बॉलपार्क, मुझे पता है), मेरे मामले में प्रश्न सुस्त हो जाते हैं। आपका माइलेज अलग-अलग होगा।
एक बात याद रखें, सभी डींग मारने के बावजूद, SQLite डेटा वेयरहाउसिंग के लिए नहीं बनाया गया है। SQLite के लिए अनुशंसित विभिन्न उपयोग नहीं हैं । SQLite के पीछे ठीक लोग खुद कहते हैं:
SQLite को देखने का दूसरा तरीका यह है: SQLite को Oracle को बदलने के लिए डिज़ाइन नहीं किया गया है। इसे फोपेन () को बदलने के लिए डिज़ाइन किया गया है।
और यह मुख्य तर्क की ओर जाता है (मात्रात्मक, खेद, लेकिन गुणात्मक नहीं), SQLite सभी उपयोगों के लिए नहीं है, जबकि MySQL कई विविध उपयोगों को कवर कर सकता है, भले ही आदर्श रूप में नहीं। उदाहरण के लिए, आपके पास MySQL स्टोर फ़ायरफ़ॉक्स कुकीज़ (SQLite के बजाय) हो सकता है, लेकिन आपको हर समय चलने वाली उस सेवा की आवश्यकता होगी। दूसरी ओर, आप MySQL के बजाय SQLite (जैसा कि बहुत से लोग करते हैं) पर एक ट्रांजेक्शनल वेबसाइट चला सकते हैं, लेकिन बहुत डाउनटाइम की उम्मीद करते हैं।
ATTACH DATABASE
सभी तालिकाओं (हालांकि 62 डेटाबेस तक सीमित) के साथ एक वर्चुअल डेटाबेस कनेक्शन बनाने के लिए उपयोग करता है।
मुझे लगता है कि (संख्या 1 में) वेबसर्वर ग्राहकों के हंटर्स की सेवा डेटाबेस के एकल कनेक्शन के साथ बैकएंड पर दिखाई देता है, है ना?
इसलिए डेटाबेस में कोई समवर्ती पहुँच नहीं है इसलिए हम कह सकते हैं कि डेटाबेस 'सिंगल यूज़र मोड' में काम कर रहा है। ऐसी परिस्थिति में मल्टी-यूजर एक्सेस को डिस्कस करने का कोई मतलब नहीं है और इसलिए SQLite किसी भी अन्य सर्वरबेस डेटाबेस के रूप में भी काम करता है।
इस पर इस तरीके से विचार करें। हर बार जब कोई इसका उपयोग करता है तो SQL Lite लॉक हो जाएगा (SQLite पढ़ने पर लॉक नहीं होता)। इसलिए यदि आपका वेब पेज या एक अनुप्रयोग जिसमें कई समवर्ती उपयोगकर्ता हैं, तो SQLLite के साथ एक समय में आपके ऐप का उपयोग किया जा सकता है। तो ठीक है एक स्केलिंग मुद्दा है। यदि इसका एक व्यक्ति आवेदन एक संगीत पुस्तकालय कहता है जहां आप सैकड़ों शीर्षक, रेटिंग, जानकारी, उपयोग, खेल, खेल समय रखते हैं, तो SQL लाइट खूबसूरती से हजारों रिकॉर्ड बनाएगा यदि लाखों रिकॉर्ड नहीं हैं (हार्ड ड्राइव तैयार)
दूसरी ओर MySQL सर्वर ऐप्स के लिए अच्छी तरह से काम करता है जहां सभी लोग इसे समवर्ती रूप से उपयोग करेंगे। यह लॉक नहीं है और यह आकार में काफी बड़ा है। इसलिए आपकी संगीत लाइब्रेरी के लिए MySql खत्म हो जाएगा क्योंकि केवल एक व्यक्ति इसे देखेगा, UNLESS यह एक साझा संगीत लाइब्रेरी है जहां हजारों लोग इसे जोड़ते हैं या अपडेट करते हैं। तब MYSQL उपयोग करने वाला होगा।
तो सिद्धांत में MySQL बेहतर है तो Sqllite कारण यह म्यूटेंट उपयोगकर्ताओं को संभाल सकता है, लेकिन एकल उपयोगकर्ता ऐप के लिए ओवरकिल है।
SQLite की वेबसाइट (जिस भाग को आपने संदर्भित किया है) इंगित करता है कि इसका उपयोग कई बहु-उपयोगकर्ता स्थितियों के लिए किया जा सकता है।
मैं कहूंगा कि यह काफी हद तक संभाल सकता है। मेरे अनुभव में यह हमेशा बहुत तेज रहा है। बेशक, आपको अपनी तालिकाओं को अनुक्रमित करने की आवश्यकता है और जब इसके खिलाफ कोडिंग की जाती है, तो आपको यह सुनिश्चित करने की आवश्यकता है कि आप पैरामीटाइज्ड प्रश्नों और पसंद का उपयोग करें। मूल रूप से वही सामान जो आप प्रदर्शन को बेहतर बनाने के लिए किसी भी डेटाबेस के साथ करेंगे।
यह वास्तविक SQL सर्वर की जाँच के लायक हो सकता है , जो कि SQLite पर बनाया गया एक डेटाबेस सर्वर है।