मुझे निम्नलिखित समस्या है: मेरे पास 2 मिलियन से अधिक रिकॉर्ड वाला एक डेटाबेस है। प्रत्येक रिकॉर्ड में एक स्ट्रिंग फ़ील्ड X होता है और मैं उन रिकॉर्डों की एक सूची प्रदर्शित करना चाहता हूं जिनके लिए फ़ील्ड X में एक निश्चित स्ट्रिंग होती है। प्रत्येक रिकॉर्ड आकार में लगभग 500 बाइट्स है।
इसे और अधिक ठोस बनाने के लिए: मेरे आवेदन के जीयूआई में मेरे पास एक टेक्स्ट फ़ील्ड है जहां मैं एक स्ट्रिंग दर्ज कर सकता हूं। पाठ फ़ील्ड के ऊपर मेरे पास (पहली N, उदा 100) रिकॉर्ड प्रदर्शित करने वाली एक तालिका है जो पाठ क्षेत्र में स्ट्रिंग से मेल खाती है। जब मैं टेक्स्ट फ़ील्ड में एक वर्ण को टाइप या डिलीट करता हूं, तो तालिका सामग्री को फ्लाई पर अपडेट किया जाना चाहिए।
मुझे आश्चर्य है कि उपयुक्त सूचकांक संरचनाओं और / या कैशिंग का उपयोग करके ऐसा करने का एक प्रभावी तरीका है। जैसा कि ऊपर बताया गया है, मैं केवल क्वेरी से मेल खाने वाले पहले N आइटम को प्रदर्शित करना चाहता हूं। इसलिए, N छोटे के लिए पर्याप्त है, यह डेटाबेस से मिलान आइटम लोड करने वाला एक बड़ा मुद्दा नहीं होना चाहिए। इसके अलावा, मुख्य मेमोरी में कैशिंग आइटम तेजी से पुनर्प्राप्ति कर सकते हैं।
मुझे लगता है कि मुख्य समस्या यह है कि पैटर्न स्ट्रिंग को देखते हुए मिलान वाले आइटम को जल्दी से कैसे खोजें। क्या मैं कुछ डीबीएमएस सुविधाओं पर भरोसा कर सकता हूं, या क्या मुझे खुद में कुछ इन-मेमोरी इंडेक्स बनाने होंगे? कोई विचार?
संपादित करें
मैंने पहला प्रयोग किया है। मैंने रिकॉर्ड्स को अलग-अलग पाठ फ़ाइलों (प्रति फ़ाइल 200 से अधिक रिकॉर्ड) में विभाजित किया है और फ़ाइलों को अलग-अलग निर्देशिकाओं में डाल दिया है (मैंने निर्देशिका पेड़ का निर्धारण करने के लिए एक डेटा फ़ील्ड की सामग्री का उपयोग किया है)। मैं लगभग 40000 निर्देशिकाओं में लगभग 50000 फाइलों के साथ अंत करता हूं। मैंने फ़ाइलों को अनुक्रमित करने के लिए ल्यूसिन को चलाया है। Lucene डेमो प्रोग्राम के साथ एक स्ट्रिंग के लिए खोज बहुत तेज है। बंटवारे और अनुक्रमण में कुछ मिनट लगे: यह मेरे लिए पूरी तरह स्वीकार्य है क्योंकि यह एक स्थिर डेटा सेट है जिसे मैं क्वेरी करना चाहता हूं।
अगला कदम ल्यूसीन को मुख्य कार्यक्रम में एकीकृत करना है और प्रासंगिक रिकॉर्ड को मुख्य मेमोरी में लोड करने के लिए ल्यूसीन द्वारा लौटाए गए हिट का उपयोग करना है।