2011-04-29 9 views
29

MySQL में, मेरे पास दो अलग-अलग डेटाबेस हैं - चलो उन्हें A और B पर कॉल करें।MySQL - पायथन का उपयोग कर विभिन्न सर्वरों पर डेटाबेस के बीच जुड़ता है?

डेटाबेस A सर्वर पर रहता है, जबकि डेटाबेस B सर्वर server2 पर रहता है।

दोनों सर्वर {A, B} शारीरिक रूप से एक दूसरे को के करीब हैं, लेकिन विभिन्न मशीनों पर हैं और अलग अलग कनेक्शन मानकों (अलग उपयोगकर्ता नाम, अलग पासवर्ड आदि) की है।

ऐसे मामले में, डेटाबेस A डेटाबेस में मौजूद किसी तालिका के बीच एक संयोजन करने के लिए डेटाबेस B में मौजूद तालिका में एक प्रदर्शन करना संभव है?

यदि हां, तो मैं python में प्रोग्रामेटिक रूप से इसके बारे में कैसे जा सकता हूं? (मैं डाटाबेस में से प्रत्येक के साथ अलग-अलग बातचीत करने के लिए python के MySQLDB का उपयोग कर रहा हूं)।

+0

क्या बेहतर होगा यदि आप अलग-अलग rdbms द्वारा होस्ट किए गए एकाधिक डेटाबेस पर एक वितरित लेनदेन करने का मतलब मांगते? –

+2

इसका संदर्भ लें यह सहायक होगा: http://winashwin.wordpress.com/2012/08/22/mysql-federated-table/ –

उत्तर

22

FEDERATED Storage Engine का उपयोग करने का प्रयास करें।

युक्ति: यह दो डेटाबेस के बीच डेटा पुनः प्राप्त करने के लिए एक डीबीएमएस उपयोग करने के लिए, उदाहरण के लिए आप जुड़ा हुआ सर्वर एमएस एसक्यूएल सर्वर में का उपयोग कर इसे कर सकता है (sp_addlinkedserver संग्रहीत प्रक्रिया देखें) संभव है। प्रलेखन से:

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

+0

आह हे। यह मुझ पर एक नया है। +1 – Jaydee

+0

दिलचस्प।जब मैं 'फ़ेडरेटेड स्टोरेज इंजन' बनाता हूं, तो मुझे डेटाबेस में 'लिंक' करने की ज़रूरत होती है जहां डेटा वास्तव में है, है ना? ऐसे मामले में, क्या कनेक्शन विवरण डेटाबेस में सुरक्षित रूप से सहेजे गए हैं जिनके कनेक्शन बनाते हैं? – user3262424

+1

@ user540009 मुझे मैनुअल में बहुत कुछ नहीं मिला है। लेकिन कुछ है - http://dev.mysql.com/doc/refman/5.1/en/federated-create-server.html। यह किसी अन्य सिस्टम तालिका 'mysql'.'servers' में कनेक्शन गुणों को स्टोर करने की अनुमति देता है। – Devart

3

यह बहुत आसान है - एक सर्वर से डेटा का चयन करें, किसी अन्य सर्वर से डेटा का चयन करें और पायथन का उपयोग करके कुल मिलाकर। यदि आप JOIN के साथ SQL क्वेरी रखना चाहते हैं - स्थानीय SQLite डेटाबेस में दोनों सर्वरों से अलग-अलग तालिकाओं में परिणाम डालें और के साथ SELECT लिखें।

+1

लेकिन आपको हर बार 2 सर्वरों से लाखों पंक्तियों का चयन करना पड़ सकता है, किस तरह के नकली जॉइन का लाभ यह नहीं है? – Flo

+1

यह सही है, लेकिन अगर आपको किसी तरह की रिपोर्ट के लिए कुछ डेटा एकत्र करने की आवश्यकता है - यह त्वरित और गंदा समाधान है। – Anatolij

+0

@ फ़्लो फ़ेडरेटेड स्टोरेज इंजन में भी शामिल होने के लिए डेटा है, भारी तालिका के मामले में प्रदर्शन समस्या भी बनी रहती है। मैं फ़ेडरेटेड स्टोरेज इंजन की बजाय इस विधि का उपयोग करने का विकल्प चुनूंगा। –

3

नहीं। जैसा आप चाहें शामिल करना संभव नहीं है। लेकिन आप अलग-अलग डेटाबेस के लिए सर्वरों में से किसी एक को दोहराने के द्वारा कुछ हल करने में सक्षम हो सकते हैं।

एक डेटा सेट MySQL की एक प्रति के नियंत्रण में है और अन्य डेटासेट MySQL की दूसरी प्रति के नियंत्रण में है। क्वेरी केवल (MySQL) सर्वरों में से एक द्वारा संसाधित की जा सकती है।

यदि आप पहले सर्वर पर दूसरे डेटाबेस की प्रतिलिपि बनाते हैं या इसके विपरीत (जो सबसे कम अपडेट प्राप्त करता है) तो आप कॉपी को अद्यतित रखने के लिए प्रतिकृति सेट अप कर सकते हैं। फिर आप इच्छित क्वेरी को चलाने में सक्षम होंगे।

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