Treci la conținut

Curățarea stării

Pe măsură ce un flux de lucru parcurge numeroși pași, starea acumulată poate deveni voluminoasă. Curățarea stării elimină automat rezultatele pașilor vechi, pentru a menține starea JSON în limite rezonabile și a păstra datele importante.

Activarea curățării stării

Apelați prune_state_after() pe constructorul fluxului de lucru. Argumentul reprezintă numărul de pași recenți ale căror rezultate trebuie păstrate:

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

Cu prune_state_after( 2 ), după încheierea pasului D, rezultatele pașilor A și B sunt eliminate din stare. Pașii C și D (cei mai recenți doi) sunt păstrați.

Cum funcționează curățarea

Când este activată curățarea stării, Queuety urmărește cheile adăugate în stare de fiecare pas într-un tablou rezervat _step_outputs. După trecerea la un pas nou, sunt eliminate toate cheile introduse de pașii mai vechi decât pragul.

De exemplu, cu prune_state_after( 2 ):

Cod
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

Ce se păstrează

Queuety nu curăță niciodată cheile rezervate care încep cu _, precum _steps, _queue, _priority, _max_attempts, _on_cancel, _prune_state_after și _step_outputs. Cheile payloadului inițial transmise către dispatch() sunt și ele păstrate, deoarece nu sunt urmărite ca rezultate ale pașilor. În plus, Queuety păstrează cele mai recente N rezultate ale pașilor, conform pragului configurat.

Când să îl folosiți

Curățarea stării este utilă pentru fluxurile de lucru cu mulți pași, când fiecare pas produce date de care pașii ulteriori nu au nevoie. Exemple tipice sunt pipeline-urile lungi în care fiecare pas are nevoie doar de unul sau două rezultate anterioare, fluxurile ETL care generează structuri intermediare voluminoase și fluxurile recursive sau repetitive care altfel ar acumula o stare redundantă. Dacă fluxul de lucru are doar câțiva pași sau dacă pașii ulteriori depind încă de rezultatele timpurii, probabil că nu aveți nevoie de curățare.

Comportamentul implicit

Curățarea stării este dezactivată implicit. Metoda prune_state_after() acceptă un argument întreg. Dacă o apelați fără argument, valoarea implicită este 2:

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