PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

PostgreSQL स्ट्रीमिंग प्रतिकृति बनाम तार्किक प्रतिकृति

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

और निश्चित रूप से, एक भूखा इंसान सही खाने के लिए प्रवृत्त होता है?

फिर भी, जब प्रौद्योगिकी की बात आती है, विशेष रूप से SQL (PostgreSQL) में, मैं सीखने की आशा के साथ, कई बार अपरिचित क्षेत्रों में पूर्ण गति (खोज की मेरी परिभाषा) को ठोकर खा जाता हूं। सीखने का अनुभव से बेहतर तरीका और क्या हो सकता है?

तो पृथ्वी पर इस जुआ का PostgreSQL में तार्किक और स्ट्रीमिंग प्रतिकृति से क्या लेना-देना है?

मैं इन क्षेत्रों में शून्य ज्ञान के साथ एक पूर्ण नौसिखिया हूँ। हां, मुझे पोस्टग्रेज के इस क्षेत्र में उतनी ही समझ है जितनी मुझे खगोल भौतिकी में है।

क्या मैंने उल्लेख किया कि मुझे शून्य ज्ञान था?

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

संभवतः, इस विशेष क्षेत्र (जैसे मैं) में कम जानकार अन्य लोगों को इस ब्लॉग पोस्ट से लाभ होगा।

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

आधार परिभाषाओं की एक जोड़ी

शब्द के व्यापक अर्थ में, प्रतिकृति का क्या अर्थ है?

विक्षनरी पर परिभाषित प्रतिकृति का यह कहना है:

"प्रक्रिया जिसके द्वारा किसी वस्तु, व्यक्ति, स्थान या विचार की नकल या नकल की जा सकती है।"

फिर भी, 5वीं सूचीबद्ध वस्तु इस ब्लॉग पोस्ट पर अधिक लागू होती है और मुझे लगता है कि हमें इसे भी देखना चाहिए:

"(कंप्यूटिंग) एक कंप्यूटर या सर्वर में एक डेटाबेस को दूसरे में डेटाबेस में लगातार इलेक्ट्रॉनिक डेटा की प्रतिलिपि बनाने की प्रक्रिया ताकि सभी उपयोगकर्ता समान स्तर की जानकारी साझा कर सकें। सिस्टम की गलती सहनशीलता में सुधार करने के लिए प्रयुक्त होता है।"

अब कुछ ऐसा है जिसमें हम प्रवेश कर सकते हैं। एक सर्वर या डेटाबेस से दूसरे में डेटा कॉपी करने का जिक्र? अब हम परिचित क्षेत्र में हैं...

तो, उस परिभाषा से हम जो जानते हैं उसे जोड़ते हुए, स्ट्रीमिंग प्रतिकृति और तार्किक प्रतिकृति की परिभाषाएं क्या हैं?

आइए देखें कि PostgreSQL विकी की क्या पेशकश है:

स्ट्रीमिंग प्रतिकृति:"लगातार शिप करने की क्षमता प्रदान करता है और वाल XLOG रिकॉर्ड को कुछ संख्या में स्टैंडबाय सर्वरों पर लागू करता है ताकि उन्हें चालू रखा जा सके।

और PostgreSQL दस्तावेज़ीकरण में तार्किक प्रतिकृति के लिए यह परिभाषा है:

"तार्किक प्रतिकृति उनकी प्रतिकृति पहचान (आमतौर पर एक प्राथमिक कुंजी) के आधार पर डेटा ऑब्जेक्ट्स और उनके परिवर्तनों को दोहराने की एक विधि है। हम भौतिक प्रतिकृति के विपरीत तार्किक शब्द का उपयोग करते हैं, जो सटीक ब्लॉक पते और बाइट-बाय-बाइट प्रतिकृति का उपयोग करता है। "

अध्याय 19.6 आधिकारिक दस्तावेज़ीकरण से प्रतिकृति अच्छाइयों से भरी हुई है, इसलिए सुनिश्चित करें और उस स्रोत पर जाएँ।

नीचे, मैं आम आदमी की शर्तों में अंतर को रिले करने का प्रयास करूँगा। (याद रखें, अगर मैं ठोकर खाता हूं, तो मैं नौसिखिया हूं।) यह एक चरम 'उच्च-स्तरीय' सिंहावलोकन है।

तार्किक प्रतिकृति

एक "स्रोत" डेटाबेस क्रिएट पब्लिकेशन कमांड का उपयोग करके एक प्रकाशन बनाता है। (मैं इसे सरल शब्दों में 'प्रेषक' मानता हूं।)

दस्तावेज़ीकरण इसे प्रकाशक के रूप में बताता है।

इस प्रकाशक डेटाबेस में वह डेटा है जिसे हम दोहराना चाहते हैं। फिर भी, हमारे पास दोहराने के लिए कुछ होना चाहिए और यही वह जगह है जहां प्रकाशक समकक्ष आते हैं। 'ग्राहक'। ध्यान दें कि मैंने एक वैकल्पिक बहुवचन रूप में फेंक दिया क्योंकि ऑनलाइन खोजों के माध्यम से मुझे जो मिला है, वह कई ग्राहकों के लिए एक व्यावहारिक सेटअप है।

एक 'ग्राहक' (इसे प्रतिकृति डेटाबेस के रूप में भी माना जा सकता है) कनेक्शन जानकारी को परिभाषित करने वाले "स्रोत" डेटाबेस (प्रकाशक) के लिए एक सदस्यता बनाता है, और किसी भी प्रकाशन की सदस्यता लेता है।

एक ग्राहक के लिए एक प्रकाशक होना भी संभव है, अपना स्वयं का प्रकाशन बनाना जिसे अन्य ग्राहक सदस्यता ले सकते हैं।

अब क्या होता है?

प्रकाशक पर होने वाला कोई भी डेटा परिवर्तन ग्राहक को भेजा जाता है। बॉक्स में से कौन सा सब कुछ है, लेकिन इसे कुछ कार्यों (यानी, INSERT, UPDATE या DELETE) तक कॉन्फ़िगर या सीमित किया जा सकता है।

उच्च स्तरीय उदाहरण:

मान लीजिए कि हम प्रकाशक में किसी विशेष तालिका पर एक पंक्ति या एकाधिक पंक्तियों को अद्यतन करते हैं, तो उन अद्यतनों और परिवर्तनों को ग्राहक के उदाहरण पर या एकाधिक ग्राहकों पर दोहराया जाता है यदि उस प्रकार का कॉन्फ़िगरेशन लागू किया जाता है।

यहाँ कुछ बातें याद रखने योग्य हैं जिन्हें मैं उल्लेख करने योग्य महसूस कर रहा हूँ:

  • प्रकाशक डेटाबेस wal_level कॉन्फ़िगरेशन तार्किक पर सेट होना चाहिए।
  • तार्किक प्रतिकृति में कोई DDL (डेटा परिभाषा भाषा) कमांड नहीं है।
  • दस्तावेज़ीकरण में संघर्ष पृष्ठ से:"तार्किक प्रतिकृति सामान्य डीएमएल संचालन के समान व्यवहार करती है जिसमें डेटा अपडेट किया जाएगा, भले ही इसे ग्राहक नोड पर स्थानीय रूप से बदल दिया गया हो। यदि आने वाला डेटा किसी भी बाधा का उल्लंघन करता है तो प्रतिकृति बंद हो जाएगी। यह एक विरोध के रूप में जाना जाता है। अद्यतन या हटाएं संचालन की नकल करते समय, लापता डेटा एक संघर्ष उत्पन्न नहीं करेगा और इस तरह के संचालन को छोड़ दिया जाएगा। "
  • प्रकाशक तालिकाओं में स्वयं को पहचानने का एक तरीका होना चाहिए ("प्रतिकृति पहचान" कहा जाता है) ताकि उन प्रभावित पंक्तियों के लिए किसी भी प्रतिकृति (ओं) में डीएमएल (अद्यतन और हटाएं) संचालन को ठीक से दोहराने के लिए। यदि तालिका में प्राथमिक कुंजी है तो यह डिफ़ॉल्ट है (मुझे ध्वनि पसंद की तरह लगता है), लेकिन प्राथमिक कुंजी की अनुपस्थिति में, अन्य कॉन्फ़िगरेशन विकल्प उपलब्ध हैं। यदि कोई अन्य उम्मीदवार कुंजी मौजूद नहीं है (जिसे "पूर्ण" कहा जाता है) पूरी पंक्ति का उपयोग किया जा सकता है, हालांकि दस्तावेज़ीकरण का उल्लेख है कि यह आमतौर पर एक कुशल समाधान नहीं है। (इसे कैसे सेट करें, इसके निचले स्तर के विवरण के लिए दस्तावेज़ों में प्रतिकृति पहचान अनुभाग देखें)

प्रतिबंध

धारा 31.4 में प्रलेखन। प्रतिबंधों में प्रतिबंधों के बारे में कुछ महत्वपूर्ण अनुस्मारक हैं, जिन पर मैं प्रकाश डालूंगा। सुनिश्चित करें और सटीक शब्दों के लिए उपरोक्त लिंक किए गए पृष्ठ की समीक्षा करें।

  • डेटाबेस स्कीमा और कोई भी डीडीएल कमांड प्रतिकृति में समर्थित नहीं हैं। यह सुझाव दिया जाता है कि शायद शुरू में pg_dump का उपयोग किया जा सकता है, लेकिन फिर भी, आपको स्कीमा में किसी भी अन्य परिवर्तन और प्रगति को सभी प्रतिकृतियों के लिए स्वयं अपडेट करना होगा।
  • अनुक्रम कॉलम में डेटा दोहराया जाएगा। लेकिन, अनुक्रम ही केवल प्रारंभ मूल्य को प्रतिबिंबित करेगा। पढ़ने के लिए, यह ठीक है। लेकिन अगर यह आपकी विफलता के लिए जाना है, तो आपको वर्तमान मूल्य को स्वयं अपडेट करना होगा। डॉक्स यहाँ pg_dump का सुझाव देते हैं।
  • छंटनी अभी तक समर्थित नहीं है।
  • बड़ी वस्तु प्रतिकृति समर्थित नहीं है।
  • दृश्य, भौतिक दृश्य, विभाजन रूट टेबल, या विदेशी टेबल न तो प्रकाशक या ग्राहक पर समर्थित हैं।
आज श्वेतपत्र डाउनलोड करें क्लस्टर नियंत्रण के साथ पोस्टग्रेएसक्यूएल प्रबंधन और स्वचालन इस बारे में जानें कि पोस्टग्रेएसक्यूएल को तैनात करने, निगरानी करने, प्रबंधित करने और स्केल करने के लिए आपको क्या जानना चाहिए। श्वेतपत्र डाउनलोड करें

सामान्य उपयोग के मामलों की रिपोर्ट की गई

  • आप केवल कुछ डेटा और डेटा परिवर्तनों में रुचि रखते हैं जिन्हें आप वास्तव में दोहराते हैं बनाम संपूर्ण डेटाबेस की नकल करना।
  • जब आपको केवल-पढ़ने के संचालन के लिए प्रतिकृति की आवश्यकता होती है, जैसे कि एक विश्लेषण परिदृश्य।
  • उपयोगकर्ताओं या उपयोगकर्ताओं के विभिन्न सबसेट को डेटा तक सीमित या निगरानी की अनुमति देना।
  • डेटा वितरित करना।
  • अन्य PostgreSQL संस्करणों के साथ संगतता।

स्ट्रीमिंग प्रतिकृति

स्ट्रीमिंग प्रतिकृति पर शोध करने, पढ़ने और अध्ययन करने से, एक चीज जो मैं ठीक सामने इकट्ठा करता हूं, वह है या तो एसिंक्रोनस (डिफ़ॉल्ट) या सिंक्रोनस प्रतिकृति सेट करना।

आह, अधिक अपरिचित शब्द हुह?

यहाँ दोनों की मेरी 'उच्च-स्तरीय' परिभाषा है:

एसिंक्रोनस प्रतिकृति के साथ, प्राथमिक पर एक लेनदेन किए जाने के बाद, जब वही लेनदेन किया जाता है, और प्रतिकृति पर लिखा जाता है तो थोड़ी देरी होती है। इस प्रकार के कॉन्फ़िगरेशन के साथ डेटा हानि की संभावना है।

  • एक, मान लीजिए कि मास्टर क्रैश हो जाता है।
  • दो, प्रतिकृति मास्टर से बहुत पीछे हैं, इसने प्रतिकृति के लिए आवश्यक डेटा और जानकारी को 'वर्तमान' होने के लिए छोड़ दिया है।

हालाँकि, सिंक्रोनस प्रतिकृति में, कोई भी लेन-देन पूर्ण नहीं माना जाता है, जब तक कि मास्टर और प्रतिकृति सर्वर दोनों द्वारा इसकी पुष्टि नहीं की जाती है। जिसने दोनों सर्वर के वाल के लिए एक कमिट लिखा होगा।

जैसा कि मैं समझता हूं, इसका मतलब है कि मास्टर पर लिखने की भी पुष्टि की गई है और प्रतिकृति पर लिखा गया है।

यहां धारा 26.2.8 से आधिकारिक स्पष्टीकरण दिया गया है। आधिकारिक दस्तावेज़ीकरण में तुल्यकालिक प्रतिकृति:

"तुल्यकालिक प्रतिकृति का अनुरोध करते समय, एक लिखित लेनदेन की प्रत्येक प्रतिबद्धता तब तक प्रतीक्षा करेगी जब तक यह पुष्टि न हो जाए कि प्रतिबद्धता प्राथमिक और स्टैंडबाय सर्वर दोनों के डिस्क पर लिखने के लिए आगे लिखा गया है। "

दस्तावेज़ीकरण से एक और मार्ग में क्या होना चाहिए (मेरी राय में), एक बड़ा लाभ है:"डेटा खो जाने की एकमात्र संभावना यह है कि यदि प्राथमिक और स्टैंडबाय दोनों एक ही समय में क्रैश हो जाते हैं।"

हालांकि कुछ भी असंभव नहीं है, फिर भी यह बहुत अच्छा आश्वासन है कि आपके पास अपने डेटा की कोई कॉपी नहीं बचेगी।

ठीक है, हम जानते हैं कि हमें इनमें से किसी एक सेटअप कॉन्फ़िगरेशन को चुनना है, लेकिन समग्र सार क्या है?

संक्षेप में, स्ट्रीमिंग प्रतिकृति एक डेटाबेस सर्वर (मास्टर या प्राथमिक) से एक 'प्रतिकृति' (डेटाबेस प्राप्त करने) के लिए WAL (आगे लिखें लॉग) फ़ाइलें भेजता है और लागू करता है।

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

स्ट्रीमिंग प्रतिकृति पर अंक

संबंधित संसाधन PostgreSQL PostgreSQL स्ट्रीमिंग प्रतिकृति के लिए ClusterControl - एक गहरा गोता PostgreSQL के लिए स्लोनी प्रतिकृति के लिए एक विशेषज्ञ की मार्गदर्शिका
  • डिफ़ॉल्ट रूप से, स्ट्रीमिंग प्रतिकृति अतुल्यकालिक है जिसका अर्थ है कि मास्टर पर प्रतिबद्ध लेनदेन और प्रतिकृति पर उनकी दृश्यता के बीच एक देरी (शायद छोटा) है।
  • प्रतिकृति एक नेटवर्क कनेक्शन के माध्यम से मास्टर से जुड़ती है।
  • प्रमाणीकरण का ध्यान रखें। दस्तावेज़ीकरण से यहां देखें:"यह बहुत महत्वपूर्ण है कि प्रतिकृति के लिए एक्सेस विशेषाधिकार स्थापित किए जाएं ताकि केवल विश्वसनीय उपयोगकर्ता ही वाल स्ट्रीम को पढ़ सकें क्योंकि इससे विशेषाधिकार प्राप्त जानकारी निकालना आसान है"

स्ट्रीमिंग प्रतिकृति का उपयोग कब करें

  • एक सामान्य उपयोग (विशेषकर विश्लेषिकी में) प्राथमिक सर्वर के लोड को दूर करने के लिए 'केवल-पढ़ने के लिए' प्रतिकृति प्रदान करता है।
  • आपको उच्च उपलब्धता परिवेश की आवश्यकता है।
  • प्राइमरी डाउन होने पर हॉट स्टैंडबाय सर्वर में फेलओवर के लिए उपयोगी सेटअप।

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Postgres-XL 9.6 . में नया क्या है?

  2. अज्ञात से पाठ में रूपांतरण फ़ंक्शन खोजने में विफल

  3. PostgreSQL में उपलब्ध कॉलेशन की सूची कैसे लौटाएं

  4. बंडल विफल - PostgreSQL क्लाइंट लाइब्रेरी नहीं ढूँढ सकता (libpq)

  5. केवल उन स्तंभों के साथ क्वेरी में शामिल हों जिनके सभी मान `इन` खंड . में हैं