90k पैटर्न के मुकाबले 1250 स्ट्रिंग्स का मिलान इतना धीमा क्यों है?


12

मेरे तार फ़ाइल पथ हैं जैसे s/14/11/13/15/n7ce49B_235_25ed2d70.jpg; मेरे पैटर्न काफी सरल हैं, सभी को पसंद है n7ce49B_.+

मैं डेल DL360G7 सर्वर पर डेबियन 6.0.10 केGNU grep 2.6.3 तहत चल रहा हूं (मैं इसे केवल 15k HDDs के साथ इस मशीन को पूर्णता की भावना देने के लिए उल्लेख करता हूं), और यह आदेश: बस पूरा नहीं कर सकता - सर्वर बहुत बुरी तरह से स्वैप करता है। 20k पैटर्न के साथ इसमें 3 घंटे से अधिक समय लगता है।time LC_ALL=C grep -E -f path_to_patterns_file path_to_strings_file

यह मेरे लिए अनुचित है।

टिप्पणी के अनुरोध के अनुसार, फ़ाइल है : फ़ाइल पथ 20k पैटर्न

कोई भी इनपुट लाइनों और पैटर्न की संख्या का परीक्षण और समायोजन कर सकता है:

xxd -p /dev/urandom | fold -sw 100 | head -n 1250 |
  grep -Ef <(xxd -p /dev/urandom | fold -sw 10 | head -n 20000)

3
आपके शीर्षक में 90k, वर्णन में 20Kपैटर्न हैं
RomanPerekhrest

2
खैर, 90 k मेरा मूल इनपुट आकार है और इससे मेरी मशीन इतनी कड़ी हो जाती है कि मुझे उस grep को मारना पड़ता है। फिर मैंने इसे 20k फाइलों में विभाजित करने की कोशिश की और यह अभी भी बहुत ही भयानक रूप से काम करता है ... लेकिन आपने सही कहा कि मेरा विवरण असंगत है।
स्कॉरसॉन

2
कृपया स्पष्ट करें कि क्या सर्वर ओवरटैक्स हो गया होगा (कुछ अन्य संसाधन भूखे कार्य करने के दौरान) grep
अगस्त

2
एक साथ पुन: पेश कर सकते हैं xxd -p /dev/urandom | fold -sw 100 | head -n 1250 | grep -Ef <(xxd -p /dev/urandom | fold -sw 10 | head -n 20000)। ऐसा लगता है कि समय regexps संकलन और स्मृति का एक बहुत आवंटित करने में खर्च किया जाता है। इसके -Fबजाय -E, यह तात्कालिक है।
स्टीफन चेज़लस

2
उस मामले के लिए, यह नहीं के n7ce49B_.+बराबर हैn7ce49B_.
स्टीफन Chazelas

जवाबों:


15

आप GNU grep ( बग # 22357 ) के पुराने संस्करणों में एक प्रदर्शन समस्या में भाग गए , जिसे इस प्रतिबद्ध द्वारा संबोधित किया गया था , 2.28 में जारी किया गया था, हालांकि उस बदलाव ने कुछ प्रतिगमन पेश किए , जिससे आप GNU grep3.0 या नया प्राप्त करना चाहेंगे ।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.