PostgreSQL के मूल प्रतिकृति की तुलना MySQL से कैसे की जाती है?
मुझे पता है कि अतुल्यकालिक प्रतिकृति को सिंक की तुलना में लंबे समय तक समर्थन दिया गया है, जो हाल ही में है। क्या वास्तविक परियोजनाओं में उपयोग किए जाने के लिए सिंक्रोनस विश्वसनीय है?
PostgreSQL के मूल प्रतिकृति की तुलना MySQL से कैसे की जाती है?
मुझे पता है कि अतुल्यकालिक प्रतिकृति को सिंक की तुलना में लंबे समय तक समर्थन दिया गया है, जो हाल ही में है। क्या वास्तविक परियोजनाओं में उपयोग किए जाने के लिए सिंक्रोनस विश्वसनीय है?
जवाबों:
हाँ, यह उत्पादन-तैयार है और व्यापक रूप से उपयोग किया जाता है। हरोकू अनुयायी PostgreSQL के अंतर्निहित async प्रतिकृति पर आधारित हैं, जैसे कि AWS RDS स्टैंडबाय हैं और प्रतिकृतियां पढ़ते हैं। स्ट्रीमिंग प्रतिकृति का उपयोग लगभग सार्वभौमिक रूप से PostgreSQL के साथ किया जाता है।
प्रतिकृति का सेटअप बिल्कुल प्यारा नहीं है, लेकिन repmgr जैसे उपकरण इसके साथ कुछ हद तक मदद करते हैं, और यह प्रत्येक प्रमुख रिलीज के साथ धीरे-धीरे सुधार कर रहा है। Pg_basebackup के लिए स्ट्रीमिंग प्रतिकृति (और दूसरे स्टैंडबाय से ऐसा करने) के लिए सिस्टम की एक प्रति लेने की क्षमता एक बड़ी मदद है।
सामान्य तौर पर, PostgreSQL में बस एक फीचर जारी नहीं किया जाएगा जब तक कि यह तैयार न हो जाए। कीड़े होते हैं, किसी भी सॉफ़्टवेयर की तरह, लेकिन वे आमतौर पर पहचाने जाने के तुरंत बाद तय हो जाते हैं। वास्तव में प्रमुख नई विशेषताओं में कभी-कभी बग और मुद्दों की खोज होती है .0 रिलीज के बाद, लेकिन अगर उन्हें ठीक करना एक उच्च प्राथमिकता है; कीड़े अभी आसपास नहीं बचे हैं।
मैं स्ट्रीमिंग प्रतिकृति के साथ किसी भी गंभीर मुद्दों के बारे में पता नहीं कर रहा हूँ - सिंक या async - और न ही मैंने किसी रिपोर्ट को काफी समय से देखा है। वे उन प्रमुख संस्करणों के .0 रिलीज में Pg के सामान्य मानक से कम स्थिर थे जिन्हें वे पेश किए गए थे, लेकिन दोनों ही जल्दी परिपक्व हो गए और पूरी तरह से तैयार हैं।
(अपडेट: 9.3.4 से पहले के नए 9.3 संस्करण में एक विशिष्ट बग था जो कुछ मामलों में प्रतिकृति समस्याओं का कारण बना। 9.3 के उपयोगकर्ताओं को 9.3.4 में तुरंत अपडेट करना चाहिए। पुराने संस्करण प्रभावित नहीं हैं।)
केवल मैं जो उल्लेख करना चाहता हूं वह सिंक्रोनस प्रतिकृति के साथ एक मामूली विस्तार है: यदि आप मास्टर पर प्रतिबद्ध करते हैं, तो क्वेरी को रद्द करने के बाद इसे रद्द कर दें, जबकि यह पुष्टि करने के लिए प्रतिकृति की प्रतीक्षा करता है, इसे दोहराया जाने से पहले ही मास्टर के रूप में माना जाता है। उत्तर की प्रतिक्षा करते समय आपको गुरु को पुनः आरंभ करने से समान प्रभाव प्राप्त होता है। व्यवहार में यह एक अप्रासंगिकता है, लेकिन यह एकमात्र ऐसी समस्या है जिसके बारे में मैं सोच सकता हूं।
Pg की मूल प्रतिकृति MySQL के लिए काफी भिन्न है।
MySQL तार्किक प्रतिकृति का उपयोग करता है जहां यह तालिका डेटा, तालिका संरचना आदि के लिए किए गए तार्किक परिवर्तनों को भेजता है, और प्रतिकृति उन परिवर्तनों को लागू करती है।
PostgreSQL की प्रतिकृति निचले स्तर पर है (9.5 और नीचे में; भविष्य के संस्करण तार्किक प्रतिकृति भी जोड़ सकते हैं)। यह उन ब्लॉकों को भेजता है जो तालिकाओं में बदल गए हैं। यह सरल है, सही प्राप्त करना आसान है, और प्रतिकृति सर्वर पर कम लोड लगाता है, लेकिन अधिक नेटवर्क बैंडविड्थ का उपभोग करता है और मास्टर पर अधिक संग्रहण की आवश्यकता होती है, ताकि अभी तक-प्रतिकृति परिवर्तन न हो। यह वाल-आर्काइविंग कमबैक के साथ स्ट्रीमिंग प्रतिकृति का उपयोग करने के लिए सबसे अच्छा कॉन्फ़िगर किया गया है, जिससे यह MySQL की तुलना में कॉन्फ़िगर करने के लिए अधिक जटिल है। यह VACUUM गतिविधि जैसे निम्न-स्तर के परिवर्तनों की प्रतिकृति करता है, न कि केवल टपल परिवर्तन, प्रतिकृति की ऑन-डिस्क स्थिति को मास्टर के समान बनाए रखता है। यह केवल एक डेटाबेस की नकल करने में असमर्थ है; पूरे सिस्टम को दोहराया जाना चाहिए, जो कि यदि आपके पास एक बड़ा, उच्च मंथन और महत्वहीन डेटाबेस और एक छोटा, कम-मंथन और महत्वपूर्ण डेटाबेस है, तो निराशा हो सकती है।
सब सब में, यह निर्भर करता है कि आप इसके साथ क्या करना चाहते हैं।
मैं PostgreSQL की प्रतिकृति को बैकअप, उच्च उपलब्धता और आपदा वसूली के लिए उपयोग किए जाने वाले प्रतिकृतियों के लिए बेहतर रूप में देखता हूं। विशेष रूप से इसलिए जब समय वसूली (PITR) में बिंदु के साथ संयुक्त ।
दूसरी ओर, यह केवल-पढ़ने के लिए रिपोर्टिंग प्रतिकृतियों के लिए उतना अच्छा नहीं है क्योंकि लंबे लेनदेन को चलाने के दौरान प्रतिकृति डेटा के अनुप्रयोग में देरी करने की आवश्यकता है, इसका मतलब है कि आपको या तो इसे बहुत लंबे समय तक चलने वाले प्रश्नों को रद्द करने या मास्टर के पीछे गिरने की आवश्यकता है, खपत मास्टर पर अधिक डिस्क स्थान और इसे बनाए रखने के लिए कड़ी मेहनत करने के लिए मजबूर करना।
PostgreSQL में तार्किक प्रतिकृति को सक्षम करने के लिए काम चल रहा है , जहां तालिका संरचना, तालिका सामग्री आदि के लिए तार्किक परिवर्तन उनके ऑन-डिस्क स्थिति के बजाय दोहराया जाता है। पीजी की कैटलॉग डिज़ाइन और उपयोगकर्ता-परिभाषित सब कुछ के लिए समर्थन यह काफी जटिल कार्य करता है। 9.4 में से कुछ के लिए जमीनी कार्य किया गया है, लेकिन 9.6 या बाद में पूर्ण तार्किक प्रतिकृति के उपयोग योग्य नहीं है।