2010-01-24 18 views
5

Django केवल सेटिंग.py में एक डेटाबेस का उपयोग करने की अनुमति देता है। क्या इससे आपको स्केलिंग से रोका जा सकता है? (लाखों उपयोगकर्ता)क्या आप वास्तव में Django के साथ स्केल कर सकते हैं ... दिया गया है कि आप केवल एक डेटाबेस का उपयोग कर सकते हैं? (Models.py और settings.py में)

+0

यदि आप वास्तव में अधिकतम प्रदर्शन के बारे में चिंतित हैं, तो आप एक ढांचे का उपयोग नहीं करना चाहते हैं। – JAL

+2

@ कोड डक - ध्यान दें कि स्केलेबिलिटी और अधिकतम प्रदर्शन के बीच * अंतर है।ज्यादातर समय, ढांचे शायद उन्हें स्केलेबिलिटी की मदद से ज्यादा नुकसान पहुंचाते हैं क्योंकि वे आपको उच्च स्तरीय मुद्दों पर ध्यान केंद्रित करने की अनुमति देते हैं। और ऐसे कई बड़े उद्यम हैं जो डीजेंगो का उपयोग करके स्केल करते हैं। –

+0

इसमें कोई संदेह नहीं है कि यह विकास को सहायता प्रदान करता है। हालांकि, मैंने उन साइटों के बारे में सुना है जिन्हें उनके ट्रैफिक वास्तव में बंद होने के बाद प्रदर्शन के लिए फिर से लिखना पड़ा था। एक साधारण साइट पर मेरे परीक्षणों में, एक ही डीबी का उपयोग करके, सीधे कैश वाला सीएचपी PHP के साथ Django के रूप में 3 गुना अधिक req/sec की सेवा कर सकता है। – JAL

उत्तर

8

डेटाबेस आपकी बाधा नहीं है।

अपने ब्राउज़र को ध्यान से देखें।

एचटीएमएल के प्रत्येक पृष्ठ के लिए आप 8 अन्य फाइलें (औसतन) भेज रहे हैं, जिनमें से कुछ काफी बड़े हो सकते हैं। ये आपके जेएस, सीएसएस, ग्राफिक्स इत्यादि हैं

वास्तविक प्रदर्शन बाधा ब्राउज़र उन फ़ाइलों का अनुरोध कर रहा है और बाइट्स को स्वीकार कर रहा है ... l ... o ... w ... l ... y ...

स्केल करने के लिए, फिर, ऐसा करें।

  1. वैकैमोल जैसे शुद्ध सॉफ़्टवेयर समाधान के साथ संतुलित कई फ्रंट-एंड का उपयोग करें। http://www.backhand.org/wackamole/

  2. "अन्य" फ़ाइलों को भेजने के लिए स्क्विड जैसे प्रॉक्सी सर्वर का उपयोग करें। वे काफी हद तक स्थिर हैं। यह वह जगह है जहां काम के 7/8 वें ग्राहक को डाउनलोड किया जाता है। इन अधिकारों को पाने पर चिल्लाओ मत।

  3. डीबी प्रश्नों के आधार पर गतिशील HTML का दुर्लभ - टुकड़ा बनाने के लिए एकाधिक, समवर्ती mod_wsgi/Django का उपयोग करें। सुनिश्चित करें कि mod_wsgi डिमन मोड में है ताकि आप अपाचे के लिए कई Django सर्वर उपलब्ध कर सकें। आपको जितनी जरूरत हो उतनी बनाएं। वे सभी समान हैं, सभी समानांतर में हैं, और सभी Wackamole द्वारा साझा किए जाते हैं।

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

आपको यह स्केल अच्छी तरह से मिलेगा। आप पाएंगे कि भार स्क्विड, अपाचे, Django daemons और वास्तविक डेटाबेस के बीच अच्छी तरह से साझा किया जाता है। आपको यह भी पता चलेगा कि भार के प्रत्येक भाग (उबाऊ स्थिर भागों से लेकर रोचक डेटाबेस क्वेरी तक) अलग-अलग और समवर्ती रूप से होता है।

अंत में, Schlossnagle की पुस्तक खरीदें। http://www.amazon.com/Scalable-Internet-Architectures-Theo-Schlossnagle/dp/067232699X

+0

यह अच्छी सलाह है, लेकिन ऐसा कुछ हद तक परिस्थिति प्रतीत होता है। एक निश्चित बिंदु पर, एक डेटाबेस होने के कारण स्केलेबिलिटी समस्या के लिए एक नुस्खा है। अनुमोदित, उस बिंदु तक पहुंचने के लिए कितना आसान है स्थिति पर निर्भर है। –

+0

@ जेसन बेकर: मैं नहीं देख सकता * क्यों * एक डेटाबेस को एक सीमा होना चाहिए। ओरेकल और डीबी 2 जैसे वाणिज्यिक उत्पादों के साथ, आपके पास एक एकल डेटाबेस हो सकता है जो एकाधिक प्रोसेसर (प्रत्येक कोर के साथ प्रत्येक) को फैलाता है। * एकल डेटाबेस * एक सीमा क्यों है? –

+0

@ एसएलॉट - सिंगल * कुछ * स्केलेबिलिटी के मामले में एक सीमा है। सबसे पहले, एक डेटाबेस के साथ आपके पास विफलता का एक बिंदु है। दूसरा, यह केवल सीपीयू समय नहीं है जो डेटाबेस तक सीमित है। निपटने के लिए I/O मुद्दे भी हैं I उस ने कहा, यह बहुत संभव है (यहां तक ​​कि संभावित) कि आपको उस बिंदु पर स्केल करने की आवश्यकता नहीं है जहां यह एक मुद्दा बन जाता है। लेकिन यह * एक निश्चित बिंदु पर एक समस्या बन जाता है। –

0

यदि आपको पता चलता है कि डीबी आपके ऐप की बोतल है, और अब यह इसके आसपास है (कैशिंग का उपयोग करने की तरह) तो आपको अपने डीबी को भी स्केल करना चाहिए। Django के पास इस

3

लाखों उपयोगकर्ताओं को स्केलिंग पढ़ें डेटाबेस समस्या नहीं है, लेकिन लोड संतुलन और कैशिंग आदि के साथ तय किया गया है, ऊपर एस लॉट देखें।

स्केलिंग वास्तव में एक डेटाबेस समस्या हो सकती है। "शेरिंग" और एकाधिक डेटाबेस होने का एक समाधान हो सकता है, लेकिन डेटाबेस के संबंध में अभी भी एसक्यूएल के साथ यह मुश्किल है। लोकप्रिय समाधान "nosql" डेटाबेस के नए प्रकार हैं। लेकिन यदि आपको वास्तव में उन समस्याएं हैं, तो आपको गंभीर विशेषज्ञ सहायता की आवश्यकता है, न कि केवल स्टैक ओवरफ्लो दोस्तों से जवाब। :)

+0

मैं थोड़ी देर के लिए nosql समाधान की कोशिश कर रहा हूँ। मेरी परियोजनाओं में से एक उस बिंदु पर है जहां हम अपने पुराने डेटाबेस को बहुत से लिखने से हमारे डेटाबेस को मुक्त करने के लिए hbase/redis समाधान में लिख रहे हैं। हां, यह एक अच्छी समस्या है, लेकिन यह एक बहुत ही मजेदार प्रक्रिया नहीं है! – Gattster

1

पहले से ही कुछ महान उत्तर (एस।उदाहरण के लिए लोट), हालांकि मैंने सोचा कि मैं कुछ और चीजों के साथ में पाइप को:

तार्किक संचालन

मैं Order By या SQL Procedures के आकर्षण को समझने लेकिन आप केवल एक है के लिए डेटाबेस का उपयोग करने के लिए नहीं सुनिश्चित करें डेटाबेस लेकिन आपके पास एकाधिक django सर्वर हैं, यदि आप कर सकते हैं तो सर्वर इसे संभाल लें।

बेशक, यदि आप केवल एक निश्चित मानदंड (दिनांक) के अनुसार अंतिम दस पंक्तियां चाहते हैं, तो हर तरह से अनुरोध में इसे सटीक करें;) बस सुनिश्चित करें कि आपके डेटाबेस को संचालन के साथ अधिभारित न करें कहीं। समस्या

MySQL और Oracle पैमाने काफी अच्छी तरह से साथ हार्डवेयर के लिए

फेंक अधिक हार्डवेयर, आप और अधिक हार्डवेयर जोड़कर शुरू कर सकते थे आपको प्रदर्शन की छोटी सी समस्या है।

स्प्लिट अपने डेटाबेस

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

ट्यूनिंग पर विचार करें, और आपके अनुरोध के लिए बाहर देखते हो/सूचकांक

आप विशेषज्ञों की आवश्यकता होगी यहाँ सलाह देते हैं, लेकिन मैं अनुभव है कि एक भी बुरी तरह से देखते अनुरोध कहर बरपाने ​​सकता से बता सकते हैं ... और यह है पता लगाने में काफी मुश्किल है। निदान/ठीक ट्यूनिंग के उदाहरण के लिए आप Ask Tom website पर विचार कर सकते हैं।

अलगाव में अपने टेबल वास्तुकला पर फैसला मत करो, लेकिन अनुरोधों

श्रेणीबद्ध अनुरोधों पर विचार करते हैं और कई मिलती है वास्तव में महंगा हो सकता है। आपको पूरी तरह से सामान्यीकृत संबंध स्कीमा बनाने की आवश्यकता नहीं है और डेटाबेस के सामने आने वाले अनुरोधों के प्रकार को बेहतर तरीके से समायोजित करने के लिए कुछ denormalization पर विचार कर सकते हैं।

बस विचार :)

1

सलाह के कुछ विविध टुकड़े के एक जोड़े:

  • मैं हैरान कोई भी अभी तक इस का उल्लेख कर रहा हूँ। Memcached का प्रयोग करें। यदि आपको कई बार दोहराए जाने वाले प्रश्न मिल रहे हैं (जो कि अधिकांश वेबएप करते हैं), इससे बड़ा अंतर हो सकता है।

  • ओरेकल के failover and load balancing का उपयोग करने पर विचार करें। यह आपको एक एकल डीबी कनेक्शन पर एकाधिक डेटाबेस के लिए समर्थन जोड़ने की अनुमति देता है।

  • विचार करने की एक और बात system similar to FriendFeed's का उपयोग कर रही है। यह समस्या को हल करता है "हम दुनिया को रोकने के बिना डेटाबेस में परिवर्तन कैसे करते हैं?" सभी से ज्यादा।

संबंधित मुद्दे

 संबंधित मुद्दे