stream_set_write_buffer () 함수를 사용하면 파일 쓰기 효율을 향상시키기 위해 파일 스트림에 대한 쓰기 버퍼를 설정할 수 있습니다. 먼저 버퍼에 데이터를 작성함으로써 빈번한 I/O 운영을 줄이면 특히 많은 양의 작문이 필요한 시나리오에서 성능을 크게 향상시킬 수 있습니다.
기능 프로토 타입은 다음과 같습니다.
<span><span><span class="hljs-title function_ invoke__">stream_set_write_buffer</span></span><span>(resource </span><span><span class="hljs-variable">$stream</span></span><span>, </span><span><span class="hljs-keyword">int</span></span><span> </span><span><span class="hljs-variable">$buffer</span></span><span>)
</span></span>$ stream : 대상 파일 스트림 리소스.
$ 버퍼 : 버퍼 크기, 바이트 단위. 0이 전달되면 버퍼가 비활성화되었음을 의미합니다 (파일에 직접 쓰기).
일반적으로 쓰기 작업 데이터가 비교적 작 으면 더 작은 버퍼를 선택할 수 있습니다. 큰 버퍼는 일반적으로 많은 양의 데이터 쓰기에 대한 성능이 향상됩니다.
예를 들어, 시간당 적은 데이터 (예 : 수십 바이트)를 작성하면 버퍼를 0으로 설정하거나 더 작은 값으로 설정하는 것이 더 적절할 수 있습니다. 반대로 데이터를 배치해야 할 때 버퍼를 늘리면 자주 디스크 I/O 작동을 방지합니다.
버퍼 크기는 메모리 사용에 영향을 미칩니다. 메모리가 제한된 경우, 과도한 시스템 부하 또는 메모리 오버 플로우를 유발할 수 있으므로 대형 버퍼를 설정하는 것이 좋습니다. 따라서 서버의 사용 가능한 메모리에 따라 버퍼 크기를 적당히 조정하면 성능 및 메모리 사용량의 균형을 맞출 수 있습니다.
로그 파일을 빠르게 작성 해야하는 시나리오의 경우 더 작은 버퍼가 사용됩니다. 로그 파일은 연대순으로 하나씩 작성되므로 너무 큰 버퍼를 설정하면 지연이 발생할 수 있습니다.
대형 파일 처리 및 데이터베이스 내보내기와 같은 작업의 경우 더 큰 버퍼를 사용하여 디스크 쓰기의 빈도를 줄이는 것이 좋습니다. 특히 큰 텍스트 파일을 다룰 때 버퍼를 합리적으로 조정하면 효율성을 크게 향상시킬 수 있습니다.
기본값 : 수동으로 설정하지 않으려면 PHP의 기본 버퍼 동작에 의존 할 수 있습니다. PHP는 시스템의 I/O 성능에 따라 기본값을 자동으로 선택합니다. 이는 대부분의 시나리오에 충분합니다.
단계별 디버깅 : 실제 개발 환경에서는 다양한 버퍼 크기를 통해 성능 튜닝을 수행 할 수 있습니다. 여러 실험을 통해 다른 데이터 볼륨 및 서버로드를 통해 다양한 버퍼 설정이 성능에 미치는 영향을 비교할 수 있으며 최상의 값이 선택됩니다.
일반적인 권장 사항 :
파일 쓰기의 경우 일반적으로 권장되는 버퍼 크기는 4KB와 64KB 사이이며 대부분의 시나리오에 적합합니다.
로그 파일 쓰기의 경우 더 작은 버퍼를 설정하거나 버퍼 (0 바이트)를 설정하지 마십시오.
데이터베이스 내보내기, 배치 데이터 처리 등의 경우 일반적으로 1MB에서 8MB 사이의 더 큰 버퍼를 사용하는 것이 좋습니다. 이는 배치 쓰기 속도를 크게 향상시킬 수 있습니다.
다음은 PHP에서 stream_set_write_buffer ()를 사용하여 파일 스트림의 버퍼 크기를 설정하는 방법을 보여주는 일반적인 예입니다.
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-comment">// 파일 스트림을 엽니 다</span></span><span>
</span><span><span class="hljs-variable">$file</span></span><span> = </span><span><span class="hljs-title function_ invoke__">fopen</span></span><span>(</span><span><span class="hljs-string">'example.txt'</span></span><span>, </span><span><span class="hljs-string">'w'</span></span><span>);
</span><span><span class="hljs-comment">// 버퍼 크기를 설정하십시오 8KB</span></span><span>
</span><span><span class="hljs-title function_ invoke__">stream_set_write_buffer</span></span><span>(</span><span><span class="hljs-variable">$file</span></span><span>, </span><span><span class="hljs-number">8192</span></span><span>);
</span><span><span class="hljs-comment">// 데이터 작성</span></span><span>
</span><span><span class="hljs-title function_ invoke__">fwrite</span></span><span>(</span><span><span class="hljs-variable">$file</span></span><span>, </span><span><span class="hljs-string">"이것은 테스트 내용입니다\n"</span></span><span>);
</span><span><span class="hljs-comment">// 파일 스트림을 닫습니다</span></span><span>
</span><span><span class="hljs-title function_ invoke__">fclose</span></span><span>(</span><span><span class="hljs-variable">$file</span></span><span>);
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>위의 코드에서 파일 스트림의 쓰기 버퍼를 8kb로 설정하고 실제 요구에 따라이 값을 조정할 수 있습니다.
메모리 를 통해 메모리를 모니터링합니다.
쓰기 작업의 동시성 증가 : 경우에 따라 다중 쓰기 작업을 병렬로 실행할 수 있으며 합리적인 버퍼 설정을 통해 쓰기 효율을 더욱 향상시킬 수 있습니다.
비동기 쓰기 : 높은 동시 시나리오에서 비동기 쓰기 또는 멀티 스레드/프로세스 처리를 고려할 수 있습니다. PHP 자체는 멀티 스레딩을 지원하지 않지만 PTHREADS를 통해 또는 CLI의 PCNTL 확장과 함께 구현할 수 있습니다.
Stream_set_write_buffer () 의 버퍼 크기를 합리적으로 설정하면 파일 쓰기의 성능이 크게 향상 될 수 있습니다. 실제 애플리케이션에서는 시스템 메모리, 쓰기 데이터 금액, 파일 유형 등과 같은 요소를 기반으로 적절한 버퍼 크기를 선택해야합니다. 적절한 튜닝을 사용하면 메모리 폐기물 또는 자주 디스크 쓰기를 피하면서 파일 처리를보다 효율적으로 만들 수 있습니다.