En informatique , la persistance désigne la capacité d'un système à conserver son état au-delà du processus qui l'a créé. Concrètement, cela se traduit par le stockage de cet état sous forme de données dans un dispositif de stockage informatique . Les programmes doivent donc transférer des données entre ce dispositif et les systèmes de stockage, et établir des correspondances entre les structures de données du langage de programmation natif et celles du dispositif de stockage.
Les logiciels de retouche d'images ou de traitement de texte , par exemple, assurent la persistance de l'état en enregistrant leurs documents dans des fichiers .
Persistance orthogonale ou transparente
On dit que la persistance est « orthogonale » ou « transparente » lorsqu'elle est implémentée comme une propriété intrinsèque de l'environnement d'exécution d'un programme. Un environnement de persistance orthogonal ne requiert aucune action spécifique de la part des programmes qui s'y exécutent pour récupérer ou sauvegarder leur état .
La persistance non orthogonale exige que les données soient écrites et lues sur et depuis le stockage à l'aide d'instructions spécifiques dans un programme, ce qui entraîne l'utilisation de persister comme verbe transitif : Une fois terminé, le programme persiste les données .
L'avantage des environnements de persistance orthogonaux réside dans des programmes plus simples et moins sujets aux erreurs.
Le terme « persistant » a été introduit par Atkinson et Morrison dans le sens de persistance orthogonale : ils ont utilisé un adjectif plutôt qu’un verbe pour souligner que la persistance est une propriété des données, distincte d’une action impérative exécutée par un programme. L’emploi du verbe transitif « persister » (décrivant une action exécutée par un programme) est une rétroformation.
Adoption
La persistance orthogonale est largement adoptée dans les systèmes d'exploitation pour l'hibernation et dans les systèmes de virtualisation de plateformes tels que VMware et VirtualBox pour la sauvegarde d'état.
Des langages prototypes de recherche tels que PS-algol , Napier88 , Fibonacci et pJama ont démontré avec succès les concepts ainsi que leurs avantages pour les programmeurs.
Techniques de persévérance
Images système
L'utilisation de journaux est la deuxième technique de persistance la plus simple. La journalisation consiste à enregistrer les événements dans un journal avant leur application au système. Ces journaux sont appelés journaux système.
Au démarrage, le journal est lu et chaque événement est réappliqué au système, évitant ainsi toute perte de données en cas de panne ou d'arrêt du système.
L'historique complet des commandes « Annuler/Rétablir » de l'utilisateur dans un programme de retouche photo, par exemple, lorsqu'il est enregistré dans un fichier, constitue un journal capable de récupérer l'état d'une image modifiée à n'importe quel moment.
Les journaux sont utilisés par les systèmes de fichiers journalisés , les systèmes courants et les systèmes de gestion de bases de données où ils sont également appelés « journaux de transactions » ou « journaux de restauration ».
Inconvénients : L’utilisation exclusive de journaux de transactions implique la réapplication de l’historique complet (potentiellement volumineux) de tous les événements système à chaque démarrage. C’est pourquoi les journaux de transactions sont souvent associés à d’autres techniques de persistance.
Écrits sales
Cette technique consiste à n'enregistrer que les portions de l'état du système qui ont été modifiées (contiennent des modifications) depuis leur dernière écriture. Les applications de traitement de texte sophistiquées, par exemple, utilisent cette technique pour ne sauvegarder que les parties d'un document qui ont réellement été modifiées depuis la dernière sauvegarde.
Inconvénients : Cette technique exige l’interception des changements d’état au sein d’un programme. Ceci est réalisé de manière opaque, via des appels spécifiques à l’API de stockage, ou de manière transparente, par transformation automatique du programme . Il en résulte un code plus lent que le code natif et plus complexe à déboguer.
Couches de persistance
Toute couche logicielle facilitant la persistance de l'état d'un programme est généralement appelée couche de persistance. La plupart des couches de persistance n'assurent pas directement la persistance des données, mais utilisent un système de gestion de base de données sous-jacent .