如何最佳化檔案寫入速度

來源:互聯網
上載者:User
如何最佳化檔案寫入速度,根據計算的分庫分表,每次檔案寫入的位置都不同,如果有100w條資料,這樣的檔案IO是拖慢程式速度
看代碼,求大神給最佳化意見

$inputfile = "logs.txt";//輸入記錄檔,每欄位以\t分隔,每行以\n結尾$fp = fopen($inputfile,'r');if(!is_resource($fp)){    echo "開啟檔案".$inputfile."失敗,分析日誌程式終止";    exit(1);}while(!feof($fp)){    $row = fgets($fp,4096);    str_replace(array("\r","\n"),array("",""),$row);//去除行中的分行符號    if($row == ''){        continue;    }    $arrRec = explode("\t",$row);//將一行字串以\t分隔為數組    $accountid = $arrRec[6];//賬戶id    //下面由文字說明    /**     * 根據一行中的$accountid,調用底層函數算出分庫分表位置     * 例如分庫為groupid = 5     * 分表名為table_0001     */    $groupid = 5;    $tableid = "table_0001";    //在此處拼接要寫入的檔案路徑    $outputfile = "tmp/".$groupid."/".$tableid;//這個值每讀一行資料,根據accountid計算的的結果都會變    $content = "\t".$arrRec[0]."\t".$accountid."\t".$groupid."\n";//拼接要寫入檔案的內容    if(file_put_contents($outputfile,$content,FILE_APPEND))    {        $success++;        $content = '';    }    else    {        $failure++;    }}fclose($fp);

每次只能寫入一條資料,100w條大約要30分鐘,速度很慢,如何最佳化;經測試,如果目標檔案路徑不變,將全部要寫入的內容拼接為一個長字串,然後在while迴圈結束後面調用一次file_put_contents函數,一次性將全部內容寫入檔案速度回快很多;但現在遇到的問題是每次寫入的目標路徑都會改變,求最佳化意見

回複內容:

如何最佳化檔案寫入速度,根據計算的分庫分表,每次檔案寫入的位置都不同,如果有100w條資料,這樣的檔案IO是拖慢程式速度
看代碼,求大神給最佳化意見

$inputfile = "logs.txt";//輸入記錄檔,每欄位以\t分隔,每行以\n結尾$fp = fopen($inputfile,'r');if(!is_resource($fp)){    echo "開啟檔案".$inputfile."失敗,分析日誌程式終止";    exit(1);}while(!feof($fp)){    $row = fgets($fp,4096);    str_replace(array("\r","\n"),array("",""),$row);//去除行中的分行符號    if($row == ''){        continue;    }    $arrRec = explode("\t",$row);//將一行字串以\t分隔為數組    $accountid = $arrRec[6];//賬戶id    //下面由文字說明    /**     * 根據一行中的$accountid,調用底層函數算出分庫分表位置     * 例如分庫為groupid = 5     * 分表名為table_0001     */    $groupid = 5;    $tableid = "table_0001";    //在此處拼接要寫入的檔案路徑    $outputfile = "tmp/".$groupid."/".$tableid;//這個值每讀一行資料,根據accountid計算的的結果都會變    $content = "\t".$arrRec[0]."\t".$accountid."\t".$groupid."\n";//拼接要寫入檔案的內容    if(file_put_contents($outputfile,$content,FILE_APPEND))    {        $success++;        $content = '';    }    else    {        $failure++;    }}fclose($fp);

每次只能寫入一條資料,100w條大約要30分鐘,速度很慢,如何最佳化;經測試,如果目標檔案路徑不變,將全部要寫入的內容拼接為一個長字串,然後在while迴圈結束後面調用一次file_put_contents函數,一次性將全部內容寫入檔案速度回快很多;但現在遇到的問題是每次寫入的目標路徑都會改變,求最佳化意見

檔案寫入速度基本上和程式沒太大關係。。瓶頸都在於硬體效能上。。

換SSD固態硬碟吧

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.