php多程式結合Linux利器split命令實現把大檔案分批高效處理

OldBoy~發表於2018-02-05

有時候會遇到這樣的需求,比如log日誌檔案,這個檔案很大,甚至上百M,需要把所有的日誌拿來做統計,這時候我們如果用單程式來處理,效率會很慢。
如果我們想要快速完成這項需求,我們可以利用Linux的一個利器split,先根據這個檔案的總大小、總行數,來按照一個比例來分割,在根據分割的檔案數量,fork出一定比例合適的子程式數量分批處理,那麼效率可想而知。

linux的split可以看這篇文章來學習測試下Centos檔案切割利器_split命令及cat命令合併檔案

//shell
# split -l 1000 -d test.txt new_test.txt --verbose   //比如這裡切割了10份           
<?php
//php程式碼
//根據切割數量,fork相匹配的子程式數量
$count = 10;
for ($i = 0; $i < $count; ++$i ) {
    $pid = pcntl_fork();    //建立子程式
    //父程式和子程式都會執行下面程式碼
    if ($pid == -1) {
        //錯誤處理:建立子程式失敗時返回-1.
        die('could not fork');
    } else if ($pid) {
        //父程式會得到子程式號,所以這裡是父程式執行的邏輯
        //如果不需要阻塞程式,而又想得到子程式的退出狀態,則可以註釋掉pcntl_wait($status)語句,或寫成:
        pcntl_wait($status,WNOHANG); //等待子程式中斷,防止子程式成為殭屍程式。
    } else {
         // 業務處理 begin
        func("new_text.txt0".$i);
        // 業務處理 end
        exit(0) ;
    }
}

相關文章