सबसे कुशल डेटा इंडेक्सिंग तकनीक क्या है


10

जैसा कि हम सभी जानते हैं कि कुछ डेटा इंडेक्सिंग तकनीकें हैं, जो कि जानी-मानी इंडेक्सिंग एप्स का उपयोग करती हैं, जैसे कि ल्यूसिन (जावा के लिए) या ल्यूसिने.नेट (.NET के लिए), मुरमुराश, बी + ट्री इत्यादि। ओरिएंटेड डेटाबेस (जिसे मैं C # के साथ थोड़ा सा लिखने / खेलने की कोशिश करता हूं), आप किस तकनीक का सुझाव देते हैं?

मैंने मुरमुरेश -2 और विशेष रूप से v3 टिप्पणियों के बारे में पढ़ा कि मुरमुर बहुत तेज़ है। इसके अलावा Lucene.Net ने इस पर अच्छी टिप्पणियां की हैं। लेकिन सामान्य रूप से उनके स्मृति पैरों के निशान के बारे में क्या? क्या कोई कुशल समाधान है जो ल्यूसिन या मुरमुरे की तुलना में कम पदचिह्न (और अगर तेजी से बेहतर है) का उपयोग करता है? या मुझे सर्वोत्तम परिणाम प्राप्त करने के लिए एक विशेष सूचकांक संरचना लिखना चाहिए?

यदि मैं अपना स्वयं का लिखने का प्रयास करता हूं, तो क्या किसी अच्छे अनुक्रमण के लिए कोई स्वीकृत पैमाना, 1% डेटा-नोड या 5% डेटा-नोड है? किसी भी उपयोगी संकेत की सराहना की जाएगी।

जवाबों:


10

मुझे लगता है कि आपने अपने प्रश्न में कुछ चीजें गड़बड़ कर दी हैं। Lucene (मैं Lucene, NET के बारे में कुछ नहीं जानता, लेकिन मुझे लगता है कि एक ही है) एक पुस्तकालय है जिसका उपयोग विश्लेषण करने के लिए किया जाता है, टोकन को विभाजित करने के लिए और बाद में उन्हें पुनः प्राप्त करने में सक्षम होने के लिए दस्तावेजों को स्टोर करने और संग्रहीत करने के लिए। ल्यूसीन के पास एक बहुत पुराना लेकिन प्रभावी मॉडल है, यह दस्तावेजों को खोजने और पुनर्प्राप्त करने के लिए उल्टे पेड़ों का उपयोग करता है। अधिक जानकारी के बिना, सभी दस्तावेजों को टोकन (शर्तों) में विभाजित किया जाता है, और प्रत्येक अवधि के लिए एक डेटा संरचना को बनाए रखा जाता है, जो सभी दस्तावेजों को संग्रहीत करता है जिसमें दिए गए शब्द शामिल हैं। डेटा संरचना के रूप में बीट्री, हैश टेबल का उपयोग किया जा सकता है और नवीनतम प्रमुख संशोधनों में आप अपने स्वयं के डेटा संरचनाओं में प्लग भी कर सकते हैं।

एक बीट्री ( आगे के विवरण के लिए विकिपीडिया पृष्ठ देखें), एक प्रकार की ट्री डेटा संरचना है, जो डेटा के बड़े हिस्से के साथ काम करने के लिए उपयुक्त है और अक्सर डिस्क पर ट्री जैसी ऑर्डर किए गए संरचनाओं को संग्रहीत करने के लिए उपयोग किया जाता है। इन-मेमोरी के लिए अन्य पेड़ बेहतर प्रदर्शन करते हैं।

मुरम हैश ( आगे के विवरण के लिए विकिपीडिया पृष्ठ देखें), हैश तालिका में प्रयुक्त हैश फ़ंक्शन का एक परिवार है। हैश टेबल का कार्यान्वयन महत्वपूर्ण नहीं है, यह एक मानक जंजीर कार्यान्वयन या अधिक उन्नत ओपन हैश एड्रेसिंग योजना हो सकती है। विचार यह है कि हैश टेबल किसी को कुंजी के अनियंत्रित सेट से तेजी से कुंजी प्राप्त करने की अनुमति देता है, और जैसे कार्यों का उत्तर दे सकता है: क्या यह कुंजी के इस सेट का महत्वपूर्ण हिस्सा है? इस कुंजी के साथ जुड़ा मूल्य क्या है?

अब अपनी मुख्य समस्या पर वापस आते हैं। आपके पास एक पुस्तकालय (Lucene) है और डेटा संरचनाओं के लिए, दोनों डेटा संरचनाएं Lucene में उपयोग की जाती हैं। अब आप देखते हैं कि इन शब्दों में आपके प्रश्न का उत्तर देना संभव नहीं है क्योंकि वे तुलनीय नहीं हैं।

हालाँकि, आप पदचिह्न और प्रश्न के प्रदर्शन के हिस्से के बारे में। सबसे पहले आपको यह जानना होगा कि आपको किस तरह के ऑपरेशन को लागू करना है।

क्या आपको केवल कुंजी के लिए मूल्य प्राप्त करने की आवश्यकता है, या क्या आपको एक सीमा में सभी तत्वों को खोजने की आवश्यकता है? दूसरे शब्दों में आपको आदेश की आवश्यकता है या नहीं? यदि आप करते हैं, एक पेड़ से मदद कर सकते हैं। यदि आप नहीं करते हैं, तो एक हैश तालिका की तुलना में, जो तेजी से उपयोग किया जा सकता है।

क्या आपके पास बहुत सारा डेटा है जो मेमोरी में फिट नहीं होता है? यदि एक डिस्क-आधारित समाधान की तुलना में हाँ (BTree की तरह) मदद करेगा। यदि आपका डेटा मेमोरी में फिट बैठता है, तो सबसे तेज़ इन-मेमोरी समाधान का उपयोग करें और डिस्क को केवल स्टोरेज (एक अलग संरचना, बहुत सरल के साथ) के रूप में उपयोग करें।


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

और अगर आप मुझे अनुमति देते हैं, जब तक कि आपकी तुलना में उच्च गुणवत्ता का स्पष्टीकरण / उत्तर नहीं है, मैं इसे उत्तर के रूप में स्वीकार करना चाहता हूं .. और BTW, Lucene.NET जावा के ल्यूसीन का एक .NET कार्यान्वयन है
sihirbazzz
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.