Обробка даних з обмеженням часу за допомогою методів Laravel LazyCollection

Перекладено ШІ
Оригінал: Laravel News
Оновлено: 31 липня, 2025
Ви коли-небудь стикалися з великими наборами даних, які потрібно обробити в обмежений час? У нашій статті ви дізнаєтеся, як LazyCollection в Laravel ефективно управляє обробкою даних, впроваджуючи тайм-аут для забезпечення продуктивності та цілісності даних

LazyCollection у Laravel пропонує зручні засоби для розумної обробки великих наборів даних, визначаючи чіткі тимчасові рамки. Функція обмеження часу запобігає безкінечній роботі операцій, забезпечуючи максимальну продуктивність у межах заданих обмежень.

Механізм таймауту оцінює тривалість обробки відносно вказаного часу, автоматично зупиняючи обробку, коли ліміт досягнуто:

use Illuminate\Support\LazyCollection;
 
$results = LazyCollection::times(INF)
    ->takeUntilTimeout(now()->addMinutes(3))
    ->each(function (int $item) {
        return expensive_computation($item);
    });

Існує кілька способів для ефективного проходження через набір даних з дотриманням часових обмежень. Використання генераторних функцій разом з механізмами таймауту створює ефективні процесингові канали для великих обробок:

use Illuminate\Support\LazyCollection;
use App\Models\Transaction;
 
$processed = LazyCollection::make(function () {
    $cursor = 0;
    while (true) {
        $batch = Transaction::where('id', '>', $cursor)
            ->orderBy('id')
            ->limit(500)
            ->get();
 
        if ($batch->isEmpty()) {
            break;
        }
 
        foreach ($batch as $transaction) {
            yield $transaction;
        }
 
        $cursor = $batch->last()->id;
    }
})
->takeUntilTimeout(now()->addMinutes(20))
->filter(function ($transaction) {
    return $transaction->requires_processing;
})
->each(function ($transaction) {
    $transaction->process();
})
->count();

Створення системи фінансової звітності демонструє практичні застосування таймаутів на різних етапах обробки. Цей підхід є дуже ефективним для робіт з пакетами, які повинні завершуватися в межах робочих годин, зберігаючи при цьому узгодженість даних і можливість проведення аудиту.

Функція таймауту безперешкодно інтегрується в наявну інфраструктуру Laravel, автоматично завершуючи обробку, коли час перевищено, без переривання частково виконаних операцій і без створення неузгодженого стану даних.