2008-10-02 13 views
8

यहां मेरी समस्या है, मुझे लॉग का एक सेट मिला है जो काफी तेज़ी से बढ़ सकता है। वे हर दिन अलग-अलग फाइलों में विभाजित होते हैं, और फाइल आसानी से आकार में एक छिद्र तक बढ़ सकती हैं। आकार को कम रखने में मदद के लिए, 30 दिनों से अधिक की प्रविष्टियों को साफ़ कर दिया गया है।लॉग पर फास्ट टेक्स्ट सर्च

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

क्या कोई संसाधन है जो मैं देख सकता हूं जो मदद कर सकता है? मैं वास्तव में एक मानक एल्गोरिदम की तलाश में हूं जो समझाएगा कि मुझे इंडेक्स बनाने और खोज के लिए इसका उपयोग करने के लिए क्या करना चाहिए।

संपादित करें:
Grep काम नहीं करेगा क्योंकि इस खोज को क्रॉस-प्लेटफ़ॉर्म एप्लिकेशन में एकीकृत करने की आवश्यकता है। इसमें कोई बाहरी कार्यक्रम शामिल नहीं है जिसमें मैं किसी भी बाहरी कार्यक्रम को स्विंग करने में सक्षम हूं।

जिस तरह से यह काम करता है यह है कि एक वेब फ्रंट एंड है जिसमें लॉग ब्राउज़र है। यह एक कस्टम सी ++ वेब सर्वर बैकएंड से बात करता है। इस सर्वर को उचित समय में लॉग खोजना होगा। वर्तमान में लॉग के कई गीग्स के माध्यम से खोज करने में उम्र लगती है।

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

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

+0

इसे grep के साथ बाहरी उपकरण के रूप में आज़माएं, यदि यह तेज़ है तो आप gnu grep स्रोत कोड ले सकते हैं और इसे सीधे अपने ऐप में एकीकृत कर सकते हैं। – gbjbaanb

+0

मैं चाहूंगा, लेकिन अगर मैं इसे शामिल करता हूं तो यह एक कानूनी मुद्दा है, मैंने उस रास्ते को नीचे जाने के बारे में पूछा है। – ReaperUnreal

उत्तर

2

एल्यूसीन अपनी चीज करने के लिए उपयोग किए जाने वाले एल्गोरिदम देखें। हालांकि, वे बहुत सरल होने की संभावना नहीं है। मुझे एक समय में इन एल्गोरिदम में से कुछ का अध्ययन करना पड़ा, और उनमें से कुछ बहुत परिष्कृत हैं।

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

इसके अलावा, वास्तव में कौन सी परवाह करता है अगर सूचकांक स्वयं फाइलों से बड़ा है? यदि आपका सिस्टम वास्तव में इतना बड़ा है, तो बहुत अधिक गतिविधि के साथ, सूचकांक के लिए दुनिया के अंत में कुछ दर्जन गीगा है?

5

grep आमतौर पर बड़े लॉग (कभी-कभी 12 जी +) के साथ मेरे लिए बहुत अच्छा काम करता है। आप विंडोज here के लिए भी एक संस्करण पा सकते हैं।

+0

दाएं। यह मेरा पहला विचार भी है, लेकिन ओपी को वास्तव में यह सुझाव देने के लिए थोड़ा और संदर्भ प्रदान करने की आवश्यकता है कि यह सुझाव कितना उपयोगी हो सकता है। – dmckee

0

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

ये खोज अब कितनी देर ले रही हैं?

2

आप शायद अपने आवेदन में कुछ प्रकार के अनुक्रमण खोज इंजन को एकीकृत करना चाहते हैं। वहाँ दर्जनों हैं, Lucene बहुत लोकप्रिय लगता है। कुछ और सुझाव के लिए इन दो सवालों की जाँच करें:

Best text search engine for integrating with custom web app?

How do I implement Search Functionality in a website?

-2

Splunk लॉग के बहुत सारे के माध्यम से खोज के लिए अच्छा है।आपके उद्देश्य के लिए अधिक हो सकता है। आप डेटा की मात्रा (लॉग के आकार) के अनुसार भुगतान करते हैं, जिसे आप संसाधित करना चाहते हैं। मुझे पूरा यकीन है कि उनके पास एक एपीआई है इसलिए यदि आप नहीं चाहते हैं तो आपको अपने फ्रंट-एंड का उपयोग करने की आवश्यकता नहीं है।

0

आप बीएसडी grep के लिए स्रोत देखना चाहते हैं। आप grep पर भरोसा नहीं कर सकते हैं, लेकिन कुछ भी नहीं कहता है कि आप समान कार्यक्षमता को फिर से नहीं बना सकते हैं, है ना?

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