개발 중에는 종종 많은 양의 데이터를 처리해야합니다. 한 번에 너무 많은 데이터를 처리하면 많은 시간이 걸릴뿐만 아니라 메모리 오버플로를 유발할 수도 있습니다. 성능 및 사용자 경험을 향상시키기 위해 블록 처리를 채택 할 수 있습니다. Array_Chunk 는 PHP에 내장 된 매우 유용한 기능으로 큰 배열을 여러 개의 작은 배열로 나눌 수 있습니다. 비동기 작업과 결합하여 청킹 중에 프로그램의 실행 효율성을 향상시킬 수 있습니다.
Array_Chunk 는 PHP 배열 기능 중 하나입니다. 이 기능은 큰 배열을 여러 개의 작은 배열로 분할하는 것입니다. 각 작은 배열은 지정된 수의 요소를 포함합니다. 이 기능은 많은 양의 데이터가 필요한 상황에 매우 적합하며 메모리 사용량을 효과적으로 줄일 수 있습니다.
기능 프로토 타입 :
array_chunk(array $array, int $size, bool $preserve_keys = false): array
$ 배열 : 배열이 청크됩니다.
$ 크기 : 각 작은 배열의 크기.
$ preserve_keys : 원래 배열의 키 이름을 보존할지 여부 (기본값은 false ).
1000 개의 데이터 배열이 있다고 가정하고 Array_Chunk를 사용하여 10 개의 작은 배열이 100 개의 요소를 포함하는 10 개의 작은 배열로 나눕니다.
<?php
$data = range(1, 1000); // 생성하다1도착하다1000배열
$chunkedData = array_chunk($data, 100);
print_r($chunkedData);
?>
출력 결과 :
Array
(
[0] => Array ( [0] => 1 [1] => 2 ... [99] => 100 )
[1] => Array ( [0] => 101 [1] => 102 ... [99] => 200 )
...
)
이런 식으로, 우리는 큰 배열 $ 데이터를 여러 개의 작은 배열로 나눕니다. 각 작은 배열에는 100 개의 요소가 있습니다.
array_chunk를 사용하여 빅 데이터를 차단 한 후에는 비동기 작업을 추가로 결합하여 성능을 향상시킬 수 있습니다. 비동기 연산으로 인해 여러 작업이 병렬로 실행될 수 있으므로 차단을 피할 수 있습니다. 비동기 조작은 여러 가지 방법으로 PHP에서 구현 될 수 있으며, 그중 가장 일반적인 방법은 Curl_multi_Exec 또는 PHP 비동기 확장을 사용하는 것입니다.
HTTP 요청을 통해 각 청크의 데이터를 처리하려고한다고 가정하면, 원래 처리 방법은 요청을 하나씩 시작하는 것일 수 있으며, 이는 장기적인 막힘으로 이어질 수 있습니다. 비동기 요청을 사용하여 백그라운드에서 동시에 여러 요청을 시작하여 처리 효율성을 향상시킬 수 있습니다.
<?php
$data = range(1, 1000); // 빅 데이터 시뮬레이션
$chunkedData = array_chunk($data, 100); // 블록 처리
// 초기화 cURL multi handle
$mh = curl_multi_init();
// 손잡이는 각 요청을 저장하는 데 사용됩니다
$curlHandles = [];
// 각 데이터 블록을 반복하십시오,비동기 적으로 요청을 시작합니다
foreach ($chunkedData as $index => $chunk) {
$url = "http://m66.net/api/process_data"; // 추정API주소
$postData = json_encode(['data' => $chunk]);
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// 添加도착하다 multi handle 가운데
curl_multi_add_handle($mh, $ch);
$curlHandles[$index] = $ch;
}
// 비동기 요청을 수행하십시오
do {
$multiExec = curl_multi_exec($mh, $running);
if ($running) {
curl_multi_select($mh);
}
} while ($running);
// 응답 내용을 얻으십시오
foreach ($curlHandles as $index => $ch) {
$response = curl_multi_getcontent($ch);
echo "Response from chunk {$index}: " . $response . "\n";
// 각 요청 핸들을 닫습니다
curl_multi_remove_handle($mh, $ch);
}
// 폐쇄 multi handle
curl_multi_close($mh);
?>
이 예에서는 curl_multi_exec을 사용하여 비동기 요청의 기능을 구현합니다. 각 데이터 블록은 컬을 통해 요청을 시작하고이를 병렬로 처리하여 성능을 크게 향상시킵니다.
대기 시간 단축 : 비동기 작업은 여러 요청을 동시에 처리하여 대기 시간을 하나씩 요청할 수 있습니다.
효율성 향상 : I/O 집약적 인 작업 (예 : HTTP 요청)의 경우 비동기 작업은 시스템 리소스를 최대한 활용할 수 있습니다.
리소스 사용량 최적화 : 청킹 및 비동기 처리를 통해 CPU 및 네트워크 대역폭의 활용을 최적화하면서 메모리 오버플로 문제를 피합니다.
오류 처리 : 비동기 작업에서 처리 오류가 특히 중요합니다. 각 요청의 성공과 실패를 적시에 캡처하고 처리 할 수 있는지 확인해야합니다.
자원 제한 : 비동기 작업은 성능을 향상시킬 수 있지만 무제한은 아닙니다. 요청 수가 서버의 처리 용량을 초과하지 않도록하십시오.
데이터 일관성 : 비동기 처리에서 각 데이터 블록의 처리 순서가 최종 결과에 영향을 미치지 않도록하십시오.
Array_Chunk 함수를 사용하면 빅 데이터를 청소하고 메모리 사용량을 줄일 수 있습니다. 비동기 작업 ( Curl_multi_exec 과 같은)과 결합하여 여러 데이터 블록을 동시에 처리하여 프로그램의 성능을 향상시킬 수 있습니다. 이 방법은 다량의 데이터를 처리 할 때 특히 효과적이며, 특히 많은 네트워크 요청 또는 I/O 운영이 필요한 시나리오에서 사용자 경험을 크게 향상시킬 수 있습니다.