प्रतिनिधि इंटरव्यू विषय

बैकएंड इंटरव्यू: आप PostgreSQL लॉजिकल रेप्लिकेशन रो फ़िल्टर और कॉलम सूचियों का सुरक्षित रूप से उपयोग कैसे करेंगे?

बैकएंडकठिन
Offer.cc संपादकीय टीमप्रकाशित अपडेट किया गया

प्रश्न

एक PostgreSQL पब्लिशर को केवल चयनित टेनेंट्स और कॉलमों को सब्सक्राइबर पर रेप्लिकेट करना है। रो-फ़िल्टर और कॉलम-लिस्ट सिमेंटिक्स, UPDATE सीमा रूपांतरण, इनिशियल सिंक, पार्टीशन व्यवहार और एक सुरक्षित परिचालन योजना की व्याख्या करें।

प्रॉम्प्ट और संदर्भ

एक PostgreSQL 18 पब्लिशर को रिपोर्टिंग और क्षेत्रीय सेवाओं के लिए उपयोग किए जाने वाले सब्सक्राइबर पर केवल चयनित टेनेंट्स और कॉलमों को रेप्लिकेट करना है। रो-फ़िल्टर और कॉलम-लिस्ट सिमेंटिक्स, फ़िल्टर सीमा को पार करने पर UPDATE के साथ क्या होता है, इनिशियल सिंक्रोनाइज़ेशन, पार्टीशन व्यवहार और एक सुरक्षित परिचालन योजना की व्याख्या करें।

PostgreSQL दस्तावेज़ यह स्पष्ट करते हैं कि एक रो फ़िल्टर पब्लिकेशन से पहले यह तय करता है कि कोई रो किसी एक्सप्रेशन को संतुष्ट करती है या नहीं, जबकि एक कॉलम सूची ट्रांसपोर्ट किए जाने वाले कॉलमों को कम करती है लेकिन यह कोई सुरक्षा सीमा नहीं है। यह इंटरव्यू किसी पब्लिकेशन में सिर्फ एक WHERE क्लॉज जोड़ने के बजाय रेप्लिकेशन सिमेंटिक्स, कंसिस्टेंसी और परिवर्तन शासन (change governance) का परीक्षण करता है।

इंटरव्यूअर क्या जांच रहा है

आपको यह समझाना चाहिए कि रेप्लिकेशन-कनेक्शन रोल फ़िल्टर का मूल्यांकन करता है, false या NULL रो को दबा (suppress) देता है, और TRUNCATE अप्रभावित रहता है। आपको पुराने/नए UPDATE रूपांतरणों को निकालना चाहिए, रेप्लिका आइडेंटिटी, इनिशियल सिंक, पब्लिकेशन्स में OR-कंबाइंड फ़िल्टर, पार्टीशन रूट्स और कॉलम-लिस्ट विकास को संभालना चाहिए, और यह पहचानना चाहिए कि कॉलम सूचियां गोपनीयता प्रदान नहीं करती हैं।

पहले स्पष्ट करने योग्य प्रश्न

रेप्लिकेशन लक्ष्य

सब्सक्राइबर द्वारा आवश्यक टेनेंट्स, ऑपरेशन्स और कॉलमों की पुष्टि करें, क्या इनिशियल स्नैपशॉट की अनुमति है, क्या राइट्स द्विदिशात्मक (bidirectional) हैं, और क्या सब्सक्राइबर वर्ज़न 15 या 18 से पुराना है।

आइडेंटिटी और फ़िल्टरिंग

टेबल की रेप्लिका आइडेंटिटी की पुष्टि करें, क्या फ़िल्टर कॉलम बदल सकते हैं, क्या पार्टीशन-रूट पब्लिकेशन का उपयोग किया जाता है, और क्या कई पब्लिकेशन्स एक ही टेबल को कवर करते हैं।

सुरक्षा और रिकवरी

पुष्टि करें कि क्या संवेदनशील कॉलम पूरी तरह से अदृश्य होने चाहिए, रेप्लिकेशन रोल की अनुमतियां, नेटवर्क आइसोलेशन, सब्सक्रिप्शन पुनर्निर्माण प्रक्रियाएं, और खराब फ़िल्टर के लिए रोलबैक विंडो क्या है।

30-सेकंड का उत्तर

"एक रो फ़िल्टर यह परिभाषित करता है कि कौन से रो परिवर्तन किसी पब्लिकेशन में शामिल होते हैं; false या NULL परिवर्तन को हटा देता है, जबकि एक कॉलम सूची केवल ट्रांसपोर्ट किए गए कॉलमों को कम करती है और यह सुरक्षा सीमा नहीं है। एक UPDATE पुराने और नए दोनों रो का मूल्यांकन करता है: नो-मैच से मैच INSERT बन जाता है, मैच से नो-मैच DELETE बन जाता है, और केवल मैच से मैच ही UPDATE रहता है। UPDATE या DELETE के लिए, फ़िल्टर और पब्लिश किए गए कॉलमों को रेप्लिका आइडेंटिटी को कवर करना चाहिए। रोलआउट से पहले मैं पब्लिकेशन परिवर्तनों को फ्रीज करूँगा, इनिशियल सिंक, पार्टीशन्स, OR-कंबाइंड फ़िल्टर और पुराने-वर्ज़न व्यवहार का परीक्षण करूँगा, साथ ही पब्लिशर-साइड विशेषाधिकारों और दृश्यों (views) के साथ संवेदनशील डेटा की सुरक्षा करूँगा।"

चरण-दर-चरण विस्तृत उत्तर

चरण 1: पब्लिकेशन इनवेरिएंट्स को परिभाषित करें

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

चरण 2: रो फ़िल्टर डिज़ाइन करें

फ़िल्टर रेप्लिकेशन कनेक्शन के रोल और केवल प्रलेखित सरल एक्सप्रेशन्स का उपयोग करके पब्लिकेशन से पहले चलता है। false या NULL परिणाम रो को दबा देता है, और TRUNCATE अप्रभावित रहता है। UPDATE या DELETE वाले पब्लिकेशन्स के लिए, फ़िल्टर कॉलम रेप्लिका आइडेंटिटी द्वारा कवर होने चाहिए; केवल INSERT वाले पब्लिकेशन्स अन्य कॉलमों का उपयोग कर सकते हैं।

चरण 3: UPDATE रूपांतरण प्राप्त करें

अपडेट से पहले और बाद में फ़िल्टर का मूल्यांकन करें। मैच-टू-मैच UPDATE भेजता है; नो-मैच-टू-नो-मैच कुछ नहीं भेजता; नो-मैच-टू-मैच INSERT भेजता है; मैच-टू-नो-मैच DELETE भेजता है। इसलिए सब्सक्राइबर आँख बंद करके प्रत्येक UPDATE को रीप्ले करने के बजाय फ़िल्टर को संतुष्ट करने वाले रो के वर्तमान सेट का प्रतिनिधित्व करता है।

चरण 4: कॉलम सूची को बाधित (constrain) करें

कॉलम सूची में रेप्लिका-आइडेंटिटी कॉलम शामिल होने चाहिए, और सब्सक्राइबर टेबल में कम से कम पब्लिश किए गए कॉलम होने चाहिए। सूची का क्रम रेप्लिकेशन को प्रभावित नहीं करता है। किसी सूची को छोड़ने पर बाद में जोड़े गए कॉलम अपने आप शामिल हो जाते हैं; सभी वर्तमान कॉलमों को स्पष्ट रूप से नामित करने से भविष्य के कॉलम शामिल नहीं होते हैं। पब्लिकेशन्स में एक ही टेबल के लिए अलग-अलग सूचियां किसी सब्सक्रिप्शन को फिर से शुरू होने से रोक सकती हैं, इसलिए बदलने से पहले उनकी समीक्षा करें।

sql
CREATE PUBLICATION tenant_eu
  FOR TABLE orders (order_id, tenant_id, status, total)
  WHERE (tenant_id = 'eu');

चरण 5: इनिशियल सिंक्रोनाइज़ेशन को संभालें

इनिशियल सिंक्रोनाइज़ेशन उन मौजूदा पंक्तियों की प्रतिलिपि बनाता है जो रो फ़िल्टर को संतुष्ट करती हैं और केवल सूची में मौजूद कॉलमों को कॉपी करती हैं। 15 से पुराना सब्सक्राइबर पूरी टेबल कॉपी कर सकता है, और 18 से पुराने वर्ज़न्स में जनरेटेड-कॉलम की अतिरिक्त सीमाएं होती हैं। ट्रैफ़िक स्विच करने से पहले स्नैपशॉट के दौरान वर्ज़न मैट्रिक्स और राइट बैकलॉग की जाँच करें।

चरण 6: पार्टीशन्स और एकाधिक पब्लिकेशन्स को संभालें

publish_via_partition_root=true के साथ, रूट पार्टीशन टेबल के फ़िल्टर या कॉलम सूची का उपयोग किया जाता है; डिफ़ॉल्ट false के साथ, प्रत्येक पार्टीशन की परिभाषा का उपयोग किया जाता है। सभी पब्लिकेशन्स में एक ही टेबल और पब्लिश ऑपरेशन के लिए रो फ़िल्टर OR किए जाते हैं। इसलिए एक अनफ़िल्टर्ड पब्लिकेशन अन्य फ़िल्टर से अपेक्षित प्रूनिंग को विफल कर सकता है।

चरण 7: परिचालन रेलिंग (guardrails) जोड़ें

माइग्रेशन के रूप में पब्लिकेशन परिभाषाओं की समीक्षा करें, और फ़िल्टर हिट दर, रेप्लिकेशन अंतराल (lag), टकराव, इनिशियल-सिंक रो काउंट और नियम वर्ज़न्स रिकॉर्ड करें। एक शैडो सब्सक्रिप्शन पर पुराने/नए सीमा मामलों का परीक्षण करें। यदि रो लीक होती हैं या गायब हो जाती हैं, तो सब्सक्रिप्शन को रोकें, पब्लिकेशन को सही करें, और कंसिस्टेंसी जांच के बाद पुनर्निर्माण करें।

मॉडल उत्तर

मैं रो फ़िल्टर को पब्लिश किए गए सेट की परिभाषा और कॉलम सूची को ट्रांसपोर्ट प्रूनिंग के रूप में मानूँगा। रेप्लिकेशन रोल फ़िल्टर का मूल्यांकन करता है, इसलिए false/NULL और TRUNCATE को स्पष्ट परीक्षणों की आवश्यकता होती है। UPDATE पुराने और नए रो की तुलना करता है और सीमा पार करते समय INSERT या DELETE बन जाता है; UPDATE/DELETE के लिए, फ़िल्टर और पब्लिश किए गए कॉलमों को रेप्लिका आइडेंटिटी को कवर करना चाहिए। इनिशियल सिंक, पार्टीशन रूट्स और OR-कंबाइंड पब्लिकेशन्स टेस्ट मैट्रिक्स का हिस्सा हैं। संवेदनशील डेटा को पब्लिशर विशेषाधिकारों, दृश्यों (views), या एक अलग रिडक्शन पाइपलाइन से सुरक्षित करें; परफॉर्मेंस और संरचना नियंत्रण के लिए कॉलम सूचियों का उपयोग करें।

सामान्य गलतियाँ

  • गलती: यह मान लेना कि एक कॉलम सूची दुर्भावनापूर्ण सब्सक्राइबर को अप्रकाशित कॉलम प्राप्त करने से रोकती है। → यह क्यों विफल होता है: आधिकारिक दस्तावेज़ कहते हैं कि यह कोई सुरक्षा तंत्र नहीं है। → सुधार: पब्लिशर विशेषाधिकारों, दृश्यों या रिडक्शन के साथ गोपनीयता लागू करें।
  • गलती: केवल नए रो पर UPDATE का मूल्यांकन करना। → यह क्यों विफल होता है: एक रो फ़िल्टर किए गए सेट से बाहर निकल सकती है या उसमें प्रवेश कर सकती है। → सुधार: पुराने और नए रो दोनों का मूल्यांकन करें और चारों परिणामों को लागू करें।
  • गलती: रेप्लिका आइडेंटिटी को अनदेखा करना। → यह क्यों विफल होता है: UPDATE/DELETE पुराने रो को सुरक्षित रूप से लोकेट नहीं कर सकते। → सुधार: फ़िल्टर और कॉलम सूची में आइडेंटिटी कवरेज की जाँच करें।
  • गलती: यह मान लेना कि कई संकीर्ण पब्लिकेशन्स का अर्थ एक संकीर्ण कुल स्ट्रीम है। → यह क्यों विफल होता है: समान पब्लिश ऑपरेशन के लिए फ़िल्टर OR किए जाते हैं। → सुधार: यूनियन की गणना करें और अनफ़िल्टर्ड कवरेज को अस्वीकार करें।

अनुवर्ती प्रश्न और उत्तर

आपको अलग-अलग पब्लिकेशन्स के बजाय रो फ़िल्टर का उपयोग कब करना चाहिए?

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

आप किसी नए कॉलम के आकस्मिक रेप्लिकेशन को कैसे रोकते हैं?

एक स्पष्ट कॉलम सूची का उपयोग करें और स्कीमा समीक्षा के माध्यम से इसे अपडेट करें। प्रत्येक वर्तमान कॉलम को स्पष्ट रूप से नामित करने को सूची को छोड़ देने के साथ भ्रमित न करें; छोड़ने पर भविष्य के कॉलम अपने आप शामिल हो जाते हैं।

आप सीमा पार करने वाले UPDATE का परीक्षण कैसे करते हैं?

चार मामले बनाएं: पुराना गलत/नया सही, पुराना सही/नया गलत, दोनों सही, और दोनों गलत। सब्सक्राइबर पर क्रमशः INSERT, DELETE, UPDATE और कोई घटना नहीं होने की पुष्टि करें।

क्या फ़िल्टरिंग मल्टी-टेनेंट सुरक्षा अलगाव (isolation) की जगह ले सकती है?

नहीं। यह लॉजिकल-रेप्लिकेशन डेटा का चयन करता है; अलगाव के लिए अभी भी न्यूनतम-विशेषाधिकार प्राप्त पब्लिशर रोल्स, अलग क्रेडेंशियल्स, नेटवर्क नियंत्रण और जहां आवश्यक हो वहां रिडक्शन की आवश्यकता होती है।

सार्वजनिक स्रोत

संबंधित प्रश्न