Preskočiť na obsah

Orezávanie stavov

Počas postupu workflow cez mnohé kroky môže nahromadený stav výrazne narásť. Orezávanie stavov automaticky odstraňuje staré výstupy krokov, aby sa stav udržal JSON v stanovených medziach a zároveň sa zachovali dôležité údaje.

Zapnutie orezávania stavov

Zavolajte prune_state_after() na tvorbe workflow. Argument určuje počet nedávnych krokov, ktorých výstupy sa majú zachovať:

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

Pri nastavení prune_state_after( 2 ) sa po dokončení kroku D zo stavu odstránia výstupy krokov A a B. Kroky C a D, teda dva najnovšie, sa zachovajú.

Ako funguje orezávanie

Keď je orezávanie stavov zapnuté, Queuety sleduje, ktoré kľúče pridáva každý krok do stavu, a ukladá ich do vyhradenej poľa _step_outputs. Po prechode na nový krok sa odstránia všetky kľúče pridané krokmi staršími než nastavený limit.

Napríklad pri nastavení prune_state_after( 2 ):

Kód
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

Čo sa zachováva

Queuety nikdy neorezáva vyhradené kľúče začínajúce sa na _, ako napríklad _steps, _queue, _priority, _max_attempts, _on_cancel, _prune_state_after a _step_outputs. Zachovajú sa aj kľúče počiatočného obsahu odovzdané pomocou dispatch(), pretože sa od začiatku nesledujú ako výstupy krokov. Okrem toho Queuety zachová N najnovších výstupov krokov podľa nastaveného limitu.

Kedy ho použiť

Orezávanie stavov je užitočné pre workflow s mnohými krokmi, v ktorých každý krok vytvára údaje, ktoré neskoršie kroky v skutočnosti nepotrebujú. Typickým príkladom sú dlhé postupnosti, v ktorých každý krok potrebuje iba jeden či dva predchádzajúce výstupy, ETL workflow vytvárajúce objemné medzivýsledky a rekurzívne alebo opakujúce sa workflow, v ktorých by sa inak hromadil opakujúci sa stav. Ak má váš workflow iba niekoľko krokov alebo neskoršie kroky stále závisia od skorých výstupov, orezávanie pravdepodobne vôbec nepotrebujete.

Predvolené správanie

Orezávanie stavov je predvolene vypnuté. Metóda prune_state_after() prijíma celočíselný argument. Ak ju zavoláte bez argumentu, predvolená hodnota je 2:

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