파일 쓰기 속도를 최적화하는 방법

WBOY
풀어 주다: 2016-10-11 14:23:44
원래의
1580명이 탐색했습니다.

파일 쓰기 속도를 최적화하는 방법은 무엇입니까? 계산된 하위 데이터베이스와 테이블에 따라 각 파일 쓰기 위치가 다릅니다. 데이터가 100만 개이면 이러한 파일 IO로 인해 프로그램 속도가 느려집니다
코드를 보고 질문하세요. 마스터가 최적화 조언을 제공합니다

<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>
로그인 후 복사
로그인 후 복사

한 번에 한 개의 데이터만 쓸 수 있습니다. 100만 개의 데이터를 쓰는 데 약 30분 정도 걸립니다. 테스트를 마친 후에도 대상 파일 경로가 변경되지 않으면 어떻게 해야 할까요? 모든 내용을 긴 문자열로 연결한 다음 while 루프가 끝난 후 file_put_contents 함수를 한 번 호출하면 모든 내용을 한 번에 파일에 쓰는 것이 훨씬 빠르지만 지금 직면한 문제는 대상 경로입니다. 글을 쓸 때마다 변경됩니다. 최적화 조언을 부탁드립니다

답글 내용:

파일 쓰기 속도를 최적화하는 방법은 무엇입니까? 계산된 하위 데이터베이스와 테이블에 따라 각 파일 쓰기 위치가 다릅니다. 데이터가 100만 개이면 이러한 파일 IO로 인해 프로그램 속도가 느려집니다
코드를 보고 질문하세요. 마스터가 최적화 조언을 제공합니다

<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>
로그인 후 복사
로그인 후 복사

한 번에 한 개의 데이터만 쓸 수 있습니다. 100만 개의 데이터를 쓰는 데 약 30분 정도 걸립니다. 테스트를 마친 후에도 대상 파일 경로가 변경되지 않으면 어떻게 해야 할까요? 모든 내용을 긴 문자열로 연결한 다음 while 루프가 끝난 후 file_put_contents 함수를 한 번 호출하면 모든 내용을 한 번에 파일에 쓰는 것이 훨씬 빠르지만 지금 직면한 문제는 대상 경로입니다. 글을 쓸 때마다 변경됩니다. 최적화 조언을 부탁드립니다

파일 쓰기 속도는 기본적으로 프로그램과 거의 관련이 없습니다. . 병목 현상은 하드웨어 성능에 있습니다. .

SSD 솔리드 스테이트 드라이브로 변경

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿