प्रश्न और परिदृश्य
Iceberg टेबल के लिए वेक्टर-सर्च एक्सटेंशन डिज़ाइन करें। डेटा फाइलें पंक्ति डेटा रखती हैं और क्वेरी इंजन एक स्नैपशॉट पढ़ता है; वेक्टर इंडेक्स Puffin साइडकार फाइलों में रहता है और स्नैपशॉट मेटाडेटा द्वारा संदर्भित होता है। डिज़ाइन को स्नैपशॉट आइसोलेशन, टाइम ट्रैवल या डेटा-फाइल मेंटेनेंस को तोड़े बिना एप्रोक्सीमेट नियरेस्ट-नेबर क्वेरीज़ का समर्थन करना चाहिए।
दैनिक बैच अपेंड्स और छोटे अपडेट्स मान लें। अनुमानित परिणाम केवल तभी स्वीकार्य हैं जब इंडेक्स वर्ज़न कॉलर को दिखाई दे। Apache Puffin फाइल फॉर्मेट की क्षमताओं को रिसर्च द्वारा प्रस्तावित किसी विशेष ANN लेआउट से अलग करें; एक प्रयोगात्मक ग्राफ डिज़ाइन स्वचालित रूप से Iceberg का व्यवहार नहीं बन जाता है।
इंटरव्यूअर क्या जांच रहा है
स्नैपशॉट और इंडेक्स निरंतरता
एक मजबूत उत्तर डेटा स्नैपशॉट, Puffin ब्लॉब और इंडेक्स मेटाडेटा को एक दृश्यमान कमिट में जोड़ता है। केवल एक इंडेक्स फाइल अपलोड करने से वह क्वेरी करने योग्य नहीं हो जाती है।
अनुमानित खोज और फाइल प्रूनिंग
समझाएं कि वेक्टर इंडेक्स उम्मीदवारों को प्राप्त करता है, जबकि अंतिम दूरी और दृश्यता जांच अभी भी डेटा पंक्तियों को पढ़ती है। गायब, पुराने (stale), और कम-रिकॉल वाले इंडेक्स को स्पष्ट रूप से संभालें।
इंक्रीमेंटल मेंटेनेंस और डिलीट्स
अपेंड्स, अपडेट्स, डिलीट्स, मर्जेस और कॉम्पैक्शन को कवर करें। केवल एक बार के ऑफलाइन निर्माण पर ही न रुकें।
डिसएग्रीगेटेड कंप्यूट और स्टोरेज के साथ संचालन क्षमता
बताएं कि ऑब्जेक्ट स्टोरेज Puffin को कैसे रखता है, एक कोऑर्डिनेटर शार्ड्स को कैसे शेड्यूल करता है, कचरे को कैसे सीमित किया जाता है, और फ्रेशनेस तथा फॉलबैक की निगरानी कैसे की जाती है।
उत्तर देने से पहले स्पष्टीकरण प्रश्न
- एम्बेडिंग डायमेंशन, दूरी फ़ंक्शन, क्वेरी लेटेंसी और न्यूनतम रिकॉल क्या हैं?
- क्या एक क्वेरी को नवीनतम स्नैपशॉट का उपयोग करना चाहिए, या एक सीमित इंडेक्स लैग स्वीकार्य है?
- क्या अपडेट्स और डिलीट्स केवल-अपेंड CDC, Iceberg equality deletes, या डेटा-फाइल रीराइट्स हैं?
- क्या एक इंजन इंडेक्स बना रहा है, या Spark, Flink और Trino को इसे साझा करना होगा?
- क्या वेक्टर्स संवेदनशील हैं, और एक्सेस कंट्रोल तथा एन्क्रिप्शन का स्वामित्व किसके पास है?
- क्या टाइम-ट्रैवल क्वेरीज़ को ऐतिहासिक इंडेक्स का पुन: उपयोग करना चाहिए, या केवल वर्तमान स्नैपशॉट के लिए इंडेक्सिंग की आवश्यकता है?
30-सेकंड उत्तर फ्रेमवर्क
“मैं Iceberg डेटा फाइलों, Puffin इंडेक्स ब्लॉब्स और स्नैपशॉट मेटाडेटा को अलग रखूंगा, लेकिन एकल स्नैपशॉट ID के लिए एक कमिट में बाइंडिंग प्रकाशित करूंगा। एक क्वेरी एक दृश्यमान स्नैपशॉट चुनती है, उसके इंडेक्स संदर्भों को पढ़ती है, ANN उम्मीदवार पुनर्प्राप्ति करती है, फिर डेटा फाइलों से पंक्ति वर्ज़न और सटीक दूरियों को मान्य करती है। गायब या पुराने इंडेक्स विभाजन या फाइल स्कैन पर फॉलबैक करते हैं और गुणवत्ता स्थिति को उजागर करते हैं। अपेंड्स डेल्टा इंडेक्स बना सकते हैं; अपडेट्स और डिलीट्स को टॉम्बस्टोन या डिलीट लेयर्स द्वारा फ़िल्टर किया जाता है; कॉम्पैक्शन एक बेसलाइन का पुनर्निर्माण करता है। इंडेक्स जॉब्स आशावादी स्नैपशॉट कमिट्स का उपयोग करते हैं, और हम फ्रेशनेस, रिकॉल सैंपल्स, फॉलबैक दर और Puffin कचरे की निगरानी करते हैं।”
चरण-दर-चरण गहन उत्तर
चरण 1: डेटा और इंडेक्स सीमाओं का अनुमान लगाएं
एक उदाहरणात्मक धारणा के रूप में, 768 float32 डायमेंशन वाले 1 अरब वेक्टर्स के लिए 1 अरब गुणा 768 गुणा 4 बाइट्स की आवश्यकता होती है, जो कॉलमर कम्प्रेशन या इंडेक्स ओवरहेड से पहले कच्चे वेक्टर्स के लिए लगभग 3 TB है। यह अनुमान इंडेक्स को एक मेनिफेस्ट या कोऑर्डिनेटर मेमोरी में रखने को खारिज करता है; इसे ऑब्जेक्ट स्टोरेज में शार्ड करें और क्वेरी विभाजन द्वारा लोड करें।
चरण 2: Puffin को स्नैपशॉट से बाउंड करें
Puffin उन इंडेक्स या सांख्यिकी ब्लॉब्स को संग्रहीत करता है जिन्हें Iceberg मेनिफेस्ट सीधे नहीं ले जा सकता है। प्रत्येक ब्लॉब में प्रकार, फ़ील्ड, विभाजन या डेटा-फाइल संदर्भ जैसे मेटाडेटा शामिल होते हैं। एक इंडेक्स बिल्डर Puffin लिखता है, फिर एक नया Iceberg स्नैपशॉट कमिट करता है जिसका सारांश इंडेक्स स्थान, वर्ज़न और कवरेज रिकॉर्ड करता है। एक पाठक केवल तभी संदर्भ स्वीकार करता है जब वह उस स्नैपशॉट के साथ दृश्यमान हो।
snapshot S42
data files: D100, D101
summary:
vector.index.version = v7
vector.index.puffin = s3://table/metadata/puffin-v7
vector.index.covers = D100,D101चरण 3: क्वेरी पथ डिज़ाइन करें
वर्तमान शाखा या टाइम-ट्रैवल अनुरोध को स्नैपशॉट S में हल करें, फिर कवरेज के अनुसार Puffin ब्लॉब्स का चयन करें। एक ANN ग्राफ या शार्ड उम्मीदवार पंक्ति पहचानकर्ता और अनुमानित दूरियां लौटाता है। इंजन उन डेटा फाइलों को पढ़ता है, S में पंक्ति दृश्यता की जांच करता है, प्राधिकरण और प्रेडिकेट्स लागू करता है, और सटीक दूरियों की पुनर्गणना करता है। snapshotid और indexversion लौटाएं ताकि कॉल करने वाले फ्रेशनेस का आकलन कर सकें।
चरण 4: अपेंड्स, अपडेट्स और डिलीट्स को संभालें
अपेंड्स एक डेल्टा Puffin इंडेक्स लिख सकते हैं और उसी स्नैपशॉट कमिट में अपनी फाइलों की घोषणा कर सकते हैं। पुनर्निर्माण से पहले, अपडेट्स या डिलीट्स पुराने उम्मीदवारों को equality deletes, position deletes, या डेल्टा टॉम्बस्टोन के साथ फ़िल्टर करते हैं; एक क्वेरी को कभी भी हटाई गई पंक्ति वापस नहीं करनी चाहिए। पृष्ठभूमि में डेल्टा इंडेक्स को एक नई बेसलाइन में मर्ज करें, फिर एटॉमिक रूप से एक नया स्नैपशॉट बाइंडिंग प्रकाशित करें। विफलता पर, पुराना इंडेक्स और फॉलबैक पथ बनाए रखें।
चरण 5: समवर्ती कमिट्स और कॉम्पैक्शन को संभालें
एक इंडेक्स जॉब बेसलाइन S42 पढ़ता है और v7 बनाता है। यदि कोई डेटा कमिट टेबल को S43 पर आगे बढ़ाता है, तो आशावादी समवर्तीता (optimistic concurrency) यह तय करती है कि पुनः प्रयास करना है, डेल्टा मर्ज करना है, या v7 को छोड़ना है। जब कॉम्पैक्शन डेटा-फाइल पथ बदलता है, तो पुराना इंडेक्स नई फाइलों के कवरेज का दावा नहीं कर सकता है। फिर से लिखे गए फाइल सेट से जुड़ा एक नया ब्लॉब बनाएं, फिर संदर्भ ट्रैकिंग और ग्रेस पीरियड के बाद पुराने ब्लॉब का कचरा साफ (garbage-collect) करें।
चरण 6: संचालन, पृथक्करण और फॉलबैक
ऑब्जेक्ट स्टोरेज Puffin रखता है; एक कोऑर्डिनेटर विभाजन या फाइल सेट द्वारा निर्माण शेड्यूल करता है; क्वेरी नोड्स छोटे रूटिंग या सेंट्रोइड संरचनाओं को कैश करते हैं। गायब ब्लॉब्स, असंगत वर्ज़न, प्राधिकरण विफलताएं, या कम रिकॉल नमूने फाइल-स्कैन फॉलबैक या केवल सत्यापित उम्मीदवारों और एक कारण वाले प्रतिक्रिया को ट्रिगर करते हैं। इंडेक्स फ्रेशनेस, बिल्ड लैग, क्वेरी p95, रिकॉल सैंपल्स, Puffin बाइट्स, फॉलबैक दर और असंबंधित ब्लॉब्स को ट्रैक करें।
उच्च-गुणवत्ता वाला नमूना उत्तर
“मैं वेक्टर कॉलम को Iceberg डेटा फाइलों में रखूंगा, ANN संरचनाओं को Puffin में लिखूंगा, और उनके संदर्भों को स्नैपशॉट के हिस्से के रूप में प्रकाशित करूंगा। 1 अरब 768-डायमेंशनल float32 वेक्टर्स की उदाहरणात्मक धारणा के साथ, कच्चे वेक्टर्स लगभग 3 TB हैं, इसलिए इंडेक्स को कोऑर्डिनेटर द्वारा रखे जाने के बजाय ऑब्जेक्ट स्टोरेज में शार्ड किया जाना चाहिए।
बिल्डर S42 को पढ़ता है, D100 और D101 को कवर करने वाला Puffin v7 बनाता है, और एक नया स्नैपशॉट प्रकाशित करने के लिए आशावादी कमिट का उपयोग करता है। एक क्वेरी टाइम-ट्रैवल अनुरोध के लिए स्नैपशॉट को ठीक करती है, केवल उस स्नैपशॉट के लिए घोषित इंडेक्स पढ़ती है, और डेटा फाइलों को पढ़कर उम्मीदवार दृश्यता, प्राधिकरण और सटीक दूरी को मान्य करती है। जब तक इंडेक्स पुराना है, अपेंड्स डेल्टा इंडेक्स का उपयोग करते हैं और अपडेट्स या डिलीट्स को डिलीट फाइलों या टॉम्बस्टोन द्वारा फ़िल्टर किया जाता है; कॉम्पैक्शन बाद में बेसलाइन का पुनर्निर्माण करता है।
यदि टेबल S43 पर आगे बढ़ गई है, तो बिना पुनः प्रयास या स्पष्ट बासी मार्कर के v7 को वर्तमान नहीं कहा जा सकता है। गायब ब्लॉब्स, असंगत प्रारूप, या कम रिकॉल स्कैन फॉलबैक को ट्रिगर करते हैं, जिसमें मेट्रिक्स में snapshotid, indexversion और कारण शामिल होते हैं। पुराने Puffin को केवल तभी पुनः प्राप्त करें जब कोई ऐतिहासिक स्नैपशॉट या शाखा इसे संदर्भित न करे।”
सामान्य त्रुटियां
- Puffin को एक नए प्राथमिक टेबल प्रारूप के रूप में मानना → क्वेरी यह साबित नहीं कर सकती कि एक इंडेक्स किस डेटा वर्ज़न को कवर करता है → कवरेज को स्नैपशॉट से बाउंड करें।
- अपलोड किए गए इंडेक्स को तुरंत पढ़ने योग्य बनाना → डेटा फाइलें और इंडेक्स अलग-अलग स्नैपशॉट से संबंधित हो सकते हैं → एक आशावादी कमिट में संदर्भ प्रकाशित करें।
- सीधे ANN उम्मीदवारों को वापस करना → डिलीट्स, अनुमतियां या दूरी त्रुटि गलत पंक्तियों को लीक करती हैं → दृश्यता की पुनः जांच करें और सटीक दूरी की पुनर्गणना करें।
- अपडेट्स के बाद पुराने ग्राफ का उपयोग जारी रखना → हटाई गई पंक्तियों को पुनर्प्राप्त किया जा सकता है → डिलीट लेयर्स के साथ फ़िल्टर करें, डेल्टा मर्ज करें, और एक बेसलाइन का पुनर्निर्माण करें।
- कॉम्पैक्शन के बाद पुराने फाइल पाथ का पुन: उपयोग करना → इंडेक्स उन फाइलों को कवर करने का दावा करता है जो अब मौजूद नहीं हैं → फिर से लिखे गए सेट के लिए एक नया ब्लॉब और स्नैपशॉट बनाएं।
- एक शोध ग्राफ लेआउट को Puffin मानक के रूप में मानना → इंजन आपस में काम नहीं कर सकते हैं → स्टोरेज और मेटाडेटा के लिए Puffin का उपयोग करें, जिसमें ग्राफ एल्गोरिथ्म बदलने योग्य हो।
- इंडेक्स गायब होने पर प्रत्येक क्वेरी को विफल करना → नए विभाजन रोलआउट के दौरान सेवा अनुपलब्ध हो जाती है → फॉलबैक के रूप में स्कैन करें और फ्रेशनेस तथा कारण प्रदर्शित करें।
- संदर्भ ट्रैकिंग के बिना Puffin को हटाना → टाइम-ट्रैवल या शाखा रीड्स टूट जाते हैं → प्रत्येक स्नैपशॉट, शाखा और ग्रेस पीरियड द्वारा इसे जारी करने की प्रतीक्षा करें।
फॉलो-अप प्रश्न और प्रतिक्रियाएं
फॉलो-अप 1: आप टाइम ट्रैवल के लिए सही इंडेक्स की गारंटी कैसे देते हैं?
संबंधित स्नैपशॉट सारांश में उसके फाइल कवरेज और वर्ज़न के साथ संदर्भ संग्रहीत करें। पहले स्नैपशॉट तय करें, बाद की या अलग फाइलों को कवर करने वाले ब्लॉब्स को अस्वीकार करें, और वर्तमान इंडेक्स का चुपचाप उपयोग करने के बजाय अनुपस्थिति पर स्कैन करें।
फॉलो-अप 2: क्या एक बड़ा अपडेट स्ट्रीम असीमित डेल्टा इंडेक्स बनाएगा?
प्रति विभाजन या फाइल सेट के लिए एक डेल्टा-लेयर सीमा निर्धारित करें और इसके पार होने पर मर्ज रीबिल्ड शेड्यूल करें। मर्ज के बाद एटॉमिक रूप से एक नए स्नैपशॉट पर स्विच करें, पुराने डेल्टा को तब तक बनाए रखें जब तक कि ऐतिहासिक स्नैपशॉट अब उन्हें संदर्भित न करें।
फॉलो-अप 3: क्या दो इंजन अपने ANN इंडेक्स का आदान-प्रदान कर सकते हैं?
केवल तभी जब ब्लॉब प्रकार, दूरी फ़ंक्शन, वेक्टर एन्कोडिंग, पंक्ति पहचानकर्ता और वर्ज़न प्रोटोकॉल संगत हों। Puffin कंटेनर और मेटाडेटा सीमा को परिभाषित करता है; ग्राफ को क्षमता घोषणा की आवश्यकता होती है। अन्यथा इसे अनदेखा करें और फॉलबैक करें।
फॉलो-अप 4: आप पूरी टेबल को स्कैन किए बिना रिकॉल कैसे मापते हैं?
लाइव क्वेरीज़ के एक छोटे सेट का नमूना लें और सटीक खोज या विश्वसनीय बेसलाइन के साथ ऑफलाइन अनुमानित ग्राउंड ट्रुथ की गणना करें। विभाजन, वेक्टर वर्ज़न और दूरी फ़ंक्शन द्वारा recall@k की तुलना करें। अकेले p95 देखने के बजाय जब नमूने सीमा से नीचे गिरते हैं तो इंडेक्स को बासी (stale) के रूप में चिह्नित करें।
फॉलो-अप 5: क्या होगा यदि कोई Puffin फाइल या ऑब्जेक्ट स्टोर अस्थायी रूप से अनुपलब्ध है?
ब्लॉब चेकसम और मेटाडेटा को सत्यापित करें, एक प्रतिकृति से पुनः प्रयास करें, फिर टाइमआउट के बाद एक स्पष्ट स्थिति के साथ अनुमानित खोज को स्कैन या अस्वीकार करें। कभी भी ऐसा नया स्नैपशॉट प्रकाशित न करें जो किसी दूषित ब्लॉब को संदर्भित करता हो।
स्रोत 1: Apache Puffin विनिर्देश
Puffin विनिर्देश इंडेक्स और आंकड़ों के लिए एक फाइल प्रारूप को परिभाषित करता है जिसे सीधे Iceberg मेनिफेस्ट में संग्रहीत नहीं किया जा सकता है, जिसमें ब्लॉब मेटाडेटा और डेटा-फाइल संदर्भ शामिल हैं। यह इस उत्तर में साइडकार, कवरेज और स्नैपशॉट सीमा का समर्थन करता है।
स्रोत 2: Puffin-समर्थित वेक्टर-इंडेक्स रिसर्च
2026 का पेपर Iceberg स्नैपशॉट्स से एप्रोक्सीमेट-नियरेस्ट-नेबर संरचनाओं को जोड़ने का प्रस्ताव करता है और कंप्यूट-स्टोरेज डिसएग्रीगेशन, स्नैपशॉट-स्तरीय इंडेक्स प्रबंधन और अरब-वेक्टर सेटिंग्स पर चर्चा करता है। यह उत्तर इसे एक बदलने योग्य शोध कार्यान्वयन के रूप में मानता है और डिलीट, फॉलबैक और समवर्ती-कमिट सीमाएं जोड़ता है।
स्रोत 3: डेटा-इंजीनियरिंग इंटरव्यू तैयारी गाइड
सार्वजनिक डेटा-इंजीनियरिंग गाइड SQL, डेटा मॉडलिंग, पाइपलाइनों, बैच और स्ट्रीमिंग सिस्टम, और विश्वसनीयता पर प्रकाश डालती है। उत्तर उन संकेतों को स्नैपशॉट निरंतरता, इंडेक्स मेंटेनेंस, शार्डिंग, सत्यापन और विफलता फॉलबैक से जोड़ता है।