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 head
dan tail
sudah gagal). Pada akhirnya, aplikasi yang ingin mencari baris n
harus mencari melalui seluruh file hingga ditemukan n
baris 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).