मुझे जावास्क्रिप्ट (Node.js) (मैं क्यूब का उपयोग कर रहा हूं) में बड़े (5-10 जीबी) लॉगफाइल्स की कुछ पार्सिंग करने की आवश्यकता है।
लॉगलाइन कुछ इस तरह दिखती है:
10:00:43.343423 I'm a friendly log message. There are 5 cats, and 7 dogs. We are in state "SUCCESS".
हमें प्रत्येक पंक्ति को पढ़ने की ज़रूरत है, कुछ पार्सिंग (जैसे स्ट्रिप आउट 5
, 7
और SUCCESS
) करें, फिर अपने जेएस क्लाइंट का उपयोग करके इस डेटा को क्यूब ( https://github.com/square/cube ) में पंप करें ।
सबसे पहले, एक फाइल में पढ़ने के लिए नोड में विहित तरीका क्या है, लाइन से लाइन?
यह ऑनलाइन काफी सामान्य प्रश्न लगता है:
- http://www.quora.com/What-is-the-best-way-to-read-a-file-line-by-line-in-node-js
- नोड.जेएस में एक समय में एक फ़ाइल एक पंक्ति पढ़ें?
बहुत सारे उत्तर तृतीय-पक्ष मॉड्यूल के एक समूह को इंगित करते हैं:
- https://github.com/nickewing/line-reader
- https://github.com/jahewson/node-byline
- https://github.com/pkrumins/node-lazy
- https://github.com/Gagle/Node-BufferedReader
हालांकि, यह एक काफी बुनियादी कार्य की तरह लगता है - निश्चित रूप से, एक टेक्स्टफाइल, लाइन-बाय-लाइन में पढ़ने के लिए stdlib के भीतर एक सरल तरीका है?
दूसरे, मुझे तब प्रत्येक पंक्ति को संसाधित करने की आवश्यकता होती है (जैसे टाइमस्टैम्प को डेट ऑब्जेक्ट में बदलना, और उपयोगी फ़ील्ड निकालना)।
ऐसा करने का सबसे अच्छा तरीका क्या है, थ्रूपुट को अधिकतम करना? क्या कोई रास्ता है जो प्रत्येक पंक्ति में पढ़ने पर या इसे क्यूब पर भेजने पर ब्लॉक नहीं करेगा?
तीसरा - मैं स्ट्रिंग स्प्लिट्स का उपयोग करने का अनुमान लगा रहा हूं, और जेएस समतुल्य है (IndexOf! = -1?) रीजैक्स की तुलना में बहुत तेज होगा? क्या किसी को Node.js में भारी मात्रा में पाठ डेटा पार्स करने का अधिक अनुभव है?
चीयर्स, विक्टर