Persistance

Persistance de valeurs Catnip entre deux exécutions.

Pourquoi cette catégorie

Certaines étapes de pipeline produisent des résultats intermédiaires coûteux à recalculer. freeze et thaw permettent de sérialiser ces valeurs en bytes, puis de les restaurer plus tard depuis un backend local comme SQLite ou un service partagé comme Redis.

Un pipeline qui recommence tout à chaque run cramme du temps pour rien.

Cas d'usage : checkpoints de pipeline, reprise après interruption, snapshots de calcul, partage d'états intermédiaires entre runs.

Exemples

Fichier Module Description
sqlite_checkpoint_pipeline.cat sqlite3 Checkpoint local atomique, invalidation SHA-256 et reconstruction d'un struct après thaw
redis_nd_pipeline_checkpoint_openalex.cat redis Checkpoint d'un pré-agrégat OpenAlex calculé en ND multiprocess, puis reprise via thaw
redis_clear_checkpoint_openalex.cat redis Supprime la clé Redis du checkpoint pour relancer l'exemple depuis zéro

Données

  • data/openalex-works-sample.jsonl - Échantillon de 100 works OpenAlex (métadonnées de publications)

Exécution

SQLite ne nécessite aucun service externe. Le premier appel force un checkpoint miss ; le second restaure le rapport :

CATNIP_SQLITE_RESET=1 catnip codex/persistence/sqlite_checkpoint_pipeline.cat
catnip codex/persistence/sqlite_checkpoint_pipeline.cat

Le payload est écrit sous BEGIN IMMEDIATE, puis vérifié après fermeture et réouverture de la base. freeze sérialise un record structurel ; après thaw, l'exemple reconstruit explicitement le struct nominal Checkpoint. Voir la documentation SQLite sur les transactions.

Un troisième chemin ne demande aucune variable d'environnement : modifier data/openalex-works-sample.jsonl change son empreinte SHA-256, et le run suivant annonce un miss « empreinte source modifiée » puis recalcule le rapport. C'est l'invalidation automatique du checkpoint périmé.

Les exemples Redis nécessitent un serveur local (localhost:6379) :

catnip codex/persistence/redis_nd_pipeline_checkpoint_openalex.cat   # run 1 : calcul + checkpoint
catnip codex/persistence/redis_nd_pipeline_checkpoint_openalex.cat   # run 2 : reprise via thaw
catnip codex/persistence/redis_clear_checkpoint_openalex.cat         # remise à zéro