在PHP中,我使用fopen()
,fgets()
和fclose()
來逐行讀取文件。它運作良好。但是我有一個腳本(從CLI運行)必須處理三百個5GB文本文件。這大約是30億fgets()
。所以它工作得很好,但在這個規模下,微小的速度節省將會非常快速地加起來。所以我想知道是否有任何技巧來加速這個過程?更快的方式來逐行讀取文件?
我想到的唯一可能的事情是讓fgets()
一次讀取多行。它看起來並不像它支持的那樣,但我在理論上可以讓連續說出20個$line[] = fgets($file);
然後處理該數組。這與在一個命令中讀取多行不完全相同,因此可能沒有任何影響。但是我知道排隊你的mysql插入並將它們作爲一個巨大的插入(我將在經過更多測試和基準測試後在此腳本中實現的另一個技巧)將會節省大量時間。
你可以嘗試讀取它「緩衝區緩衝區」,並再次分開線路 – modsfabio
你嘗試使用fgetcsv函數嗎? –
對於php腳本的mmap或createfilemapping會有幫助https://github.com/calcinai/php-mmap – tommybee