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

डेटा इंजीनियरिंग इंटरव्यू: आप रो-लेवल डिलीट के लिए Iceberg deletion vectors का उपयोग कैसे करेंगे?

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

प्रश्न

एक Iceberg टेबल को बार-बार यूज़र-रो डिलीट की आवश्यकता होती है, जबकि क्वेरीज़ उपलब्ध रहनी चाहिए। Deletion vectors और अन्य रो-लेवल डिलीट फ़ाइलों की सीमाओं, समवर्ती (concurrent) कमिट्स और रीड फ़िल्टरिंग, तथा एक क्रॉस-इंजन माइग्रेशन और फ़िज़िकल क्लीनअप योजना की व्याख्या करें।

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

एक इवेंट लेक में प्रतिदिन अरबों पंक्तियाँ जोड़ी जाती हैं और लगातार यूज़र-डिलीशन अनुरोध प्राप्त होते हैं। टीम प्रत्येक डिलीट के लिए डेटा फ़ाइलों को फिर से लिखने से बचने के लिए Iceberg v3 deletion vectors का उपयोग करना चाहती है। बताएं कि वे position और equality deletes से किस प्रकार भिन्न हैं, और स्नैपशॉट कंसिस्टेंसी, रीडर कम्पैटिबिलिटी और अंततः फ़िज़िकल क्लीनअप को डिज़ाइन करें।

साक्षात्कारकर्ता क्या मूल्यांकन करता है

  • यह समझना कि deletion vector एक लॉजिकल रो-पोजीशन मार्कर है, ऑब्जेक्ट बाइट्स का तत्काल मिटाया जाना नहीं।
  • राइट एम्प्लीफिकेशन, रीड कॉस्ट और बाउंड्री के आधार पर तीनों डिलीट निरूपणों की तुलना करना।
  • एटॉमिक स्नैपशॉट कमिट्स, समवर्ती मर्जिंग, पुराने रीडर्स के लिए फ़ॉलबैक और कॉम्पेक्शन डिज़ाइन करना।
  • प्राइवेसी एविडेंस को क्वेरी सटीकता, बैकअप और रेप्लिकेशन रिटेंशन से जोड़ना।

स्पष्टीकरण के लिए प्रश्न

  1. क्या प्रत्येक राइटर, कैटलॉग, क्वेरी इंजन और SDK Iceberg v3 और deletion vectors का समर्थन करते हैं?
  2. क्या डिलीट की पहचान स्थिर स्थितियों (stable positions), व्यावसायिक कुंजियों (business keys), या फ़ाइलों के बीच मिलान द्वारा की जाती है?
  3. लॉजिकल डिलीट कितने समय तक रह सकते हैं, और ऑब्जेक्ट वर्ज़न, बैकअप और रेप्लिका कब समाप्त (expire) होते हैं?
  4. इंजन डिलीट फ़ाइलों को कैसे लोड करता है, और क्या इसकी कैश की (cache key) में स्नैपशॉट ID शामिल है?
  5. क्या कॉम्पेक्शन स्ट्रीमिंग राइट्स, स्नैपशॉट एक्सपायरी या प्राइवेसी डिलीशन के साथ रेस कंडीशन बना सकता है?

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

मैं deletion vector को एक स्नैपशॉट के भीतर एक लॉजिकल लेयर के रूप में मानूँगा: प्रत्येक डेटा फ़ाइल एक ऐसे वेक्टर को संदर्भित कर सकती है जो हटाई गई रो स्थितियों को चिह्नित करता है; रीड्स उन पंक्तियों को फ़िल्टर करते हैं, जबकि फ़िज़िकल फ़ाइल को बाद में नियंत्रित कॉम्पेक्शन के तहत फिर से लिखा जाता है। Position deletes भी स्थितियों की पहचान करते हैं लेकिन आमतौर पर अलग डिलीट फ़ाइलों का उपयोग करते हैं। Equality deletes कॉलम मानों से मेल खाते हैं, जो लचीला है लेकिन अधिक डेटा स्कैन कर सकता है। मैं v3 समर्थन को सत्यापित करूँगा, एटॉमिक स्नैपशॉट कमिट्स का उपयोग करूँगा, पुराने रीडर्स के लिए अनुकूलता मार्ग प्रदान करूँगा, और कॉम्पेक्शन, एक्सपायरी, बैकअप और रेप्लिका को एक डिलीशन SLA के साथ संरेखित करूँगा।

विस्तृत उत्तर

चरण 1: डिलीट सेमेंटिक्स को परिभाषित करें

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

चरण 2: तीनों निरूपणों की तुलना करें

Position deletes फ़ाइल स्थिति का नाम बताते हैं और उन राइटर्स के लिए उपयुक्त होते हैं जो पहले से ही फ़ाइल और पंक्ति को जानते हैं। Equality deletes कॉलम मानों से मेल खाते हैं और CDC या बिज़नेस-की डिलीट के लिए उपयुक्त होते हैं, लेकिन रीडर्स अधिक फ़ाइलों को स्कैन कर सकते हैं। एक deletion vector प्रति डेटा फ़ाइल स्थिति चिह्नों को केंद्रित करता है, जिससे कई छोटी डिलीट फ़ाइलें कम हो जाती हैं और फ़िल्टरिंग तथा वेक्टर-मेंटेनेंस लागत रीड पाथ में स्थानांतरित हो जाती है।

चरण 3: स्नैपशॉट सीमा स्थापित करें

वेक्टर संदर्भ Iceberg स्नैपशॉट के साथ एटॉमिक रूप से कमिट किए जाते हैं और डेटा-फ़ाइल पाथ, वेक्टर स्थान, आकार, चेकसम और फ़ॉर्मेट वर्ज़न रिकॉर्ड करते हैं। एक जनरेटर एक निश्चित इनपुट स्नैपशॉट को पढ़ता है और कभी भी किसी मौजूदा वेक्टर को उसी स्थान (in place) पर संशोधित नहीं करता है। समवर्ती विरोध होने पर यह किसी अन्य डिलीट को अधिलेखित (overwrite) करने के बजाय नवीनतम स्नैपशॉट से मर्ज करता है।

चरण 4: रीड पाथ डिज़ाइन करें

प्लानर मैनिफ़ेस्ट और स्नैपशॉट मेटाडेटा को पढ़ता है, फिर लागू वैक्टर लोड करता है। यदि कोई वेक्टर गायब है, दूषित है, या असमर्थित है, तो सुरक्षित परिणाम स्नैपशॉट को अस्वीकार करना या एक विश्वसनीय डिलीट निरूपण पर वापस जाना (fall back) है; त्रुटि को "कोई डिलीट नहीं" के रूप में मानने से पंक्तियाँ लीक हो जाती हैं। कैश की में टेबल, डेटा फ़ाइल, स्नैपशॉट ID और वेक्टर वर्ज़न शामिल होता है।

चरण 5: कॉम्पेक्शन और क्लीनअप की योजना बनाएं

जब वेक्टर घनत्व, रैंडम-रीड एम्प्लीफिकेशन या डिलीट अनुपात एक मापी गई सीमा को पार कर जाता है, तो बची हुई पंक्तियों को नई डेटा फ़ाइलों में फिर से लिखें और एक नए स्नैपशॉट में पुरानी फ़ाइलों और वैक्टरों को हटा दें। ऑब्जेक्ट-स्टोरेज लाइफ़साइकिल, बैकअप, रेप्लिका और स्नैपशॉट एक्सपायरी को समान डिलीशन SLA को पूरा करना होगा; कैटलॉग पॉइंटर को हटाना फ़िज़िकल इरेज़र का प्रमाण नहीं है।

चरण 6: पुराने रीडर्स को माइग्रेट करें

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

चरण 7: सटीकता और अनुपालन सत्यापित करें

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

आदर्श उत्तर

मैं सबसे पहले यह साबित करूँगा कि प्रत्येक रीडर Iceberg v3 और deletion vectors को पार्स कर सकता है। एक डिलीट ट्रांज़ैक्शन एक बेसलाइन स्नैपशॉट को स्थिर करता है, प्रति डेटा फ़ाइल एक रो-पोजीशन वेक्टर बनाता है, और एक नए स्नैपशॉट के साथ संदर्भों को एटॉमिक रूप से कमिट करता है; विरोध होने पर नवीनतम स्नैपशॉट को फिर से पढ़ता और मर्ज करता है। रीड्स स्नैपशॉट ID द्वारा वैक्टर लोड करते हैं। लापता या असमर्थित वैक्टर प्रकाशन को रोकते हैं या एक विश्वसनीय डिलीट फ़ाइल पर फ़ॉलबैक करते हैं, कभी भी खाली वेक्टर पर नहीं। एक बार जब घनत्व एक मापी गई सीमा को पार कर जाता है, तो कॉम्पेक्शन बची हुई पंक्तियों को फिर से लिखता है, और पुरानी फ़ाइलें, स्नैपशॉट, बैकअप और रेप्लिका एक डिलीशन SLA के तहत समाप्त हो जाते हैं। स्वीकृति परीक्षण समवर्ती डिलीट, दूषित वैक्टर, रोलबैक और बाधित रिकवरी को कवर करता है, परिणाम हैश की तुलना करता है, और फ़िज़िकल-क्लीनअप साक्ष्य प्रस्तुत करता है।

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

  • Deletion vector को तत्काल ऑब्जेक्ट-स्टोरेज इरेज़र के रूप में मानना।
  • वर्ज़न और स्नैपशॉट नियंत्रण के बिना किसी मौजूदा वेक्टर को उसी स्थान पर अधिलेखित करना।
  • केवल v2 का समर्थन करने वाले रीडर को वेक्टर-युक्त स्नैपशॉट का उपयोग करने की अनुमति देना और यह उम्मीद करना कि वह इसे अनदेखा कर देगा।
  • केवल कैटलॉग पॉइंटर को हटाने के बाद अनुपालन डिलीशन घोषित करना।
  • समवर्ती स्नैपशॉट की जाँच किए बिना कॉम्पेक्शन चलाना, जिससे राइट्स या डिलीट्स खो जाते हैं।

फॉलो-अप प्रश्न और उत्तर

फॉलो-अप 1: हमेशा equality deletes का उपयोग क्यों नहीं करते?

वे व्यावसायिक-कुंजी डिलीशन को अच्छी तरह से व्यक्त करते हैं, लेकिन रीड्स को कई फ़ाइलों में मिलान करना पड़ सकता है। जब फ़िज़िकल स्थितियाँ ज्ञात हों और डिलीट बार-बार होते हों, तो वैक्टर डिलीट-फ़ाइल ओवरहेड को कम कर सकते हैं। चुनने से पहले रीडर समर्थन और क्वेरी लागत को मापें।

फॉलो-अप 2: क्या दूषित वेक्टर अनफ़िल्टर डेटा लौटा सकता है?

नहीं। इससे हटाई गई पंक्तियाँ उजागर हो जाएंगी। चेकसम और वर्ज़न को मान्य करें, स्नैपशॉट को अस्वीकार करें या एक विश्वसनीय निरूपण पर वापस जाएं, और मरम्मत के लिए चेतावनी (alert) दें।

फॉलो-अप 3: वैक्टर अपडेट के साथ कैसे इंटरैक्ट करते हैं?

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

फॉलो-अप 4: आप कॉम्पेक्शन थ्रेशोल्ड कैसे निर्धारित करते हैं?

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

फॉलो-अप 5: आप प्राइवेसी डिलीशन कैसे साबित करते हैं?

रो-लेवल इनविजिबिलिटी चेक, समाप्त स्नैपशॉट रिकॉर्ड, दोबारा लिखी गई फ़ाइल मैनिफ़ेस्ट, ऑब्जेक्ट-वर्ज़न डिलीशन परिणाम, बैकअप और रेप्लिका रिटेंशन, और बिना किसी मिलान वाले सैम्पल्ड स्कैन प्रदान करें।

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

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