मैं मास्टर है मास्टर फ़ॉलबैक। वर्तमान में मैं पढ़ रहा हूँ और केवल मास्टर डीबी के लिए लेखन, लेकिन मेरे डैशबोर्ड काफी गहन क्वेरी कर रहे हैं। मैं एक विकल्प है, जहां में मैं डेटाबेसDjango एकाधिक डेटाबेस यदि दास नीचे है
DATABASES = {
'default_slave': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'application',
'USER': 'root',
'PASSWORD': '',
'HOST': '',
'PORT': '3306',
},
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'application',
'USER': 'root',
'PASSWORD': '',
'HOST': '',
'PORT': '3306',
},
}
डैशबोर्ड, रिपोर्ट और विभिन्न अन्य क्षुधा के लिए
निम्नलिखित की तरह परिभाषित कर सकते हैं के लिए खोज रहा था, मुझे क्या करना चाहते हैं:
कोशिश कनेक्शन: default_slave: का उपयोग कर default_slave
यदि default
का उपयोग करने योग्य पहुंच योग्य है, तो दास ऊपर है, तो दास डेटाबेस से रिपोर्ट प्राप्त करें, अगर मास्टर डेटाबेस से रिपोर्ट प्राप्त नहीं करते हैं।
पकड़ने, है गुलाम ऊपर या नीचे हो सकता है, और मैं इस गतिशील रूप से जो डेटाबेस को लाते समय रिपोर्ट, rechability के आधार पर के लिए उपयोग करने के लिए के बारे में चयन होना चाहता हूँ।
क्या यह संभव है? मैं पहले से कनेक्शन का परीक्षण और आगे बढ़ने कर सकते हैं?
इस मैं लिखते थे और sync_db मास्टर में, और हमेशा की तरह, दास से पढ़ा करता है, तो गुलाम निर्भर है साथ।
raw queries
के लिए कुछ समाधान/संकेत की जरूरत है और साथ ही orm queries
रूटर अवधारणा अच्छा लगता है, लेकिन गुलाम लग नहीं रहा पर वापस आने, मैं संभावना पता नहीं है।
अद्यतन
कैसे बहु-डेटाबेस के बारे में जाने के लिए
डेटाबेस
DATABASES = {
'default_slave': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'application',
'USER': 'root',
'PASSWORD': '',
'HOST': '',
'PORT': '3306',
},
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'application',
'USER': 'root',
'PASSWORD': '',
'HOST': '',
'PORT': '3306',
},
}
'linux': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'application',
'USER': 'root',
'PASSWORD': '',
'HOST': '',
'PORT': '3306',
},
}
'linux_slave': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'application',
'USER': 'root',
'PASSWORD': '',
'HOST': '',
'PORT': '3306',
},
}
'mac': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'application',
'USER': 'root',
'PASSWORD': '',
'HOST': '',
'PORT': '3306',
},
}
'mac_slave': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'application',
'USER': 'root',
'PASSWORD': '',
'HOST': '',
'PORT': '3306',
},
}
'pc': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'application',
'USER': 'root',
'PASSWORD': '',
'HOST': '',
'PORT': '3306',
},
}
'pc_slave': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'application',
'USER': 'root',
'PASSWORD': '',
'HOST': '',
'PORT': '3306',
},
}
अब, मैं 1. स्टेटिक डाटा 2 की है।गतिशील डेटा
स्टेटिक डाटा 'डिफ़ॉल्ट' जो 'default_slave'
गतिशील डेटा के लिए करने के लिए दोहराया जा जाएगा में संग्रहित किया जाना है, क्वेरी पहले न्यायाधीश करने जहां गतिशील डेटा झूठ बोल रही हो सकता है की जरूरत है: में 'मैक' या 'पीसी' में या 'लिनक्स' में
कि प्राप्त करने के लिए, मैं एक क्षेत्र 'स्थिर तालिका' में कहा: 'query_on' जो होता है या तो [ 'मैक' या 'linux' या 'पीसी']
अब, क्वेरी सेट का उपयोग करते हुए, मैं बस static = Static.objects.get(pk = 1)
012 लिख रहा हूं dynamic = Dynamic.objects.get(static = static).using(alias=query_on)
यह अच्छी तरह से काम करता है, डेटाबेस के लिए क्वेरी मार्गों इसकी आवश्यकता है निष्पादित करने के लिए, यहाँ मैं न्याय की जरूरत है:
<'query_on'>_slave
हैं: उपयोग:<'query_on'>_slave
या- कनेक्शन है यदि
<'query_on'>_slave
: कनेक्शन डाउन है: उपयोग करें:<'query_on'>
इसके बारे में कैसे जाना है ? आवेदन के लिए
अधिक जानकारी:
- है एक डेटाबेस: डिफ़ॉल्ट (विन्यास & एनालिटिक्स डेटाबेस): विन्यास डेटा और रिपोर्ट का विश्लेषण डेटा
- 20 डेटाबेस रहे हैं बनाए रखने के लिए (कच्चे डेटाबेस): उदाहरण के तौर पर: मैक, लिनक्स, रेल, विंडोज़, पीसी .... (उदाहरण का नाम): कच्चे डेटा को इकट्ठा करने के लिए, जो विश्लेषिकी
- प्रत्येक डेटाबेस में एक या एकाधिक गुलाम हैं, नामकरण सम्मेलन होगा हो: default_slave _0, default_slave_1, अन्य डेटाबेस के लिए default_slave_2 और इतनी के रूप में अच्छी तरह से
अब विश्लेषण डेटा पहले 5 मिनट, 30 मिनट, 1 घंटे के प्रति पूछे जाने की आवश्यकता है .... और उस क्वेरी विशिष्ट के लिए बाहर भेजे जाने की आवश्यकता डेटाबेस, क्योंकि प्रत्येक डेटाबेस विश्लेषिकी के लिए आवश्यक विशिष्ट डेटासेट नहीं ले जाएगा।
कि ऐसा करने के लिए, हम ((गुलाम भाग सवाल यह है कि) डिफ़ॉल्ट या उसके दास में से किसी एक)
- करने की जरूरत है एक बार हम विन्यास है, हम आसानी से देखें कि "कच्चे" डेटा
- कच्चे डेटा के लिए क्वेरी हो सकता है, और परिणामों को इकट्ठा कर सकता है और विश्लेषण कर सकता है -> इसे "डिफ़ॉल्ट" डेटाबेस में संग्रहीत करें।
अब सभी 30 (कच्चे) और 1 डिफ़ॉल्ट डेटाबेस को "सिंक" की आवश्यकता होगी, क्योंकि हम सभी नोड्स में एक ही डेटा abse संरचना को बनाए रखते हैं।
अब, चूंकि हम सभी डेटाबेस पर सीपीयू स्पाइक्स देख रहे हैं, इसलिए "कच्चे" डेटा के लिए क्वेरी करने के लिए "गुलाम" डेटाबेस का उपयोग करना समझ में आता है।
इसलिए using
की आवश्यकता।मैं कल्पना नहीं कर सकता कि कैसे राउटर यहां मदद करेंगे?
धन्यवाद है। यही कारण है कि चाहिए करने के काम करते हैं। मुझे क्या करना योजना बना रहा हूँ, है 'का उपयोग करना (उर्फ = defualt_slave)' यदि कनेक्शन काम करता है, शांत नहीं है, '= default' (_slave साथ विभाजन) का उपयोग कर। कि एक quic होगा के पकाना – Joddy
कृपया प्रश्न में अद्यतन की जांच करें। मैं अभी तक समस्या को हल करने में सक्षम नहीं हूं, राउटर का उपयोग करके 'क्वेरी सेट' का उपयोग करने पर 'समझ नहीं आता है'। @krimkus – Joddy
इसके बजाय '' query_on' using' संपत्ति को पास करने का, रूटर में है कि मूल्य को देख, जब नहीं आप क्वेरीसमूह बनाने का प्रयास करें। इस तरह, आप राउटर को अभी भी तय कर सकते हैं कि डीबी का उपयोग कैसे किया जाए। – krimkus