현재 위치: > 최신 기사 목록> chunks에서 빅 데이터를 처리 할 때 Array_Chunk를 사용하고 성능 병목 현상을 피하는 방법

chunks에서 빅 데이터를 처리 할 때 Array_Chunk를 사용하고 성능 병목 현상을 피하는 방법

M66 2025-04-26

개발 과정에서 많은 양의 데이터를 처리 할 때 큰 배열을 여러 개의 작은 어레이로 나누는 것이 종종 필요합니다. PHP는 배열 세분화에 매우 유용한 기능 array_chunk ()를 제공합니다. 이 기능은 대형 배열을 여러 개의 작은 배열로 나눌 수 있는데,이 기능은 Pagination, Batch Processing 등과 같은 다양한 시나리오에 적합하지만 Array_Chunk () 는 매우 편리하지만 큰 배열을 처리 할 때 최적화되지 않으면 성능 병단으로 이어질 수 있습니다. 이 기사는 Array_Chunk ()를 효율적으로 사용하는 방법을 소개하고 성능 문제를 피하는 방법을 탐색합니다.

1. array_chunk () 함수의 기본 사용

Array_Chunk () 함수는 배열을 여러 개의 작은 배열로 분할하고 작은 배열을 포함하는 2 차원 배열을 반환하는 데 사용됩니다.

기본 구문 :

 array_chunk(array $array, int $size, bool $preserve_keys = false): array
  • $ 배열 : 분할 해야하는 배열.

  • $ 크기 : 각 작은 배열의 크기.

  • $ preserve_keys : true 로 설정되면 원래 배열의 키 이름이 유지됩니다. 거짓 이면 키 이름이 다시 표시됩니다.

샘플 코드 :

 <?php
$array = range(1, 20);  // 포함 된 것을 생성하십시오 1 도착하다 20 배열
$chunked = array_chunk($array, 5);

print_r($chunked);
?>

출력 결과 :

 Array
(
    [0] => Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 )
    [1] => Array ( [0] => 6 [1] => 7 [2] => 8 [3] => 9 [4] => 10 )
    [2] => Array ( [0] => 11 [1] => 12 [2] => 13 [3] => 14 [4] => 15 )
    [3] => Array ( [0] => 16 [1] => 17 [2] => 18 [3] => 19 [4] => 20 )
)

이 방법은 작은 배열에 매우 효과적이지만 매우 큰 배열을 다루는 경우 성능 문제가 점차 나타납니다.

2. 큰 배열을 처리 할 때 성능 문제

배열이 매우 크면 Array_Chunk ()를 사용하면 직접 메모리 사용이 발생하여 성능에 영향을 줄 수 있습니다. 주된 이유는 다음과 같습니다.

  • 메모리 풋 프린트 : Array_Chunk ()는 여러 개의 새 배열 사본을 생성하여 메모리 사용이 급격히 증가 할 수 있습니다.

  • 불필요한 키 이름 재구성 : $ preserve_keys 매개 변수가 False 인 경우 각 작은 배열은 키 이름을 다시 표시하여 추가 계산 오버 헤드를 추가합니다.

큰 배열의 경우 성능 병목 현상은 특히 최적화없이 눈에 띄게 될 수 있으며 프로그램 충돌 또는 느린 응답을 유발할 수도 있습니다.

3. 성능 병목 현상을 피하기위한 최적화 방법

큰 배열을 처리 할 때 성능 병목 현상을 피하기 위해 다음과 같은 최적화 측정을 수행 할 수 있습니다.

3.1 array_chunk () 대신 array_slice ()를 사용하십시오.

Array_Slice () 함수는 전체 배열을 복사하지 않고 배열에서 서브 어레이를 추출 할 수 있습니다. Array_Chunk () 와 비교하여 Array_Slice ()를 사용하면 필요한만큼 배열에서 데이터의 일부를 처리 할 수 ​​있으므로 전체 대형 배열을 한 번에 처리하는 메모리 사용을 피할 수 있습니다.

최적화 예 :

 <?php
$array = range(1, 1000000);  // 우리가 수백만의 요소가 많이 있다고 가정 해 봅시다
$chunk_size = 10000;  // 각 처리 10000 강요

// 사용 array_slice 큰 배열을 통해 반복하십시오
for ($i = 0; $i < count($array); $i += $chunk_size) {
    $chunk = array_slice($array, $i, $chunk_size);
    // 거래하십시오 $chunk 데이터,예를 들어, 보내십시오 HTTP 요청 등
    // 요청을 가정합니다 URL ~을 위한 https://m66.net/api/data
    file_get_contents("https://m66.net/api/data?data=" . urlencode(json_encode($chunk)));
}
?>

Array_Slice ()를 사용하여 큰 배열을 통과 할 때, 고정 크기의 데이터의 일부만 한 번에 처리되어 메모리 사용량을 효과적으로 줄이고 한 번에 너무 많은 데이터를로드함으로써 발생하는 성능 문제를 피할 수 있습니다.

3.2 불필요한 키 이름 재구성을 줄입니다

앞에서 언급했듯이 Array_Chunk ()​​Preserve_Keys 매개 변수는 메모리 사용에 영향을 미칩니다. 키 이름을 유지할 필요가 없다면 메모리 사용을 줄이기 위해이 매개 변수를 False 로 설정하는 것이 좋습니다.

 <?php
$array = range(1, 1000000);
$chunked = array_chunk($array, 10000, false);  // 원래 키 이름이 유지되지 않았습니다
?>

그렇게하면 각 작은 배열의 키 이름이 다시 표시되어 불필요한 메모리 오버 헤드가 줄어 듭니다.

3.3 배치 처리 및 세그먼트 처리

슈퍼 큰 배열의 경우 가장 좋은 방법은 세그먼트에서 처리하는 것입니다. 사이클에서 배치로 데이터를 처리함으로써 큰 ​​배열은 하나씩 처리하기 위해 여러 개의 작은 조각으로 나눌 수있어 메모리 압력을 줄일 수 있습니다.

배치 처리의 예 :

 <?php
$array = range(1, 1000000);  // 큰 배열
$chunk_size = 50000;  // 每批次거래하십시오 50000 个데이터

foreach (array_chunk($array, $chunk_size) as $chunk) {
    // 逐批거래하십시오데이터,예를 들어, 시작하십시오 API 묻다
    file_get_contents("https://m66.net/api/data?data=" . urlencode(json_encode($chunk)));
}
?>

이 방법은 과도한 데이터가 한 번에 메모리에로드되는 것을 방지하고 프로그램 안정성과 성능을 향상시킬 수 있습니다.

4. 요약

Array_Chunk ()를 사용할 때는 성능 병목 현상을 피하기 위해 큰 배열 처리에 특별한주의를 기울여야합니다. 성능은 다음과 같은 방식으로 최적화 할 수 있습니다.

  • Array_Slice ()를 사용하여 주문시 배열 세그먼트를 처리하십시오.

  • 불필요한 메모리 오버 헤드를 피하기 위해 Preserve_keys 매개 변수를 합리적으로 설정하십시오.

  • 배치로 데이터를 처리하면 메모리 사용량이 줄어들고 프로그램 효율성이 향상됩니다.

이러한 최적화 방법을 사용하면 대형 어레이를보다 효율적으로 처리하고 높은 부하 환경에서 성능 문제를 피할 수 있습니다.