Čiščenje stanja
Ko potek dela napreduje skozi številne korake, se lahko nabrano stanje poveča. Čiščenje stanja samodejno odstrani stare izhode korakov, da ohrani omejeno velikost stanja JSON in hkrati obdrži pomembne podatke.
Omogočanje čiščenja stanja
Pokličite prune_state_after() v gradniku poteka dela. Argument določa število nedavnih korakov, katerih izhode je treba ohraniti:
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 ] );
Ko je nastavljeno prune_state_after( 2 ), se po zaključku koraka D iz stanja odstranijo izhodi korakov A in B. Koraka C in D (zadnja dva) se ohranita.
Kako deluje čiščenje
Ko je čiščenje stanja omogočeno, Queuety v rezerviranem polju _step_outputs spremlja ključe, ki jih vsak korak doda v stanje. Po prehodu na nov korak se odstranijo vsi ključi, ki so jih dodali koraki pred določenim pragom.
Na primer, z nastavitvijo 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
Kaj se ohrani
Queuety nikoli ne odstrani rezerviranih ključev, ki se začnejo z _, na primer _steps, _queue, _priority, _max_attempts, _on_cancel, _prune_state_after in _step_outputs. Ohranijo se tudi začetni ključi tovora, posredovani funkciji dispatch(), saj se že od začetka ne beležijo kot izhodi korakov. Poleg tega Queuety ohrani N najnovejših izhodov korakov glede na nastavljeni prag.
Kdaj jo uporabiti
Čiščenje stanja je uporabno pri potekih dela s številnimi koraki, pri katerih posamezen korak ustvari podatke, ki jih poznejši koraki dejansko ne potrebujejo. Značilni primeri so dolgi cevovodi, v katerih vsak korak potrebuje le izhode enega ali dveh predhodnih korakov, poteki dela ETL, ki ustvarijo obsežne vmesne strukture, ter rekurzivni ali ponavljajoči se poteki dela, v katerih bi se sicer kopičilo ponavljajoče se stanje. Če ima vaš potek dela le nekaj korakov ali so poznejši koraki še vedno odvisni od zgodnjih izhodov, čiščenja verjetno sploh ne potrebujete.
Privzeto delovanje
Čiščenje stanja je privzeto onemogočeno. Metoda prune_state_after() sprejme celoštevilski argument. Če jo pokličete brez argumenta, je privzeta vrednost 2:
->prune_state_after() // keeps the 2 most recent step outputs
->prune_state_after( 5 ) // keeps the 5 most recent step outputs