प्रश्न
आपको टेनेंट, वर्ष और इन्वेंट्री फ़िल्टर के साथ प्रोडक्ट सिमेंटिक सर्च के लिए Redis vector sets की आवश्यकता है। आप राइट्स (writes), VSIM क्वेरीज़, कैपेसिटी और क्वालिटी वैलिडेशन को कैसे डिज़ाइन करेंगे?
संदर्भ और सीमाएं
प्रत्येक एलिमेंट में एक स्ट्रिंग ID, एक फिक्स्ड-डायमेंशन वेक्टर और वैकल्पिक JSON एट्रिब्यूट्स होते हैं। Redis vector sets सिमिलरिटी सर्च के लिए HNSW का उपयोग करते हैं और FILTER के माध्यम से सरल गणितीय फ़िल्टर का समर्थन करते हैं। अपडेट्स, डिलीट्स, कोल्ड स्टार्ट, मेमोरी लिमिट्स, क्रॉस-प्लेटफ़ॉर्म FP32 एन्कोडिंग और सर्च फ़ॉलबैक को कवर करें; इस फ़ीचर को एक ऐसे ब्लैक बॉक्स के रूप में वर्णित न करें जो बिज़नेस-लेवल पर सटीक रिकॉल (exact recall) की गारंटी देता हो।
इंटरव्यूअर क्या टेस्ट कर रहा है
इंटरव्यूअर वेक्टर रिट्रीवल, स्ट्रक्चर्ड कंस्ट्रेंट्स, डेटा लाइफ़साइकिल और कैपेसिटी के लिए एक सर्विस कॉन्ट्रैक्ट देखना चाहता है। Redis एलिमेंट्स को जोड़ने या अपडेट करने के लिए VADD, वेक्टर सिमिलरिटी क्वेरीज़ के लिए VSIM, और कौन से कैंडिडेट्स बचते हैं यह तय करने के लिए एट्रिब्यूट फ़िल्टर को डॉक्यूमेंट करता है; FP32 ब्लॉब्स के लिए लिटिल-एंडियन बाइट ऑर्डर की आवश्यकता होती है, जबकि VALUES प्लेटफ़ॉर्म-विशिष्ट ब्लॉब एन्कोडिंग से बचाता है।
पहले इन बिंदुओं को स्पष्ट करें:
- वेक्टर डायमेंशन, डिस्टेंस मेट्रिक, टेनेंट वॉल्यूम और अपडेट फ़्रीक्वेंसी क्या हैं?
- क्या फ़िल्टर हार्ड कंस्ट्रेंट्स हैं, या एप्लिकेशन विस्तारित कैंडिडेट सेट को फिर से फ़िल्टर कर सकता है?
- क्या परिणामों में top-k, सिमिलरिटी स्कोर्स, एट्रिब्यूट्स या कोई एक्सप्लेनेबल फ़िल्टर रीज़न होना चाहिए?
- मेमोरी, पर्सिस्टेंस, रिकवरी और क्रॉस-ज़ोन रेप्लिकेशन की आवश्यकताएं क्या हैं?
30-सेकंड का उत्तर
Key, एलिमेंट ID, वेक्टर डायमेंशन और एट्रिब्यूट स्कीमा को परिभाषित करें। इडेम्पोटेंट VADD/VSETATTR राइट्स, VSIM top-k और फ़िल्टरिंग की व्याख्या करें। कैपेसिटी एस्टीमेट्स, एक क्वालिटी बेसलाइन, और Redis के अनुपलब्ध होने पर कीवर्ड या पिछले-इंडेक्स फ़ॉलबैक के साथ समाप्त करें।
स्टेप-बाय-स्टेप डीप डाइव
- डेटा कॉन्ट्रैक्ट: डायमेंशन और मॉडल वर्ज़न को फिक्स करें; IDs को ग्लोबल बनाएं या उन्हें टेनेंट द्वारा की (key) करें; केवल फ़िल्टर फ़ील्ड्स को एट्रिब्यूट्स के रूप में स्टोर करें।
- राइट पाथ: डायमेंशन और मॉडल वर्ज़न को वैलिडेट करें,
VADDके साथ वेक्टर को इडेम्पोटेंटली अपडेट करें,VSETATTRके साथ एट्रिब्यूट्स को अपडेट करें, औरVREMके साथ डिलीट करें। - क्वेरी पाथ: सर्विस में टेनेंट बाउंड्रीज़ और फ़िल्टर एक्सप्रेशन्स को वैलिडेट करें,
VSIMसे फ़ाइनल k से थोड़े अधिक की रिक्वेस्ट करें, और ऑडिटिंग के लिए स्कोर्स और एट्रिब्यूट्स रिटर्न करें। - कैपेसिटी: वेक्टर, HNSW-लिंक और एट्रिब्यूट मेमोरी का अनुमान लगाएं; प्रति-टेनेंट लिमिट्स, एविक्शन पॉलिसी और शार्डिंग सेट करें; मनमाने ढंग से बड़े JSON एट्रिब्यूट्स से बचें।
- कंसिस्टेंसी और रिकवरी: मॉडल वर्ज़न और राइट इवेंट्स को रिकॉर्ड करें; स्नैपशॉट रीस्टोर के बाद डायमेंशन्स, एलिमेंट काउंट और सैंपल किए गए रिकॉल को वेरिफ़ाई करें; विफल अपडेट्स से आधे-नए एट्रिब्यूट्स नहीं छूटने चाहिए।
- क्वालिटी और फ़ॉलबैक: लेबल्ड डेटा पर Recall@k, फ़िल्टर्ड हिट रेट और p95 लेटेंसी को मापें; जब Redis या फ़िल्टरिंग अनुपलब्ध हो, तो कीवर्ड रिट्रीवल या पुराने स्नैपशॉट पर स्विच करें।
मॉडल उत्तर
मैं सेट को टेनेंट और मॉडल वर्ज़न द्वारा की (key) करूंगा, एलिमेंट IDs को स्थिर रखूंगा और वेक्टर डायमेंशन को फिक्स करूंगा। राइट करने पर, मैं डायमेंशन और मॉडल वर्ज़न को वैलिडेट करूंगा, VADD के साथ वेक्टर को इडेम्पोटेंटली अपडेट करूंगा, फिर VSETATTR के साथ वर्ष, इन्वेंट्री और टेनेंट एट्रिब्यूट्स स्टोर करूंगा; डिलीशन VREM का उपयोग करता है। सर्विस k से थोड़े अधिक कैंडिडेट्स का अनुरोध करने से पहले टेनेंट कंस्ट्रेंट्स को वैलिडेट करती है:
VSIM products:{tenant}:{model} VALUES 3 0.12 0.08 0.44 COUNT 50 WITHSCORES FILTER ".year >= 2024 && .stock > 0"मैं प्रति-टेनेंट लिमिट्स के साथ डायमेंशन्स, एलिमेंट काउंट, HNSW जानकारी और एट्रिब्यूट मेमोरी को ट्रैक करूंगा। बेंचमार्क क्वालिटी बेसलाइन के रूप में सटीक ब्रूट-फ़ोर्स सर्च का उपयोग करके Recall@k, फ़िल्टर्ड हिट रेट, p95/p99 लेटेंसी, रीड/राइट थ्रूपुट और रिकवरी टाइम को मापता है। FP32 ट्रांसपोर्ट लिटिल-एंडियन एन्कोडिंग का उपयोग करता है, या ब्लॉब एंडिएननेस अंतर से बचने के लिए VALUES का उपयोग करता है। यदि Redis, फ़िल्टरिंग या मॉडल-वर्ज़न कम्पैटिबिलिटी विफल हो जाती है, तो मैं कीवर्ड रिट्रीवल या पिछले स्नैपशॉट पर फ़ॉलबैक करूंगा और रिज़ल्ट सोर्स को रिकॉर्ड करूंगा।
सामान्य गलतियाँ
- बिना डायमेंशन, k, फ़िल्टर या क्वालिटी मेट्रिक्स के “HNSW तेज़ है” कहना।
- एट्रिब्यूट फ़िल्टर को मनमाना SQL मानना और एक्सप्रेशन लिमिट्स या टेनेंट आइसोलेशन को अनदेखा करना।
- एक ही वेक्टर सेट में मनमाने डायमेंशन्स के मॉडल आउटपुट्स लिखना।
- FP32 एंडिएननेस, JSON एट्रिब्यूट साइज़ और HNSW मेमोरी कॉस्ट को नज़रअंदाज़ करना।
- कोई पुराना इंडेक्स, कीवर्ड या स्नैपशॉट-रिकवरी फ़ॉलबैक न होना।
एक मज़बूत उत्तर राइट्स, क्वेरीज़, कैपेसिटी, कंसिस्टेंसी और क्वालिटी वैलिडेशन को जोड़ता है; Redis कमांड सीमाओं को स्पष्ट करता है; और मेजरेबल फ़ॉलबैक व्यवहार प्रदान करता है। एक कमज़ोर उत्तर बिना किसी डेटा कॉन्ट्रैक्ट या ऑपरेटिंग मेट्रिक्स के केवल “वेक्टर डेटाबेस में फ़िल्टर जोड़ें” कहता है।
फ़ॉलो-अप प्रश्न और उत्तर
हर बिज़नेस फ़ील्ड को एट्रिब्यूट के रूप में क्यों न स्टोर करें?
एट्रिब्यूट्स फ़िल्टरिंग में भाग लेते हैं और मेमोरी की खपत करते हैं। इंडेक्स ब्लोट और प्राइवेसी स्प्रेड से बचने के लिए केवल कैंडिडेट-फ़िल्टर फ़ील्ड्स रखें, फिर प्राइमरी स्टोर से ID द्वारा विवरण प्राप्त करें।
क्या होगा यदि कोई मॉडल अपग्रेड डायमेंशन को बदल देता है?
नए मॉडल के लिए एक स्वतंत्र key या वर्ज़न स्पेस बनाएं, इसे ड्यूल-राइट करें और इवैल्यूएट करें, फिर Recall@k, लेटेंसी और कॉस्ट गेट्स पास होने के बाद स्विच करें। एक सेट में कभी भी डायमेंशन्स को मिक्स न करें।
क्या होगा यदि कोई स्ट्रिक्ट फ़िल्टर कोई परिणाम नहीं देता है?
एक स्पष्ट ज़ीरो-रिज़ल्ट रीज़न और मेट्रिक रिटर्न करें। प्रोडक्ट-स्वीकृत क्रम में शर्तों को रिलैक्स करें या कीवर्ड रिट्रीवल पर स्विच करें; कभी भी चुपचाप ऐसे परिणाम न लौटाएं जो टेनेंट या इन्वेंट्री कंस्ट्रेंट्स का उल्लंघन करते हों।
इंटरव्यू चेकलिस्ट
एक-वाक्य का निष्कर्ष
वेक्टर सेट को स्पष्ट डायमेंशन, एट्रिब्यूट और कैपेसिटी कॉन्ट्रैक्ट्स वाले एक रिट्रीवल कंपोनेंट के रूप में ट्रीट करें, फिर कंट्रोलेबल सर्च के लिए क्वालिटी बेसलाइन्स और सेफ़ फ़ॉलबैक का उपयोग करें।