- परफ़ॉर्मेंस-क्रिटिकल applications के लिए C में लिखा गया अल्ट्रा-फास्ट स्ट्रिंग सर्च टूल
- pattern की विशेषताओं और hardware के अनुसार सबसे उपयुक्त algorithm को dynamically चुनता है
- SSE4.2/AVX2 जैसे hardware का उपयोग करके अधिकतम throughput प्रदान करता है
- बड़े पैमाने के support के लिए फ़ाइलों को chunks में बाँटकर multithreading parallel processing करता है
- pattern के अनुसार सबसे उपयुक्त search algorithm का उपयोग
- Boyer-Moore-Horspool: सामान्य pattern matching के लिए उपयुक्त
- Knuth-Morris-Pratt (KMP) algorithm: छोटे pattern के लिए optimized
- Rabin-Karp: लंबे pattern के लिए प्रभावी
- SIMD acceleration: SSE4.2, AVX2 समर्थित hardware पर बेहतर performance
- memory-mapped file I/O के उपयोग से system calls को न्यूनतम कर throughput को अधिकतम करता है
- लचीले search options
- case-sensitive और case-insensitive search
- फ़ाइल search के अलावा सीधे string search भी संभव
- केवल matches की संख्या दिखाने वाला mode उपलब्ध
उपयोग का तरीका
krep [OPTIONS] PATTERN [FILE]
- log file में “error” खोजें:
krep "error" system.log
- case-insensitive तरीके से 8 threads का उपयोग करके search:
krep -i -t 8 "ERROR" large_logfile.log
- match count दिखाएँ (matched lines प्रिंट नहीं होंगी):
krep -c "TODO" *.c
- फ़ाइल नहीं, बल्कि string में सीधे search:
krep -s "Hello" "Hello world"
command line options
- -i : case-insensitive search
- -c : matched lines प्रिंट किए बिना केवल match count दिखाएँ
- -t NUM : NUM threads का उपयोग करें (default: 4)
- -s STRING : फ़ाइल के बजाय string में search
- -v : version जानकारी दिखाएँ
- -h : help दिखाएँ
benchmark
krep का performance सामान्य स्ट्रिंग सर्च टूल्स की तुलना में बहुत उत्कृष्ट है।
- krep को 1GB text file में सामान्य pattern खोजने में 0.78 सेकंड लगे, जो 1,282MB प्रति सेकंड की गति है
- grep को उसी काम में 2.95 सेकंड लगे, और इसकी गति 339MB प्रति सेकंड रही
- ripgrep को 1.48 सेकंड लगे, और इसकी गति 676MB प्रति सेकंड रही
- →
krep, grep से लगभग 3.8 गुना तेज़ है, और ripgrep से लगभग 1.9 गुना तेज़ है (hardware और file की विशेषताओं के अनुसार performance बदल सकता है)
नाम की उत्पत्ति
- “krep” आइसलैंडिक शब्द “kreppan” से आया है
- इसका अर्थ है “तेज़ी से पकड़ लेना”
- यह efficient pattern recognition का प्रतीक है
- छोटा और संक्षिप्त command होने से इसे टाइप करना आसान है
2 टिप्पणियां
अगर regex support छोड़ने के बाद भी यह ripgrep से सिर्फ 2 गुना ही तेज़ हो पाता है, तो इसकी उपयोगिता थोड़ी कम लगती है.
मुझे लगता है मैं regex सपोर्ट वाले ripgrep का ही इस्तेमाल करता रहूंगा.
Hacker News राय
CPU फीचर्स (जैसे: AVX2) को runtime पर detect किया जाना चाहिए
krep प्रोजेक्ट पर ब्लॉग पोस्ट का परिचय
test cases का महत्व
build समस्या हल करने के बाद benchmark परिणाम
match frequency ज़्यादा होने वाला benchmark प्रयास
अतिरिक्त benchmark प्रयास
ripgrep का algorithm और memory map का उपयोग
benchmark परिणामों पर संदेह
krep नाम पर राय