Εκκαθάριση κατάστασης
Καθώς μια ροή εργασίας προχωρά σε πολλά βήματα, η συσσωρευμένη κατάσταση μπορεί να μεγαλώσει. Η περικοπή κατάστασης αφαιρεί αυτόματα παλαιότερα αποτελέσματα βημάτων, ώστε να διατηρεί την κατάσταση JSON περιορισμένη, διατηρώντας παράλληλα τα δεδομένα που έχουν σημασία.
Ενεργοποίηση εκκαθάρισης κατάστασης
Καλέστε το prune_state_after() στο builder της ροής εργασιών. Το όρισμα είναι ο αριθμός των πρόσφατων βημάτων των οποίων τα αποτελέσματα πρέπει να διατηρηθούν:
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. Διατηρούνται επίσης τα αρχικά κλειδιά payload που περνούν στο 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