यहां मेरी समस्या है, मुझे लॉग का एक सेट मिला है जो काफी तेज़ी से बढ़ सकता है। वे हर दिन अलग-अलग फाइलों में विभाजित होते हैं, और फाइल आसानी से आकार में एक छिद्र तक बढ़ सकती हैं। आकार को कम रखने में मदद के लिए, 30 दिनों से अधिक की प्रविष्टियों को साफ़ कर दिया गया है।लॉग पर फास्ट टेक्स्ट सर्च
समस्या तब होती है जब मैं इन फ़ाइलों को एक निश्चित स्ट्रिंग के लिए खोजना चाहता हूं। अभी, एक बॉयर-मूर खोज असीम रूप से धीमी है। मुझे पता है कि डीटीशर्च जैसे अनुप्रयोग इंडेक्सिंग का उपयोग करके वास्तव में तेज़ खोज प्रदान कर सकते हैं, लेकिन मुझे वास्तव में यह सुनिश्चित नहीं है कि इसे लागू करने के तरीके को दोबारा स्थानांतरित किए बिना दो बार स्थानांतरित किए बिना।
क्या कोई संसाधन है जो मैं देख सकता हूं जो मदद कर सकता है? मैं वास्तव में एक मानक एल्गोरिदम की तलाश में हूं जो समझाएगा कि मुझे इंडेक्स बनाने और खोज के लिए इसका उपयोग करने के लिए क्या करना चाहिए।
संपादित करें:
Grep काम नहीं करेगा क्योंकि इस खोज को क्रॉस-प्लेटफ़ॉर्म एप्लिकेशन में एकीकृत करने की आवश्यकता है। इसमें कोई बाहरी कार्यक्रम शामिल नहीं है जिसमें मैं किसी भी बाहरी कार्यक्रम को स्विंग करने में सक्षम हूं।
जिस तरह से यह काम करता है यह है कि एक वेब फ्रंट एंड है जिसमें लॉग ब्राउज़र है। यह एक कस्टम सी ++ वेब सर्वर बैकएंड से बात करता है। इस सर्वर को उचित समय में लॉग खोजना होगा। वर्तमान में लॉग के कई गीग्स के माध्यम से खोज करने में उम्र लगती है।
संपादित करें 2: इनमें से कुछ सुझाव बहुत अच्छे हैं, लेकिन मुझे दोहराना होगा कि मैं किसी अन्य एप्लिकेशन को एकीकृत नहीं कर सकता, यह अनुबंध का हिस्सा है। लेकिन कुछ सवालों के जवाब देने के लिए, लॉग में डेटा किसी भी स्वास्थ्य-देखभाल विशिष्ट प्रारूप या इनसे संबंधित संदेशों में प्राप्त संदेशों से भिन्न होता है। मैं एक इंडेक्स पर भरोसा करना चाहता हूं क्योंकि इंडेक्स को पुनर्निर्माण करने में एक मिनट तक लग सकते हैं, वर्तमान में खोज में बहुत लंबा समय लगता है (मैंने इसे 2.5 मिनट तक देखा है)। साथ ही, इसे रिकॉर्ड करने से पहले बहुत सारे डेटा को छोड़ दिया जाता है। जब तक कि कुछ डिबग लॉगिंग विकल्प चालू नहीं होते हैं, तो लॉग संदेशों में से आधे से अधिक अनदेखा किए जाते हैं।
खोज मूल रूप से इस तरह से जाती है: वेब फ़ॉर्म पर एक उपयोगकर्ता को हालिया संदेशों की सूची (डिस्क से स्ट्रीम किए जाने पर स्ट्रीम किया जाता है, एजेक्स के लिए yay), आमतौर पर, वे संदेश खोजना चाहते हैं इसमें कुछ जानकारी के साथ, शायद एक मरीज आईडी, या कुछ स्ट्रिंग जो उन्होंने भेजी हैं, और इसलिए वे खोज में स्ट्रिंग दर्ज कर सकते हैं। खोज asychronously भेजा जाता है और कस्टम वेब सर्वर कुछ परिणामों के लिए एक समय में लॉग 1 एमबी के माध्यम से रैखिक रूप से खोजता है। जब लॉग बड़े हो जाते हैं तो इस प्रक्रिया में बहुत लंबा समय लग सकता है। और यही वह है जिसे मैं अनुकूलित करने की कोशिश कर रहा हूं।
इसे grep के साथ बाहरी उपकरण के रूप में आज़माएं, यदि यह तेज़ है तो आप gnu grep स्रोत कोड ले सकते हैं और इसे सीधे अपने ऐप में एकीकृत कर सकते हैं। – gbjbaanb
मैं चाहूंगा, लेकिन अगर मैं इसे शामिल करता हूं तो यह एक कानूनी मुद्दा है, मैंने उस रास्ते को नीचे जाने के बारे में पूछा है। – ReaperUnreal