सब हम एक "लिखने" आपरेशन को परिभाषित करने के लिए है सबसे पहले। एक लिखने का ऑपरेशन एक बार लॉन्च ऑब्जेक्ट शुरू करने के बाद लॉक ऑब्जेक्ट करेगा और जब तक आप काम करने वाले ऑब्जेक्ट को बंद नहीं करेंगे तब तक जारी रहेगा। जैसे कि इंडेक्सवाइटर बनाने और किसी दस्तावेज़ को अनुक्रमणित करने से लेखन लॉक को ऑब्जेक्ट करने का कारण बनता है और यह तब तक लॉक रखेगा जब तक आप इंडेक्सवाइटर बंद नहीं करते।
अब हम लॉक के बारे में बात कर सकते हैं। यह लॉक ऑब्जेक्ट एक फ़ाइल आधारित लॉक है। मिथज़ की तरह पहले उल्लेख किया गया है, वहां बनाई गई 'write.lock' नामक एक फ़ाइल है जिसे बनाया गया है। एक बार जब एक लॉक लॉक ऑब्जेक्ट किया जाता है तो यह अनन्य है! लॉक हटा दिए जाने तक प्रतीक्षा करने के लिए यह लॉक सभी इंडेक्स संशोधित संचालन (इंडेक्सवाइटर, और इंडेक्स रीडर से कुछ विधियों) का कारण बनता है।
कुल मिलाकर आप और एक सूचकांक पर एकाधिक पढ़ते हैं। आप एक ही समय में भी पढ़ और लिख सकते हैं, कोई समस्या नहीं। लेकिन कई लेखकों के साथ एक समस्या है। यदि एक थ्रेड लॉक के लिए बहुत लंबा इंतजार कर रहा है तो यह समय समाप्त हो जाएगा।
1) संभव समाधान # 1 प्रत्यक्ष संचालन
आप सुनिश्चित करें कि आपके अनुक्रमण संचालन छोटी और जल्दी कर रहे हैं कर रहे हैं, तो आप सिर्फ एक ही समय में एक ही सूचकांक उपयोग करने में सक्षम हो सकता है। अन्यथा आपको इस बारे में सोचना होगा कि आप अनुप्रयोगों के अनुक्रमण संचालन को व्यवस्थित करना चाहते हैं।
2) संभव समाधान # 2 वेब सेवा
के बाद से आप एक वेब समाधान के साथ काम कर रहे हैं यह एक वेब सेवा बनाने के लिए संभव हो सकता है। इस वेब सेवा को लागू करते समय मैं इंडेक्सिंग के लिए एक वर्कर थ्रेड समर्पित करूंगा। मैं काम को शामिल करने के लिए एक कार्य कतार तैयार करूंगा और यदि कतार में कई नौकरियां होंगी, तो उन्हें सभी को पकड़ना चाहिए और उन्हें बैच में करना चाहिए। यह सभी समस्याओं को हल करेगा।
3), एक और सूचकांक बनाने तो विलय
सांत्वना आवेदन करता सूचकांक पर भारी काम आप कंसोल आवेदन आप कंसोल आवेदन में एक अलग सूचकांक बनाने और उसके बाद मर्ज कर सकते हैं होने की जांच के लिए सक्षम हो सकता है, तो indexWriter.AddIndexes का उपयोग कर कुछ सुरक्षित निर्धारित समय पर इंडेक्स।
यहां से आप इसे दो तरीकों से कर सकते हैं, आप सीधे सूचकांक में विलय कर सकते हैं। या आप एक तीसरी अनुक्रमणिका बनाने के लिए विलय कर सकते हैं, और फिर जब यह अनुक्रमणिका तैयार हो तो मूल अनुक्रमणिका को प्रतिस्थापित करें। आपको यह सुनिश्चित करने के लिए कि आप भारी उपयोग में कुछ लॉक नहीं करेंगे और अन्य लेखन कार्यों के लिए टाइमआउट का कारण बनने के लिए यहां क्या कर रहे हैं, इस बारे में सावधान रहना होगा।
4) सूचकांक & खोजें कई अनुक्रमित
व्यक्तिगत तौर पर मैं लोगों को अपने अनुक्रमणिका को अलग करने की जरूरत है। यह कार्यक्रमों की जिम्मेदारियों को अलग करने में मदद करता है और समय को कम करता है और सभी इंडेक्स के लिए एक बिंदु रखने के रखरखाव करता है। उदाहरण के लिए, यदि आपका कंसोल एप्लिकेशन केवल कुछ फ़ील्ड में जोड़ने के लिए ज़िम्मेदार है या आप इंडेक्स को विस्तारित करने के लिए जिम्मेदार हैं, तो आप इंडेक्स को अलग कर सकते हैं, लेकिन प्रत्येक दस्तावेज़ में आईडी फ़ील्ड का उपयोग करके पहचान बनाए रख सकते हैं। अब इसके साथ आप मल्टीशेचर क्लास का उपयोग करके एकाधिक इंडेक्स खोजने के लिए अंतर्निहित समर्थन का लाभ उठा सकते हैं। या यदि आपकी इच्छा है तो एक अच्छी समानांतर मल्टी सर्च क्लास भी है जो दोनों इंडेक्स को एक बार में खोज सकती है।
5) SOLR
में
कुछ और है कि आप सूचकांक के लिए एकमात्र स्थान बनाए रखने के अपने मुद्दे मदद कर सकते हैं, तो आप एक SOLR सर्वर के साथ काम करने के लिए अपने कार्यक्रम को बदल सकता है देखो। http://lucene.apache.org/solr/ एक अच्छी SOLRNET http://code.google.com/p/solrnet/ लाइब्रेरी भी है जो इस स्थिति में सहायक हो सकती है। हालांकि मुझे सोलर के साथ अनुभव नहीं हुआ है, लेकिन मैं इस धारणा के तहत हूं कि इससे आपको इस तरह की स्थिति का प्रबंधन करने में मदद मिलेगी। इसके अलावा अन्य लाभ भी हैं जैसे हिट हाइलाइटिंग और संबंधित आइटमों को खोजना "अधिक पसंद यह", या वर्तनी जांच प्रदान करना।
मुझे यकीन है कि अन्य विधियां हैं लेकिन ये सभी हैं जिनके बारे में मैं सोच सकता हूं। कुल मिलाकर यह आपका समाधान इस बात पर निर्भर करता है कि कितने लोग लिख रहे हैं और आपको जिस खोज इंडेक्स की आवश्यकता है, उसे अद्यतित कैसे करें। कुल मिलाकर यदि आप बाद के समय के लिए कुछ परिचालन रोक सकते हैं और किसी भी स्थिति में कुछ बैच ऑपरेशन आपको सबसे अधिक प्रदर्शन देंगे। मेरा सुझाव यह समझना है कि आप किसके साथ काम करने और वहां से जाने में सक्षम हैं। सौभाग्य
वाह। धन्यवाद। मैं ऐसे समाधान के बारे में सोच रहा था जो किसी भी तरह से 2_ से संबंधित है। इस बीच मेरे पास अन्य प्रश्न है: "समानांतर MultiSearch या मल्टीशेचर समर्थन कितने अनुक्रमणिका कर सकते हैं"? –