3천만 개의 대규모 문자열 분석
상당량의 데이터를 처리할 때 "메모리 부족" 오류가 발생하면 당황스러울 수 있습니다. 다음 시나리오를 고려해보세요. 컬을 사용하여 약 3,050만 문자로 구성된 CSV 파일을 검색하고 있습니다. r 및 n에 의한 폭발과 같은 일반적인 방법을 사용하여 이 데이터를 라인 배열로 분석하려고 하면 무서운 메모리 할당 오류가 발생합니다. 이는 방대한 데이터를 효율적으로 조작하면서 이러한 오류를 방지하는 방법에 대한 질문을 제기합니다.
메모리 할당 오류를 방지하기 위한 전략
이전 답변에서 예리하게 지적한 바와 같이:
대체 접근 방식: 사용자 정의 스트림 래퍼 사용
CURLOPT_FILE은 데이터를 파일에 기록하여 문제를 효과적으로 해결하지만 특정 시나리오에서는 다음이 필요할 수 있습니다. 메모리 처리. 이러한 경우 사용자 정의 스트림 래퍼를 구현하면 실행 가능한 솔루션이 제공됩니다.
스트림 래퍼 예시:
class MyStream { protected $buffer; function stream_open($path, $mode, $options, &$opened_path) { return true; } public function stream_write($data) { $lines = explode("\n", $data); $lines[0] = $this->buffer . $lines[0]; $this->buffer = $lines[count($lines)-1]; unset($lines[count($lines)-1]); // Perform your processing here var_dump($lines); echo '<hr />'; return strlen($data); } }
스트림 등록 래퍼:
stream_wrapper_register("test", "MyStream");
Curl과 결합:
// Configure curl using CURLOPT_FILE curl_setopt($ch, CURLOPT_FILE, fopen("test://MyTestVariableInMemory", "r+")); // Execute curl to retrieve data from the source curl_exec($ch); // Close the stream fclose($fp);
사용자 정의 스트림 래퍼를 사용하면 큰 데이터 세트를 관리 가능한 청크로 처리할 수 있습니다. 메모리 할당 오류가 발생했습니다. 이 방법을 사용하면 데이터가 도착하는 대로 처리되어 효율적인 메모리 활용이 보장됩니다.
위 내용은 3천만 개의 문자열을 메모리 부족 없이 처리하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!