PHP에서는 대규모 mysqli_result 결과 세트를 처리 할 때 성능 및 메모리 발자국 병목 현상을 만날 수 있습니다. 특히 데이터 세트가 매우 크면 종래의 처리 방법 (예 : 모든 데이터를 메모리에 한 번에로드하는 등)으로 인해 프로그램이 성능을 저하시키고 메모리 오버 플로우를 유발할 수 있습니다. 이를 향상시키기 위해 PHP 생성기를 사용하여 처리 프로세스를 최적화 할 수 있습니다.
PHP에서 Generator는 모든 데이터를 한 번에로드하지 않고 반복 중에 단계별로 데이터를 단계별로 생성 할 수있는 특수 반복기입니다. 따라서 필요한 경우 데이터 항목을 하나씩 반환하여 메모리 발자국을 줄일 수 있으므로 대형 데이터 세트를 처리하는 데 매우 적합합니다.
먼저 MySQLI를 통해 데이터베이스 쿼리를 실행하고 결과 세트를 가져와야합니다. 일반적으로 mysqli_query 또는 mysqli :: 쿼리 메소드를 통해 쿼리를 실행할 수 있습니다.
<?php
$mysqli = new mysqli('localhost', 'username', 'password', 'database');
$query = "SELECT * FROM large_table";
$result = $mysqli->query($query);
다음으로 생성기를 사용하여 쿼리 결과 행을 라인별로 처리합니다. 이것의 장점은 전체 mysqli_result를 한 번에 메모리에로드 할 필요가 없지만 필요할 때 데이터를 라인별로 가져올 수 있다는 것입니다.
<?php
function fetchData($result) {
while ($row = $result->fetch_assoc()) {
yield $row; // 현재 행 데이터를 반환합니다
}
}
// 사용 generator 데이터 라인별 프로세스
foreach (fetchData($result) as $row) {
// 각 데이터 행을 처리합니다
echo $row['column_name'] . "\n";
}
생성기를 사용하면 모든 쿼리 결과를 한 번에 메모리에로드하지 않습니다. 생성기는 각 반복의 결과 세트에서 다음 데이터 행을 가져오고 필요한 경우 메모리 만 할당합니다. 이것은 대형 데이터 세트에 매우 유용하며 메모리 사용량을 크게 줄일 수 있습니다.
동시에 전체 쿼리 결과 세트가 준비 될 때까지 기다리지 않고 즉시 데이터 처리를 시작할 수 있기 때문에 발전기 의 게으른로드 기능도 성능을 향상시킬 수 있습니다.
큰 쿼리를 처리 할 때 데이터베이스 연결 및 쿼리 결과 세트가 올바르게 처리되도록하는 것이 중요합니다. 데이터베이스 연결을 닫고 리소스를 자유롭게하는 것을 잊지 마십시오.
<?php
// 리소스를 자유롭게합니다
$result->free();
$mysqli->close();
MySQLI_RESULT를 처리하기 위해 생성기를 사용하는 것은 쿼리 작업에만 국한되지 않습니다. 생성기는 데이터가 라인별로 처리되는 모든 시나리오에서 훌륭한 성능 및 메모리 최적화를 제공 할 수 있습니다. 예를 들어 파일 읽기, 대규모 로그 분석 등
PHP 생성기를 사용하면 대규모 MySQLI_Results 의 처리를 크게 최적화하고 성능을 향상 시키며 메모리 사용량을 줄일 수 있습니다. 기존 처리 방법과 비교하여 발전기는 많은 양의 데이터를 처리 할 때, 특히 메모리 자원이 제한 될 때 더 높은 효율을 제공 할 수 있습니다. 따라서 대규모 데이터베이스 쿼리에 직면 할 때 Generator를 사용하여 점차적으로 쿼리 결과를 처리하여 응용 프로그램 성능 및 메모리 관리 효율성을 향상시키는 것이 좋습니다.