Heim >Backend-Entwicklung >PHP-Tutorial >So optimieren Sie die Geschwindigkeit beim Schreiben von Dateien

So optimieren Sie die Geschwindigkeit beim Schreiben von Dateien

WBOY
WBOYOriginal
2016-10-11 14:23:441605Durchsuche

Wie kann die Dateischreibgeschwindigkeit optimiert werden? Je nach berechneter Unterdatenbank und Tabelle ist der Speicherort jeder Datei unterschiedlich. Wenn 1 Million Daten vorhanden sind, verlangsamt eine solche Datei-E/A das Programm
Schauen Sie sich den Code an und fragen Sie. Der Meister gibt Optimierungstipps

<code>$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);</code>

Es kann jeweils nur ein Datenelement geschrieben werden. Das Schreiben von 1 Million Datenelementen ist sehr langsam, wenn der Zieldateipfad unverändert bleibt. Fügen Sie den gesamten zu schreibenden Inhalt in eine lange Zeichenfolge ein. Rufen Sie dann die Funktion file_put_contents einmal auf, und das Schreiben des gesamten Inhalts auf einmal in die Datei ist viel schneller Jeder Schreibvorgang wird sich ändern. Bitte geben Sie uns Optimierungshinweise

Antwortinhalt:

Wie kann die Dateischreibgeschwindigkeit optimiert werden? Je nach berechneter Unterdatenbank und Tabelle ist der Speicherort jeder Datei unterschiedlich. Wenn 1 Million Daten vorhanden sind, verlangsamt eine solche Datei-E/A das Programm
Schauen Sie sich den Code an und fragen Sie. Der Meister gibt Optimierungstipps

<code>$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);</code>

Es kann jeweils nur ein Datenelement geschrieben werden. Das Schreiben von 1 Million Datenelementen ist sehr langsam. Wenn der Zieldateipfad unverändert bleibt. Fügen Sie den gesamten zu schreibenden Inhalt in eine lange Zeichenfolge ein. Rufen Sie dann die Funktion file_put_contents einmal auf, und das Schreiben des gesamten Inhalts auf einmal in die Datei ist viel schneller Jeder Schreibvorgang wird sich ändern. Bitte geben Sie uns Optimierungshinweise

Die Geschwindigkeit beim Schreiben von Dateien hat grundsätzlich wenig mit dem Programm zu tun. . Der Flaschenhals liegt in der Hardwareleistung. .

Wechseln Sie zum SSD-Solid-State-Laufwerk

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn