상태 정리
워크플로가 여러 단계를 거치면 누적된 상태가 커질 수 있습니다. 상태 정리는 오래된 단계 출력을 자동으로 삭제해 중요한 데이터를 보존하면서 상태 JSON의 크기를 제한합니다.
상태 정리 활성화
워크플로 빌더에서 prune_state_after()을 호출하세요. 인수는 출력을 유지할 최근 단계의 수입니다:
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 ] );
prune_state_after( 2 )을 사용하면 D 단계가 끝난 후 A 및 B 단계의 출력이 상태에서 제거됩니다. 최근 두 단계인 C와 D의 출력은 보존됩니다.
정리 작동 방식
상태 정리가 활성화되면 Queuety은 예약된 _step_outputs 배열에 각 단계가 상태에 추가하는 키를 기록합니다. 새 단계로 넘어간 뒤에는 기준보다 오래된 단계에서 추가된 키를 모두 삭제합니다.
예를 들어 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
보존되는 항목
Queuety은 _로 시작하는 예약 키를 절대 정리하지 않습니다. 예를 들면 _steps, _queue, _priority, _max_attempts, _on_cancel, _prune_state_after 및 _step_outputs이 있습니다. dispatch()에 전달된 초기 페이로드 키도 처음부터 단계 출력으로 추적되지 않으므로 보존됩니다. 그 외에는 Queuety이 설정한 기준에 따라 최근 N개 단계의 출력을 유지합니다.
사용 시점
상태 정리는 각 단계가 이후 단계에서 실제로 필요하지 않은 데이터를 생성하는 긴 워크플로에 유용합니다. 일반적인 예로는 각 단계에서 직전 한두 단계의 출력만 필요한 긴 파이프라인, 대량의 중간 구조를 생성하는 ETL 워크플로, 반복되는 상태가 계속 쌓일 수 있는 재귀 또는 반복 워크플로가 있습니다. 단계가 몇 개뿐이거나 후반 단계에서 초기 출력을 계속 사용한다면 정리가 필요하지 않을 수 있습니다.
기본 동작
상태 정리는 기본적으로 비활성화되어 있습니다. prune_state_after() 메서드는 정수 인수를 받습니다. 인수 없이 호출하면 기본값은 2입니다:
->prune_state_after() // keeps the 2 most recent step outputs
->prune_state_after( 5 ) // keeps the 5 most recent step outputs