파일 쓰기 속도를 최적화하는 방법은 무엇입니까? 계산된 하위 데이터베이스와 테이블에 따라 각 파일 쓰기 위치가 다릅니다. 데이터가 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 솔리드 스테이트 드라이브로 변경