สร้างฐานข้อมูล MySQL ด้วยตารางเดียวซึ่งมีเขตข้อมูลเดียว จากนั้นนำเข้าไฟล์ของคุณไปยังฐานข้อมูล สิ่งนี้จะทำให้ง่ายต่อการค้นหาบรรทัด
ฉันไม่คิดว่าจะมีอะไรเร็วกว่านี้อีก (ถ้าhead
และtail
ล้มเหลวไปแล้ว) ในที่สุดแอปพลิเคชันที่ต้องการค้นหาบรรทัดn
ต้องค้นหาไฟล์ทั้งหมดจนกว่าจะพบn
บรรทัดใหม่ หากไม่มีการค้นหา (line-index to byte offset ลงในไฟล์) จะไม่มีประสิทธิภาพที่ดีกว่านี้
เมื่อพิจารณาว่ามันง่ายเพียงใดในการสร้างฐานข้อมูล MySQL และนำเข้าข้อมูลเข้ามาฉันรู้สึกว่านี่เป็นวิธีที่ปฏิบัติได้จริง
นี่คือวิธีที่จะทำ:
DROP DATABASE IF EXISTS helperDb;
CREATE DATABASE `helperDb`;
CREATE TABLE `helperDb`.`helperTable`( `lineIndex` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT, `lineContent` MEDIUMTEXT , PRIMARY KEY (`lineIndex`) );
LOAD DATA INFILE '/tmp/my_large_file' INTO TABLE helperDb.helperTable (lineContent);
SELECT lineContent FROM helperTable WHERE ( lineIndex > 45000000 AND lineIndex < 45000100 );
/tmp/my_large_file
จะเป็นไฟล์ที่คุณต้องการอ่าน
ไวยากรณ์ที่ถูกต้องในการนำเข้าไฟล์ที่มีค่าคั่นด้วยแท็บในแต่ละบรรทัดคือ:
LOAD DATA INFILE '/tmp/my_large_file' INTO TABLE helperDb.helperTable FIELDS TERMINATED BY '\n' (lineContent);
ข้อได้เปรียบที่สำคัญอีกประการหนึ่งคือถ้าคุณตัดสินใจแยกชุดของบรรทัดในภายหลังคุณไม่ต้องรอเป็นชั่วโมงในการประมวลผลอีกครั้ง (เว้นแต่คุณจะลบฐานข้อมูลของหลักสูตร)