Siirry sisältöön

Tilan karsiminen

Kun työnkulku etenee monien vaiheiden läpi, kertynyt tila voi kasvaa suureksi. Tilan karsiminen poistaa automaattisesti vanhojen vaiheiden tulosteita, jotta tila pysyy JSON rajattuna ja tärkeät tiedot säilyvät.

Tilan karsimisen käyttöönotto

Kutsu prune_state_after()-metodia työnkulun rakentajassa. Argumentti määrittää, kuinka monen viimeisimmän vaiheen tulosteet säilytetään:

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

Kun käytössä on prune_state_after( 2 ), vaiheen D valmistuttua vaiheiden A ja B tulosteet poistetaan tilasta. Vaiheet C ja D eli kaksi viimeisintä vaihetta säilytetään.

Miten karsiminen toimii

Kun tilan karsiminen on käytössä, Queuety seuraa varattuun _step_outputs-taulukkoon, mitä avaimia kukin vaihe lisää tilaan. Uuteen vaiheeseen siirtymisen jälkeen poistetaan kaikki kynnystä vanhempien vaiheiden lisäämät avaimet.

Esimerkiksi asetuksella prune_state_after( 2 ):

Koodi
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

Säilytettävät tiedot

Queuety ei koskaan karsi varattuja avaimia, jotka alkavat etuliitteellä _, kuten _steps, _queue, _priority, _max_attempts, _on_cancel, _prune_state_after ja _step_outputs. Myös dispatch()-metodille välitetyt alkuperäiset hyötykuorma-avaimet säilyvät, sillä niitä ei alun perinkään seurata vaiheiden tulosteina. Lisäksi Queuety säilyttää N viimeisintä vaiheen tulostetta määrittämäsi kynnyksen mukaan.

Milloin sitä kannattaa käyttää

Tilan karsimisesta on hyötyä monivaiheisissa työnkuluissa, joissa kukin vaihe tuottaa tietoja, joita myöhemmät vaiheet eivät tarvitse. Tyypillisiä esimerkkejä ovat pitkät käsittelyputket, joissa kukin vaihe tarvitsee vain edellisen yhden tai kaksi tulostetta, suuria välirakenteita tuottavat ETL-työnkulut sekä rekursiiviset tai toistuvat työnkulut, joihin muuten kertyisi samanlaista tilaa. Jos työnkulussa on vain muutama vaihe tai myöhemmät vaiheet tarvitsevat edelleen aiempien vaiheiden tulosteita, karsimista ei todennäköisesti tarvita.

Oletustoiminta

Tilan karsiminen on oletusarvoisesti poissa käytöstä. prune_state_after()-metodi hyväksyy kokonaislukuargumentin. Ilman argumenttia kutsuttaessa oletusarvo on 2:

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