Persistance (informatique)

En programmation, la gestion de la persistance des données (en anglais : persistence) et parfois des états d'un programme réfère au mécanisme responsable de la  sauvegarde et de la restauration des données. Ces mécanismes font en sorte qu'un programme puisse se terminer sans que ses données et son état d'exécution soient perdus.

Ces informations de reprise peuvent être enregistrées sur disque, éventuellement sur un serveur distant (un serveur de bases de données relationnelles, par exemple).

Du fait de la différence de modèles entre les bases de données et les langages de programmation (notamment les langages objet) la notion de correspondance entre modèles (en anglais : mapping) est centrale.

Exemples 
Les termes utilisés sont des couches logicielles permettant l'accès des données aux fichiers ou aux bases de données. L'utilisation d'une base de données objets évite le besoin d'un mapping objet-relationnel (en anglais object-relational mapping ou ORM) utilisé dans le cas de l'utilisation d'un langage objet et d'un stockage relationnel.

APL 
Le langage et système APL était muni de persistance dès 1969 : les programmes, les variables et l'état d'exécution y sont en effet contenus directement dans ce que l'on nomme un workspace (espace de travail). La commande )CONTINUE permet de sauvegarder l'ensemble, qui sera automatiquement rechargé à l'identique dès le redémarrage du système, y compris si l'on était dans une session de débogage. Plusieurs espaces de travail, ou le même à différentes étapes de traitement, peuvent être sauvegardés sous des noms différents.

Le même concept est présent dans Smalltalk avec sa notion d'image.

Java
 Fichier :
 RelStorage au format pickle
 JOAFIP
 Module driver basé sur les standards :
 JDBC
 API :
 EJB3
 Fractal
 Java Persistence API
 JDO et SDO
 Component :
 JPOX : implémente JDO JPA
 Laios
 Speedo implémente JDO
 ORM :
 Hibernate (ORM) a accès à HSQLDB (sgbd) par JDBC (interface)
 iBatis : compatible XML relationnel
 TopLink : développé par Oracle compatible JPA
 Cayenne compatible JDBC et fichier XML
 JORM
 Framework :
 MEDOR
 Perseus
 ASM

Cas particulier de Prevayler qui est une interface qui stocke toutes les données en RAM avec fichier de sauvegarde.

Python
 Fichier au format pickle est spécifique à Python et est portable, indépendant des plateformes :
 shelve dictionnaire  qui utilise pickle (fichier)
 pickle module python amélioré par cPickle (fichier)
 Module et SGBD :
 ZODB
 Module driver qui est une couche au-dessus d'une base de données qui doit être installée en premier  :
 anydbm, dbhash, dbm, dumbdbm, gdbm, whichdb
 Psycopg
 MySQL
 API :
 Il n'existe pas d'API standard faisant abstraction de la base de données utilisée comme ODBC sous Windows. Le plus connu a pour nom DB-API. Le driver multiplateforme a pour nom  mxODBC.
 Module ORM qui fournit une API de programmation évitant l'utilisation du SQL.
 SQLAlchemy
 Storm ORM
 SQLobject

Autres
 En électronique numérique, les données telles que les instructions d'un circuit programmable doivent être préservées (EEPROM, Flash, etc).
 Les serveurs de base de données relationnelles sauvegardent généralement les bases de données sur disque et les modifications sur un fichier journal (mécanisme du COMMIT).
 La sérialisation Java, ainsi que celle de Perl permettent de sauvegarder les objets sur disque ou dans une base de données relationnelle. Le langage Python dispose d'un module pickle pour sauver/restaurer des graphes d'objets sur disque.
 Le moteur de jeu Agar sauvegarde sa hiérarchie d'objets (tels que les cartes et les personnages) en format binaire. Le concepteur de niveaux crée la hiérarchie initiale et le joueur la modifie au cours du jeu.
 Les commandes )SAVE et )CONTINUE en APL permettent de sauvegarder la totalité de son environnement de travail (workspace) en catastrophe, et de reprendre le tout ensuite exactement là où on l'avait laissé. Forth dispose d'un mécanisme analogue.
 Les langages Smalltalk et Common Lisp ont la capacité de sauver sur disque une image (en anglais snapshot) du système ou du programme en train de s'exécuter. L'exécution du programme correspondant à cette image peut être reprise plus tard.
 La notion de prévalence des objets (sérialisation transparente des graphes d'objets en mémoire et support des transactions sur ces objets) connaît un récent succès d'estime, à travers ses implémentations en Java (Prevayler) et Common Lisp  (Elephant).

Voir aussi 
 Intergiciel
 Structure de données persistante
 Mapping objet-relationnel

Programmation informatique