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