2012-03-17 15 views
6

मैं NHibernate.Search असेंबली का उपयोग कर रहा हूं और कई वेब सर्वरों के साथ इसका उपयोग करने के आसपास सर्वोत्तम प्रथाओं की तलाश में हूं।NHibernate खोज - एकाधिक वेब सर्वर

हमारे पास हमारे वेब सर्वर पर उत्पन्न होने वाली इंडेक्स को संभालने के लिए बहुत सारी जगह है, इसलिए मैं सोच रहा हूं कि प्रत्येक वेब सर्वर पर इंडेक्स होने का सबसे अच्छा मार्ग है। फिर कक्षाएं जिन्हें मैं अनुक्रमणित कर रहा हूं, एक संस्करण कॉलम जोड़ें। मेरा एकमात्र सवाल यह है कि यदि मैं ऐसा करता हूं, तो NHibernate होगा। नवीनतम रिकॉर्ड खींचने के लिए खोज स्मार्ट हो और अगर यह कहें कि वेब सर्वर ए ने रिकॉर्ड अपडेट किया है और वेब सर्वर बी की अनुक्रमणिका पुरानी है?

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

दूसरों को NHBernate.Search और/या Lucene.NET अनुक्रमणिका के साथ इस समस्या को कैसे हल किया जा रहा है?

उत्तर

3

जिस पल में आपने अपनी इंडेक्स को विभिन्न मशीनों में डालने का निर्णय लिया है, आपने "वितरित खोज" समस्या पेश की है। प्रतिकृति, अनावश्यकता, प्रबंधन, निगरानी, ​​खोज एकत्रीकरण जैसी चीजें महत्वपूर्ण और रोचक समस्याएं बनती हैं जिन्हें आपको संबोधित करने की आवश्यकता होती है।

ने कहा, Solr समस्या के लिए अनुशंसित समाधानों में से एक है। अधिक, SolrNet इसे निबर्ननेट के साथ एकीकृत करने में आपकी सहायता कर सकता है।

मैंने दोनों परियोजनाओं को निबर्ननेट के साथ संयोजन में उपयोग किया है और यह शुरुआत में थोड़ा उलझन में हो सकता है लेकिन यह बाद में भुगतान करता है।

आपके मामले में, आप संभावित रूप से अपने वेब सर्वर में सोलर चला सकते हैं।

+0

सुंदर! मैंने अभी तक सौर में देखने के लिए समय नहीं लिया था। मैं इस बात के साथ सोच रहा था कि "आपको कई सर्वरों से ल्यूसीन इंडेक्स में कई एनएचबीरनेट परिवर्तनों को सिंक्रनाइज़ करने की आवश्यकता है - इसलिए आपको शायद कुछ कस्टम बनाना होगा।" ऐसा लगता है कि सोलर में "कुछ" पहले ही बनाया जा चुका है। –

+0

मैं इस [लिंक के बारे में लिंक] पर चला गया (http://www.lucidimagination.com/content/scaling-lucene-and-solr)। उद्धरण: "अधिकांश अनुप्रयोगों के लिए, यदि आप ल्यूसीन के साथ स्केलेबल समाधान विकसित करना शुरू करते हैं, तो आप होम ब्रू सर्च इंजन का निर्माण शुरू करते हैं। यह आमतौर पर बुद्धिमान नहीं है। ... ल्यूसीन को ठीक से स्केल करने के लिए पर्याप्त मात्रा में काम शामिल है एकाधिक मशीनें सोलर ने इनमें से अधिकतर किया है, साथ ही साथ कई अन्य उच्च स्तर के काम भी किए हैं, और इसका लाभ उठाना बुद्धिमानी है। " इस दिशा में मुझे इंगित करने के लिए धन्यवाद! –

+0

यह बहुत अच्छा है। अब इस मार्ग को ले जाएगा। सलाह के लिये धन्यवाद। – Brandon

0

आपका पहला विचार काम नहीं करेगा। खेत के नोड एक दूसरे के साथ संवाद नहीं करते हैं। वे साझा संसाधनों पर निर्भर करते हैं क्योंकि द्वितीय स्तर के कैश है। इसके अलावा, आप अलग इंडेक्स नहीं चाहते हैं क्योंकि वे डी-सिंक्रनाइज़ किए जाएंगे।

साझा फ़ाइल स्थान जाने का तरीका है। जहां तक ​​अनावश्यकता का सवाल है, मुझे लगता है कि भंडारण के लिए अनावश्यकता काफी मामूली है, आप एक RAID array से शुरू कर सकते हैं

1

हम मास्टर/स्लेव दृष्टिकोण का उपयोग करते हैं जो NHibernate Search और Lucene.net द्वारा समर्थित है।

प्रत्येक वेब सर्वर में इंडेक्स की दास प्रति है और कोई अनुक्रमण नहीं है।

हर बार जब कोई वेबसर्वर कुछ अपडेट करता है, तो यह बैकएंड सेवा (हम एमएसएमक के साथ राइनो सर्विसबस का उपयोग करते हैं) को संदेश भेजता है जो इंडेक्सिंग (अद्यतन ऑब्जेक्ट लोड करके और इसे फिर से अनुक्रमणित करके) करता है।

प्रत्येक 10 सेकंड (हमें अद्यतित खोजों की आवश्यकता है - 30 मिनट की अनुग्रह अवधि के लिए यह सामान्य प्रथा है) वेबसर्वर इंडेक्स के नए संस्करणों की जांच करेगा और यदि आवश्यक हो तो उसे लाएगा। यह बहुत अच्छी तरह से काम करता है क्योंकि परिवर्तन बढ़ते हैं, इसलिए पूर्ण इंडेक्स की एक पुल केवल तभी जरूरी है जब हम अनुकूलन या कुल पुन: अनुक्रमणिका करते हैं।

यदि आपको बेहतर गति की आवश्यकता है - तो आप वेबसर्वर पर रैम-कार्यान्वयन का उपयोग करके इसे अनुकूलित कर सकते हैं - लेकिन 32 एमबी इंडेक्स पर काफी जटिल वाइल्डकार्ड खोजों के साथ हम अभी भी प्रश्नों के लिए 10 एमएस से नीचे हैं।

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

संबंधित मुद्दे