>  기사  >  백엔드 개발  >  3천만 개의 문자가 포함된 대용량 CSV 파일을 효율적으로 처리하는 방법은 무엇입니까?

3천만 개의 문자가 포함된 대용량 CSV 파일을 효율적으로 처리하는 방법은 무엇입니까?

DDD
DDD원래의
2024-11-10 20:35:03542검색

How to Efficiently Process Large CSV Files with 30 Million Characters?

대용량 CSV 파일을 효율적으로 조작하기: 3천만 자 문자열 처리

대용량 CSV를 조작할 때 '메모리 부족' 오류가 발생합니다 Curl을 통해 다운로드한 파일입니다. 파일에는 약 3,050만 개의 문자가 포함되어 있으며 "r" 및 "n"을 사용하여 줄 배열로 분할하려는 시도는 과도한 메모리 소비로 인해 실패합니다. 할당 오류를 방지하려면 대체 접근 방식을 고려하십시오.

파일 쓰기 없이 데이터 스트리밍:

CURLOPT_FILE 옵션을 활용하여 데이터를 사용자 정의 스트림 래퍼에 쓰는 대신 직접 스트리밍합니다. 파일. 자신만의 스트림 래퍼 클래스를 정의하면 과도한 메모리를 할당하지 않고도 데이터 청크가 도착하자마자 처리할 수 있습니다.

스트림 래퍼 클래스 예:

class MyStream {
    protected $buffer;

    function stream_open($path, $mode, $options, &$opened_path) {
        return true;
    }

    public function stream_write($data) {
        // Extract and process lines
        $lines = explode("\n", $data);
        $this->buffer = $lines[count($lines) - 1];
        unset($lines[count($lines) - 1]);

        // Perform operations on the lines
        var_dump($lines);
        echo '<hr />';

        return strlen($data);
    }
}

스트림 래퍼 등록:

stream_wrapper_register("test", "MyStream") or die("Failed to register protocol");

스트림을 사용한 Curl 구성 래퍼:

$fp = fopen("test://MyTestVariableInMemory", "r+"); // Pseudo-file written to by curl

curl_setopt($ch, CURLOPT_FILE, $fp); // Directs output to the stream

이 접근 방식을 사용하면 데이터 덩어리에 대해 점진적으로 작업할 수 있으므로 메모리 할당을 피하고 큰 문자열에 대한 작업이 가능해집니다.

기타 고려 사항:

  • 구현을 철저히 테스트하여 긴 선과 기타 가장자리를 처리하는지 확인하세요.
  • 데이터베이스 삽입을 수행하려면 추가 코드가 필요할 수 있습니다.
  • 이 솔루션이 시작점 역할을 합니다. 사용자 정의 및 최적화가 필요할 수 있습니다.

위 내용은 3천만 개의 문자가 포함된 대용량 CSV 파일을 효율적으로 처리하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.