Stāvokļa attīrīšana
Darbplūsmai veicot daudz darbību, uzkrātais stāvoklis var kļūt apjomīgs. Stāvokļa attīrīšana automātiski noņem vecos darbību izvades datus, lai stāvokļa JSON apjoms būtu ierobežots, vienlaikus saglabājot svarīgos datus.
Stāvokļa attīrīšanas iespējošana
Izsauciet prune_state_after() darbplūsmas veidotājā. Arguments norāda, cik neseno darbību izvades dati jāsaglabā:
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 ] );
Izmantojot prune_state_after( 2 ), pēc D darbības pabeigšanas A un B darbību izvades dati tiek noņemti no stāvokļa. C un D (divas pēdējās darbības) tiek saglabātas.
Kā notiek attīrīšana
Kad stāvokļa attīrīšana ir ieslēgta, Queuety izseko, kuras atslēgas katra darbība pievieno stāvoklim, un saglabā šo informāciju rezervētā masīvā _step_outputs. Pārejot uz nākamo darbību, tiek noņemtas visas atslēgas, ko ieviesušas darbības, kuras ir vecākas par noteikto robežu.
Piemēram, izmantojot 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 tiek saglabāts
Queuety nekad neattīra rezervētās atslēgas, kas sākas ar _, piemēram, _steps, _queue, _priority, _max_attempts, _on_cancel, _prune_state_after un _step_outputs. Tiek saglabātas arī sākotnējās datu atslēgas, kas nodotas dispatch(), jo tās vispār netiek uzskaitītas kā darbību izvades dati. Turklāt Queuety saglabā N nesenākos darbību izvades datus atbilstoši konfigurētajai robežai.
Kad to izmantot
Stāvokļa attīrīšana ir noderīga darbplūsmās ar daudzām darbībām, kur katra darbība rada datus, kas vēlākajām darbībām patiesībā nav vajadzīgi. Tipiski piemēri ir garas apstrādes ķēdes, kur katrai darbībai vajadzīgi tikai vienas vai divu iepriekšējo darbību izvades dati, ETL darbplūsmas, kas ģenerē apjomīgas starpstruktūras, kā arī rekursīvas vai atkārtotas darbplūsmas, kurās citādi uzkrātos atkārtoti stāvokļa dati. Ja darbplūsmā ir tikai dažas darbības vai vēlākās darbības joprojām ir atkarīgas no agrākajiem izvades datiem, attīrīšana, visticamāk, nav vajadzīga.
Noklusējuma darbība
Stāvokļa attīrīšana pēc noklusējuma ir izslēgta. Metode prune_state_after() pieņem veselu skaitli. Ja to izsauc bez argumenta, noklusējuma vērtība ir 2:
->prune_state_after() // keeps the 2 most recent step outputs
->prune_state_after( 5 ) // keeps the 5 most recent step outputs