Būsenos valymas
Darbo eigai pereinant daug žingsnių, sukaupta būsena gali labai išaugti. Būsenos valymas automatiškai pašalina senus žingsnių rezultatus, kad būsenos JSON dydis liktų ribotas ir būtų išsaugoti svarbūs duomenys.
Būsenos valymo įjungimas
Iškvieskite prune_state_after() darbo eigos kūrimo priemonėje. Argumentas nurodo, kiek naujausių žingsnių rezultatų reikia išsaugoti:
use Queuety\Queuety;
Queuety::workflow( 'long_pipeline' )
->then( StepA::class )
->then( StepB::class )
->then( StepC::class )
->then( StepD::class )
->then( StepE::class )
->prune_state_after( 2 )
->dispatch( [ 'input' => $data ] );
Nustačius prune_state_after( 2 ), užbaigus D žingsnį, iš būsenos pašalinami A ir B žingsnių rezultatai. C ir D žingsniai (du naujausi) išsaugomi.
Kaip veikia valymas
Įjungus būsenos valymą, Queuety seka, kuriuos raktus kiekvienas žingsnis prideda prie būsenos, ir išsaugo juos rezervuotame _step_outputs masyve. Pereinant prie naujo žingsnio, pašalinami visi raktai, kuriuos pridėjo už nustatytos ribos esantys senesni žingsniai.
Pavyzdžiui, kai nustatyta prune_state_after( 2 ):
After step 0 (StepA): state has keys from StepA + initial payload
After step 1 (StepB): state has keys from StepA + StepB + initial payload
After step 2 (StepC): state has keys from StepA + StepB + StepC + initial payload
-> prune: StepA output removed (only 2 most recent kept)
After step 3 (StepD): state has keys from StepB + StepC + StepD + initial payload
-> prune: StepB output removed
Kas išsaugoma
Queuety niekada nepašalina rezervuotų raktų, prasidedančių _, pavyzdžiui, _steps, _queue, _priority, _max_attempts, _on_cancel, _prune_state_after ir _step_outputs. Pradiniai duomenų raktai, perduoti dispatch(), taip pat išsaugomi, nes jie ir taip nesekami kaip žingsnių rezultatai. Be to, Queuety išsaugo N naujausių žingsnių rezultatų pagal jūsų nustatytą ribą.
Kada naudoti
Būsenos valymas naudingas ilgose darbo eigose, kuriose kiekvienas žingsnis sukuria duomenų, kurių vėlesniems žingsniams iš tiesų nereikia. Tipiniai pavyzdžiai – ilgi procesai, kuriuose kiekvienam žingsniui reikia tik vieno ar dviejų ankstesnių rezultatų, ETL darbo eigos, sukuriančios dideles tarpines struktūras, ir rekursinės arba pasikartojančios darbo eigos, kuriose kitaip kauptųsi pasikartojančios būsenos. Jei jūsų darbo eiga turi tik kelis žingsnius arba vėlesni žingsniai vis dar priklauso nuo ankstyvųjų rezultatų, valymo tikriausiai visai nereikia.
Numatytoji elgsena
Būsenos valymas pagal numatytąją nuostatą išjungtas. Metodas prune_state_after() priima sveikojo skaičiaus argumentą. Iškvietus jį be argumento, numatytoji reikšmė yra 2:
->prune_state_after() // keeps the 2 most recent step outputs
->prune_state_after( 5 ) // keeps the 5 most recent step outputs