Liigu sisu juurde

Olekute kärpimine

Kui töövoog läbib palju etappe, võib kogunenud olek suureks kasvada. Olekute kärpimine eemaldab automaatselt vanad etappide väljundid, et oleku JSON maht püsiks piiratud, säilitades samal ajal olulised andmed.

Olekute kärpimise lubamine

Kutsuge töövoo koostajal välja prune_state_after(). Argumendiga määratakse, mitme viimase etapi väljundit säilitada:

PHP
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 ] );

Kui kasutusel on prune_state_after( 2 ), eemaldatakse pärast D-etapi lõpetamist olekust A- ja B-etapi väljundid. C- ja D-etapp (kaks viimast) säilivad.

Kuidas kärpimine töötab

Kui olekute kärpimine on lubatud, jälgib Queuety iga etapi olekusse lisatud võtmeid reserveeritud massiivis _step_outputs. Uuele etapile liikudes eemaldatakse kõik võtmed, mille lisasid läve ületavalt vanad etapid.

Näiteks väärtusega prune_state_after( 2 ):

Kood
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

Mis säilib

Queuety ei kärbi kunagi reserveeritud võtmeid, mis algavad prefiksiga _, näiteks _steps, _queue, _priority, _max_attempts, _on_cancel, _prune_state_after ja _step_outputs. Ka dispatch()-ile edastatud algse payload’i võtmed säilivad, sest neid ei jälgita algusest peale etappide väljunditena. Lisaks säilitab Queuety seadistatud läve järgi N viimase etapi väljundit.

Millal seda kasutada

Olekute kärpimine on kasulik paljude etappidega töövoogudes, kus iga etapp toodab andmeid, mida hilisemad etapid tegelikult ei vaja. Tüüpilised näited on pikad töötlusahelad, kus iga etapp vajab vaid ühe või kahe eelmise etapi väljundit, mahukaid vaheandmestruktuure loovad ETL-töövood ning rekursiivsed või korduvad töövood, mis muidu koguksid korduvat olekut. Kui teie töövoos on vaid mõni etapp või kui hilisemad etapid sõltuvad endiselt varasematest väljunditest, pole kärpimist tõenäoliselt vaja.

Vaikekäitumine

Olekute kärpimine on vaikimisi keelatud. Meetod prune_state_after() võtab täisarvulise argumendi. Ilma argumendita kutsudes on vaikeväärtus 2:

PHP
->prune_state_after()     // keeps the 2 most recent step outputs
->prune_state_after( 5 )  // keeps the 5 most recent step outputs