Laravel에서 대량의 데이터로 작업할 때 애플리케이션의 메모리 부족과 같은 문제가 발생하는 것이 일반적입니다. 이는 수천(또는 수백만) 개의 레코드를 메모리에 동시에 로드하려고 할 때 발생할 수 있습니다. 하지만 라라벨은 데이터를 작은 덩어리로 처리하는 데 도움이 되는 몇 가지 유용한 방법을 제공하므로 메모리를 절약하고 애플리케이션을 더 빠르게 실행할 수 있습니다. 이번 포스팅에서는 chunk(), chunkById(), Lazy Collections를 사용하여 Laravel에서 대규모 데이터세트를 효율적으로 처리하는 방법을 살펴보겠습니다.
Laravel의 Chunk() 메소드를 사용하면 모든 것을 한 번에 로드하는 대신 레코드의 작은 하위 집합을 한 번에 검색할 수 있습니다. 이 방법은 많은 수의 레코드를 처리해야 하지만 너무 많은 메모리를 사용하지 않으려는 경우에 유용합니다.
주문 테이블이 있고 각 주문의 상태를 "처리됨"으로 업데이트한다고 가정해 보겠습니다. 모든 주문을 한 번에 메모리에 로드하는 대신, Chunk()를 사용하여 한 번에 100개의 주문을 로드하고 더 작은 배치로 처리할 수 있습니다.
use App\Models\Order; Order::chunk(100, function ($orders) { foreach ($orders as $order) { // Process each order $order->update(['status' => 'processed']); } });
chunkById() 메서드는 Chunk()와 유사하지만 레코드를 처리하는 동안 업데이트할 때 더 좋습니다. 이 방법을 사용하면 레코드가 ID 열을 기준으로 항상 일관된 순서로 검색되므로 레코드 누락 없이 데이터를 더욱 안전하게 업데이트할 수 있습니다.
주문 상태를 업데이트하고 싶지만 주문 ID가 순서대로 처리되는지 확인해야 한다고 가정해 보세요. ChunkById()를 사용하면 주문을 업데이트하는 경우에도 주문을 건너뛰거나 두 번 처리하는 일이 없습니다.
use App\Models\Order; Order::chunk(100, function ($orders) { foreach ($orders as $order) { // Process each order $order->update(['status' => 'processed']); } });
chunk() 및 ChunkById()는 레코드를 일괄 처리하는 반면, Lazy Collections를 사용하면 레코드를 하나씩 처리할 수 있습니다. 이는 많은 메모리를 사용하지 않고 검색된 각 레코드를 처리하려는 경우 특히 유용합니다.
한 번에 하나의 레코드만 처리해야 한다면 Lazy Collections가 훌륭한 옵션이 될 수 있습니다. 다음은 각 주문 기록을 개별적으로 처리하는 예입니다.
use App\Models\Order; Order::chunkById(100, function ($orders) { foreach ($orders as $order) { // Update each order's status $order->update(['status' => 'processed']); } }, 'id');
Laravel은 메모리 문제 없이 대규모 데이터 세트를 작업할 수 있는 매우 강력한 도구를 제공합니다. 다음은 우리가 배운 내용을 간단히 요약한 것입니다.
이러한 방법을 사용하면 Laravel 애플리케이션이 수백만 개의 레코드를 처리하는 경우에도 대규모 데이터 세트를 효율적으로 처리할 수 있습니다. 이러한 기술은 처리해야 하는 데이터의 양에 관계없이 제대로 작동하는 확장 가능한 애플리케이션을 구축하는 데 필수적입니다.
위 내용은 메모리 부족 없이 Laravel에서 대규모 데이터 세트를 처리하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!