Очищення стану
У міру проходження робочого потоку через багато кроків накопичений стан може збільшуватися. Очищення стану автоматично видаляє результати старих кроків, щоб обмежити розмір стану 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