Buat database MySQL dengan tabel tunggal yang memiliki bidang tunggal. Kemudian impor file Anda ke dalam basis data. Ini akan membuatnya sangat mudah untuk mencari garis tertentu.
Saya tidak berpikir hal lain bisa lebih cepat (jika headdan tailsudah gagal). Pada akhirnya, aplikasi yang ingin mencari baris nharus mencari melalui seluruh file hingga ditemukan nbaris baru. Tanpa semacam pencarian (indeks-baris ke byte diimbangi ke dalam file) tidak ada kinerja yang lebih baik dapat dicapai.
Mengingat betapa mudahnya membuat database MySQL dan mengimpor data ke dalamnya, saya merasa ini adalah pendekatan yang layak.
Inilah cara melakukannya:
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 akan menjadi file yang ingin Anda baca.
Sintaks yang benar untuk mengimpor file dengan nilai batas-tab pada setiap baris, adalah:
LOAD DATA INFILE '/tmp/my_large_file' INTO TABLE helperDb.helperTable FIELDS TERMINATED BY '\n' (lineContent);
Keuntungan utama lainnya adalah, jika nanti Anda memutuskan untuk mengekstrak rangkaian baris lain, Anda tidak perlu menunggu berjam-jam untuk pemrosesan lagi (kecuali jika Anda menghapus database tentu saja).