Rumah > Soal Jawab > teks badan
1 Kini terdapat fail 300M Data di dalamnya perlu dibaca baris demi baris dan diproses untuk setiap baris (ia tidak boleh dijadikan idempoten). Tetapi saya takut bahawa sistem akan ditutup semasa pemprosesan, dan saya tidak tahu baris mana yang hendak dibaca lagi, saya takut baris yang telah diproses sebelum ini akan diproses semula. yang saya fikirkan sekarang ialah membaca satu baris, memproses satu baris, dan memadam baris dengan serta-merta. Mari lihat jika mana-mana pakar mempunyai penyelesaian yang baik.
//Saya ingin membaca satu baris dan memadam satu baris. Atau adakah penyelesaian yang lebih baik untuk mengelak daripada melaksanakan baris yang sama dua kali
$fp = fopen($fileName, "r");
if (!$fp) {
return -1;
}
$max = 40960; //40k
while (!feof($fp)) {
$line = fgets($fp, $max);
}
淡淡烟草味2017-06-26 10:51:01
Memandangkan ia ditetapkan untuk membaca baris demi baris, mengapa tidak menulis skrip untuk membahagikan fail kepada berbilang fail kecil (perhatikan penamaan, seperti perintah Linux
中的 split
), dan kemudian tulis skrip untuk menggelungkan operasi membaca.
伊谢尔伦2017-06-26 10:51:01
Saya rasa anda boleh mencapai kesan yang anda inginkan dengan cara lain: anda boleh membaca baris, dan selepas memproses garisan, tambah simbol khas selepas garisan. Menggulung setiap baris akan memberitahu anda baris mana yang telah diproses. Jika program anda hang, apabila anda melaksanakannya semula, terus cari tempat terakhir di mana simbol khas muncul. Kemudian baris seterusnya di sini adalah tempat anda harus memulakan pelaksanaan.
ringa_lee2017-06-26 10:51:01
Tulis fail berasingan untuk merekodkan lokasi pemprosesan Anda juga boleh merekodkan nombor baris dan mengimbangi keseluruhan fail.
Menukar fail semasa membaca adalah terlalu perlahan.