انتقل إلى المحتوى

تنظيف الحالة

مع تقدم سير العمل عبر خطوات كثيرة، قد يتضخم حجم الحالة المتراكمة. يزيل تنظيف الحالة تلقائيًا مخرجات الخطوات القديمة، ليُبقي حجم الحالة JSON محدودًا مع الاحتفاظ بالبيانات المهمة.

تفعيل تنظيف الحالة

استدعِ prune_state_after() على مُنشئ سير العمل. والوسيطة هي عدد الخطوات الأخيرة التي ينبغي الاحتفاظ بمخرجاتها:

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

باستخدام prune_state_after( 2 )، تُحذف مخرجات الخطوتين A وB من الحالة بعد اكتمال الخطوة D، بينما يُحتفظ بالخطوتين 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 عند استدعائها دون وسيطة:

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