ฉันต้องการแยกวิเคราะห์ไฟล์บันทึกขนาดใหญ่ (5-10 Gb) ใน Javascript / Node.js (ฉันใช้ Cube)
Logline มีลักษณะดังนี้:
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
) แล้วปั๊มข้อมูลนี้ใน Cube ( https://github.com/square/cube ) โดยใช้ลูกค้า JS ของพวกเขา
ประการแรกวิธีที่ยอมรับใน Node ในการอ่านไฟล์ทีละบรรทัดคืออะไร?
ดูเหมือนจะเป็นคำถามที่พบบ่อยทางออนไลน์:
- http://www.quora.com/What-is-the-best-way-to-read-a-file-line-by-line-in-node-js
- อ่านไฟล์ทีละบรรทัดใน 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 ในการอ่านไฟล์ข้อความทีละบรรทัด?
ประการที่สองฉันต้องประมวลผลแต่ละบรรทัด (เช่นแปลงเวลาประทับเป็นวัตถุวันที่และแยกช่องที่มีประโยชน์)
วิธีใดที่ดีที่สุดในการทำเช่นนี้เพื่อเพิ่มปริมาณงานสูงสุด มีวิธีใดบ้างที่จะไม่บล็อกการอ่านในแต่ละบรรทัดหรือในการส่งไปยัง Cube?
ประการที่สาม - ฉันคาดเดาโดยใช้การแยกสตริงและ JS ที่เทียบเท่ากับมี (IndexOf! = -1?) จะเร็วกว่า regexes มาก? มีใครมีประสบการณ์ในการแยกวิเคราะห์ข้อมูลข้อความจำนวนมากใน Node.js บ้าง?
ไชโยวิคเตอร์