कैसे स्केलेबल है SQLite? [बन्द है]


178

मैंने हाल ही में SQLite बनाम MySQL के बारे में यह प्रश्न पढ़ा और उत्तर ने बताया कि SQLite अच्छी तरह से पैमाने पर नहीं है और आधिकारिक वेबसाइट इस तरह की पुष्टि करती है

SQLite कितना स्केलेबल है और इसकी ऊपरी सबसे अधिक सीमाएँ क्या हैं?

जवाबों:


429

कल मैंने एक छोटी सी साइट जारी की *सभी आगंतुकों के लिए एक साझा SQLite डेटाबेस का उपयोग करने वाले अपने प्रतिनिधि को ट्रैक करने के लिए। दुर्भाग्य से, यहां तक ​​कि मामूली भार के साथ यह मेरे मेजबान पर डाल दिया यह काफी धीमी गति से चला। ऐसा इसलिए है क्योंकि हर बार किसी ने पृष्ठ देखे जाने पर पूरे डेटाबेस को लॉक कर दिया था क्योंकि इसमें अपडेट / इंसर्ट थे। मैंने जल्द ही MySQL पर स्विच कर दिया और जब मुझे इसका परीक्षण करने का अधिक समय नहीं मिला, तो यह SQLite की तुलना में बहुत अधिक स्केलेबल लगता है। मुझे सिर्फ धीमा पृष्ठ लोड याद है और कभी-कभी एक डेटाबेस लॉक की गई त्रुटि प्राप्त होती है जब साइक्लाइट में शेल से प्रश्नों को निष्पादित करने का प्रयास किया जाता है। उस ने कहा, मैं ठीक ठीक SQLite से एक और साइट चला रहा हूँ। अंतर यह है कि साइट स्थिर है (यानी मैं केवल एक ही हूं जो डेटाबेस को बदल सकता है) और इसलिए यह समवर्ती रीड्स के लिए ठीक काम करता है। कहानी का नैतिक:

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

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

जिस साइट का मैं उल्लेख करता हूं, मैंने पहले पैराग्राफ में जारी किया था, उसे वापस SQLite में बदल दिया गया है, और कुछ स्थानों पर अपना कोड ट्यून करने के बाद यह काफी आसानी से चल रहा है।

* साइट अब उपलब्ध नहीं है


3
MySQL के "क्लासिक" डेटाबेस इंजन, MyISAM में समवर्ती रीड / राइट ऑपरेशंस के बारे में वही समस्याएं हैं जो SQLite के रूप में होती हैं। वास्तव में, यह हर एक पंक्ति को एक राइट ऑपरेशन में छूता है, जिससे राइट-सघन अनुप्रयोगों को स्केल करना असंभव हो जाता है। फिर भी, इसने कई वेब अनुप्रयोगों को ठीक काम किया।
हेनिंग

1
क्या आप अपने उत्तर की शुरुआत को फिर से लिख सकते हैं? उचित अनुक्रमणिकाओं के बिना DB के प्रदर्शन को पूरी तरह से अनुचित है। लेन-देन भी SQLite के प्रदर्शन और मापनीयता को बहुत बदल देते हैं।
कोर्नेल

3
@porneL: यह सच है, लेकिन बिना अनुक्रमित के SQLite MySQL की तुलना में अनुक्रमित के बिना परिमाण धीमा करने का एक आदेश था, और मैंने अपने दूसरे संपादन में लेनदेन के बारे में भी थोड़ा सा शामिल किया। मुझे अभी भी लगता है कि उत्तर की प्रगति कुछ समझ में आती है - यह SQLite के मेरे प्रारंभिक अनुभवहीन उपयोग को दर्शाता है और प्रदर्शन कितना बुरा था। मुझे उम्मीद है कि प्लेटफ़ॉर्म पर आने वाले नए लोग इसी तरह की समस्याओं का सामना करेंगे, और मुझे उम्मीद है कि वे पहले पैराग्राफ के साथ पहचान कर सकते हैं, फिर निम्नलिखित संपादन पढ़ सकते हैं और महसूस कर सकते हैं कि स्वीकार्य प्रदर्शन के लिए SQLite को गति देने के तरीके हैं।
काइल क्रोनिन

1
क्या आप कृपया हमारे साथ साझा कर सकते हैं कि आपकी साइट पर प्रति सेकंड कितने हिट मिल रहे हैं?
NoobOverflow

2
नए SQLite संस्करणों में राइट-फॉर-लॉगिंग (वाल) भी उपलब्ध हैं जो पढ़ने / लिखने के चक्र के दर्द को दूर कर सकते हैं। चीज़ें बदल जाती हैं।
लेज़स वी। कार्लसन

58

Sqlite एकल-उपयोगकर्ता के संदर्भ में स्केलेबल है, मेरे पास बहु-गीगाबाइट डेटाबेस है जो बहुत अच्छा प्रदर्शन करता है और मुझे इसके साथ बहुत समस्या नहीं है।

लेकिन यह है , एकल उपयोगकर्ता तो यह क्या स्केलिंग की तरह आप के बारे में बात कर रहे हैं पर निर्भर करता है।

टिप्पणियों के जवाब में। ध्यान दें कि ऐसा कुछ भी नहीं है जो मल्टी-उपयोगकर्ता वातावरण में एक स्क्लेइट डेटाबेस का उपयोग करने से रोकता है, लेकिन प्रत्येक लेनदेन (वास्तव में, प्रत्येक एसक्यूएल बयान जो डेटाबेस को संशोधित करता है) फ़ाइल पर ताला लगाता है। है, जो डेटाबेस तक पहुँचने से अन्य उपयोगकर्ताओं के पाएगा पर सभी

इसलिए यदि आपके पास डेटाबेस में बहुत सारे संशोधन हैं, तो आप अनिवार्य रूप से स्केलिंग की समस्याओं से बहुत जल्दी निपटने जा रहे हैं। यदि, दूसरी ओर, आपके पास लिखने की पहुंच की तुलना में बहुत अधिक रीड एक्सेस है, तो यह इतना बुरा नहीं हो सकता है।

लेकिन Sqlite एक बहु-उपयोगकर्ता वातावरण में निश्चित रूप से कार्य करेगा , लेकिन यह अच्छा प्रदर्शन नहीं करेगा ।


5
SQLite 3 पढ़ने का समर्थन करता है जब अन्य उपयोगकर्ता इसे लिख रहे हैं।
एलिक्स एक्सल

2
ध्यान दें कि उपरोक्त टिप्पणियां नए हैं (एर) वाल सिस्टम के साथ, एक ही समय में लिखा और पढ़ा जा सकता है, जिससे स्केलेबिलिटी बढ़ सकती है।
लास वी। कार्लसन

क्या यह संभव है कि किसी भी rdbms जैसे sql सर्वर या ओरेकल इत्यादि से मक्खी पर रिकॉर्ड निर्यात करें?
ILoveStackoverflow

29

SQLite sqlite.org वेब साइट और अन्य ट्रैफ़िक को बहुत अधिक चलाती है। वे सुझाव देते हैं कि यदि आपके पास प्रति दिन 100k से कम हिट हैं, तो SQLite को ठीक काम करना चाहिए। और इससे पहले कि वे "राइटिटहेड लॉगिंग" सुविधा देते।

यदि आप SQLite के साथ चीजों को गति देना चाहते हैं, तो निम्न कार्य करें:

  • SQLite 3.7.x पर अपग्रेड करें
  • राइट-फॉरवर्ड लॉगिंग सक्षम करें
  • निम्नलिखित प्रागम चलाएँ: "PRAGMA cache_size = संख्या-के-पृष्ठ;" डिफ़ॉल्ट आकार (नंबर-ऑफ-पेज) 2000 पृष्ठ है, लेकिन यदि आप उस संख्या को बढ़ाते हैं, तो आप उस डेटा की मात्रा बढ़ा देंगे जो सीधे मेमोरी से बाहर चल रहा है।

आप YouTube पर मेरे वीडियो पर एक नज़र डाल सकते हैं, जिसका नाम " राइट-लॉग के साथ SQLite के प्रदर्शन में सुधार " है, जो दिखाता है कि राइट- फॉरवर्ड लॉगिंग का उपयोग कैसे करें और राइट्स के लिए 5x गति सुधार प्रदर्शित करता है।


24

Sqlite एक डेस्कटॉप या इन-प्रोसेस डेटाबेस है। SQL सर्वर, MySQL, Oracle, और उनके भाई सर्वर हैं

डेस्कटॉप डेटाबेस उनकी प्रकृति द्वारा किसी भी अनुप्रयोग के लिए एक अच्छा विकल्प नहीं है जो डेटा स्टोर में समवर्ती लिखने की पहुंच का समर्थन करने की आवश्यकता है। इसमें कुछ ऐसे स्तर शामिल हैं जो अब तक की सबसे अधिक वेब साइटें हैं। यदि आपको किसी भी चीज़ के लिए लॉग इन करना है, तो संभवतः आपको DB तक लिखने की आवश्यकता है।


5
मैं इस बात से असहमत हूं कि इसमें अब तक बनाई गई हर वेब साइट शामिल है। टिप्पणी। अगर वेबसाइट हाई लोड है तो आप सही हैं। उदाहरण के लिए Trac डिफ़ॉल्ट रूप से SQLite का उपयोग करता है और छोटी टीमों के लिए बॉक्स से बहुत अच्छा प्रदर्शन करता है।
एंड्रयू बर्प्स

2
इसे समय दें: आपके पास दो डेवलपर एक ही समय पर एक ही फ़ील्ड का उपयोग करेंगे और यह चोक हो जाएगा।
जोएल कोएहॉर्न

3
आप चोक के रूप में क्या परिभाषित करते हैं? आपकी प्रतिक्रिया से मैं अनुमान लगा रहा हूं कि आपको SQLite के साथ ज्यादा अनुभव नहीं है। SQLite ऑपरेशन पर पूरी फ़ाइल को लॉक कर देगा ताकि आपको देरी का अनुभव हो, लेकिन आपके द्वारा प्रस्तावित स्थिति में इसे 'चोक' करना असंभव है।
एंड्रयू बर्न्स

3
एंड्रयू, क्योंकि एसक्यूएल लाइट छोटी टीमों के लिए अच्छा काम करता है, यह स्केलेबल नहीं बनाता है, स्केलेबल करने के लिए आवश्यकता बड़े पैमाने पर होती है, जिसका अर्थ है कि इसे बड़ी टीमों के साथ अच्छा प्रदर्शन करना चाहिए। मेरी जानकारी के लिए SQL लाइट बड़ी टीमों / समवर्ती डेटाबेस संचालन के लिए स्केलेबल नहीं है जो काफी कम सीमा से अधिक है।
पॉप कैटालिन

5
@Justice। इस जवाब का कोई सहायक सबूत नहीं है कि स्केलेबल SQLite कितना है। किसी के द्वारा उत्तर दिया जाना ज्यादा बेहतर है।
गेटकिलर

23

क्या आपने यह SQLite डॉक्स - http://www.sqlite.org/whentouse.html पढ़ा है ?

SQLite आमतौर पर निम्न से मध्यम यातायात वेबसाइटों के लिए डेटाबेस इंजन के रूप में महान काम करेगा (जो कहना है, सभी वेबसाइटों का 99.9%)। SQLite कितनी भारी मात्रा में वेब ट्रैफ़िक को संभाल सकता है, इस बात पर निर्भर करता है कि वेबसाइट अपने डेटाबेस का कितना भारी उपयोग करती है। सामान्यतया, किसी भी साइट को जो 100K हिट / दिन से कम मिलता है, उसे SQLite के साथ ठीक काम करना चाहिए। 100K हिट / दिन का आंकड़ा एक रूढ़िवादी अनुमान है, न कि एक कठिन ऊपरी सीमा। SQLite को ट्रैफ़िक की 10 गुना राशि के साथ काम करने के लिए प्रदर्शित किया गया है।


3
मैं इससे बहुत सहमत हूं। यदि आप चाहते थे तो 99% वेबसाइटों को SQLLite के साथ ठीक किया जा सकता है। लेकिन, 99% वेब ट्रैफ़िक दूसरी तरफ सबसे बड़ी 1% वेबसाइटों पर जाता है।
djangofan

7
"100k हिट्स / डे" की मीट्रिक पूरी बकवास है। एक "हिट" को आमतौर पर HTTP GET के रूप में परिभाषित किया जाता है और एक वेबसाइट जिसमें कटा हुआ चित्रों का एक समूह हो सकता है, प्रति पृष्ठ 40+ "हिट" प्राप्त कर सकता है - यह डीबी को छूने वाला कोई भी नहीं है। भले ही डॉक्स हिट == पेजव्यू की गलती कर रहे हों, फिर भी यह भ्रामक है। SQLite एक लेखन पर पूरे DB को लॉक करता है। हालांकि यह केवल ब्राउज़िंग रिकॉर्ड के लोगों के 100k पेजव्यू की वैधता से सेवा कर सकता है, यह एक लेखन-गहन एप्लिकेशन (ई-कॉमर्स, मैसेजबोर्ड, आदि) में टूटने वाला है।
जामिब

10

SQLite स्केलेबिलिटी अत्यधिक उपयोग किए गए डेटा और उनके प्रारूप पर निर्भर करेगा। मुझे अतिरिक्त लंबी तालिकाओं (जीपीएस रिकॉर्ड, प्रति सेकंड एक रिकॉर्ड) के साथ कुछ कठिन अनुभव हुआ है। अनुभव से पता चला कि SQLite चरणों में धीमा हो जाएगा, आंशिक रूप से अनुक्रमित (और समय-स्टैम्प्ड अनुक्रमित) के साथ बढ़ते हुए बाइनरी पेड़ों के लगातार असंतुलन के कारण, आप बस जानते हैं कि पेड़ बहुत अधिक असंतुलित होने वाला है, फिर भी यह आपके लिए महत्वपूर्ण है खोज)। तो अंत में लगभग 1 जीबी (बहुत ही बॉलपार्क, मुझे पता है), मेरे मामले में प्रश्न सुस्त हो जाते हैं। आपका माइलेज अलग-अलग होगा।

एक बात याद रखें, सभी डींग मारने के बावजूद, SQLite डेटा वेयरहाउसिंग के लिए नहीं बनाया गया है। SQLite के लिए अनुशंसित विभिन्न उपयोग नहीं हैं । SQLite के पीछे ठीक लोग खुद कहते हैं:

SQLite को देखने का दूसरा तरीका यह है: SQLite को Oracle को बदलने के लिए डिज़ाइन नहीं किया गया है। इसे फोपेन () को बदलने के लिए डिज़ाइन किया गया है।

और यह मुख्य तर्क की ओर जाता है (मात्रात्मक, खेद, लेकिन गुणात्मक नहीं), SQLite सभी उपयोगों के लिए नहीं है, जबकि MySQL कई विविध उपयोगों को कवर कर सकता है, भले ही आदर्श रूप में नहीं। उदाहरण के लिए, आपके पास MySQL स्टोर फ़ायरफ़ॉक्स कुकीज़ (SQLite के बजाय) हो सकता है, लेकिन आपको हर समय चलने वाली उस सेवा की आवश्यकता होगी। दूसरी ओर, आप MySQL के बजाय SQLite (जैसा कि बहुत से लोग करते हैं) पर एक ट्रांजेक्शनल वेबसाइट चला सकते हैं, लेकिन बहुत डाउनटाइम की उम्मीद करते हैं।


1
आप अपने डेटा को तेज करके बहुत बड़ी अनुक्रमित तालिकाओं के मुद्दे के साथ प्राप्त कर सकते हैं, उदाहरण के लिए प्रति दिन एक तालिका / सप्ताह। SQLite भी आपको अलग-अलग डेटाबेस फ़ाइलों में तालिकाओं को विभाजित करने की अनुमति देता है और फिर ATTACH DATABASEसभी तालिकाओं (हालांकि 62 डेटाबेस तक सीमित) के साथ एक वर्चुअल डेटाबेस कनेक्शन बनाने के लिए उपयोग करता है।
एलिक्स एक्सल

3

मुझे लगता है कि (संख्या 1 में) वेबसर्वर ग्राहकों के हंटर्स की सेवा डेटाबेस के एकल कनेक्शन के साथ बैकएंड पर दिखाई देता है, है ना?

इसलिए डेटाबेस में कोई समवर्ती पहुँच नहीं है इसलिए हम कह सकते हैं कि डेटाबेस 'सिंगल यूज़र मोड' में काम कर रहा है। ऐसी परिस्थिति में मल्टी-यूजर एक्सेस को डिस्कस करने का कोई मतलब नहीं है और इसलिए SQLite किसी भी अन्य सर्वरबेस डेटाबेस के रूप में भी काम करता है।


1
Thx GateKiller, लेकिन कृपया "कम वॉल्यूम वेबसाइट" निर्दिष्ट करें।
बर्फ

3

इस पर इस तरीके से विचार करें। हर बार जब कोई इसका उपयोग करता है तो SQL Lite लॉक हो जाएगा (SQLite पढ़ने पर लॉक नहीं होता)। इसलिए यदि आपका वेब पेज या एक अनुप्रयोग जिसमें कई समवर्ती उपयोगकर्ता हैं, तो SQLLite के साथ एक समय में आपके ऐप का उपयोग किया जा सकता है। तो ठीक है एक स्केलिंग मुद्दा है। यदि इसका एक व्यक्ति आवेदन एक संगीत पुस्तकालय कहता है जहां आप सैकड़ों शीर्षक, रेटिंग, जानकारी, उपयोग, खेल, खेल समय रखते हैं, तो SQL लाइट खूबसूरती से हजारों रिकॉर्ड बनाएगा यदि लाखों रिकॉर्ड नहीं हैं (हार्ड ड्राइव तैयार)

दूसरी ओर MySQL सर्वर ऐप्स के लिए अच्छी तरह से काम करता है जहां सभी लोग इसे समवर्ती रूप से उपयोग करेंगे। यह लॉक नहीं है और यह आकार में काफी बड़ा है। इसलिए आपकी संगीत लाइब्रेरी के लिए MySql खत्म हो जाएगा क्योंकि केवल एक व्यक्ति इसे देखेगा, UNLESS यह एक साझा संगीत लाइब्रेरी है जहां हजारों लोग इसे जोड़ते हैं या अपडेट करते हैं। तब MYSQL उपयोग करने वाला होगा।

तो सिद्धांत में MySQL बेहतर है तो Sqllite कारण यह म्यूटेंट उपयोगकर्ताओं को संभाल सकता है, लेकिन एकल उपयोगकर्ता ऐप के लिए ओवरकिल है।


5
s / इसका उपयोग करता है / इसे लिखता है। sqlite पढ़ने पर लॉक नहीं है।
ग्रेग लिंड

5
ठीक है, आपके उत्तर की गलत व्याख्या आसानी से की जा सकती है। केवल लिखने के अनुरोध पर SQLite ताले । हम SQLite का उपयोग 50GB से अधिक चिकित्सा डेटा के साथ संबंधपरक रूप में कर रहे हैं और ब्राउज़िंग और क्वेरी के लिए एक साथ सैकड़ों वेब क्लाइंट की सेवा कर रहे हैं। इसका रीड परफॉर्मेंस हाल के MySQL से कभी खराब नहीं है।
बर्क डी। डेमिर

3
SQLite की तुलना में MySQL का MyISAM समवर्ती अभिगम के लिए ज्यादा बेहतर नहीं है। MySQL तालिका-स्तर के ताले का उपयोग करता है, और कुछ मामलों को छोड़कर समवर्ती लेखन नहीं करेगा जहां MyISAM का लेआउट इष्टतम है। जब तक आप InnoDB के लिए नहीं जाते हैं (जिसमें कभी-कभी सिकुड़ती डेटाफ़ाइल जैसी अपनी समस्याएं हैं), तो आप MySQL के साथ बहुत बेहतर नहीं हो सकते हैं।
कोर्नेल जूएल 23'09

1

SQLite की वेबसाइट (जिस भाग को आपने संदर्भित किया है) इंगित करता है कि इसका उपयोग कई बहु-उपयोगकर्ता स्थितियों के लिए किया जा सकता है।

मैं कहूंगा कि यह काफी हद तक संभाल सकता है। मेरे अनुभव में यह हमेशा बहुत तेज रहा है। बेशक, आपको अपनी तालिकाओं को अनुक्रमित करने की आवश्यकता है और जब इसके खिलाफ कोडिंग की जाती है, तो आपको यह सुनिश्चित करने की आवश्यकता है कि आप पैरामीटाइज्ड प्रश्नों और पसंद का उपयोग करें। मूल रूप से वही सामान जो आप प्रदर्शन को बेहतर बनाने के लिए किसी भी डेटाबेस के साथ करेंगे।


और लेनदेन का उपयोग करें। यह SQLite के लिए महत्वपूर्ण है।
कोर्नेल

-1

यह वास्तविक SQL सर्वर की जाँच के लायक हो सकता है , जो कि SQLite पर बनाया गया एक डेटाबेस सर्वर है।


7
मुझे नहीं लगता कि "रियल SQL सर्वर" के लिए $ 299 खर्च करने वाले किसी भी साइट वारंट को ज्यादातर साइटों को न तो पर्याप्त ट्रैफ़िक मिलता है और न ही SQLLite की सीमा तक पहुंचना शुरू होता है।
djangofan
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.