La prévalence est une technique simple pour fournir des propriétés ACID à un modèle d'objet en mémoire basé sur la sérialisation binaire et la journalisation en écriture anticipée. Cela fonctionne comme ceci:
- Commencez avec un instantané. Sérialisez le modèle d'objet et écrivez-le dans un fichier.
- Créez un fichier journal. Pour chaque appel dans le modèle objet, sérialisez l'appel et ses arguments.
- Lorsque le journal devient trop volumineux, vous arrêtez, ou autrement c'est pratique, effectuez un point de contrôle: écrivez un nouvel instantané et tronquez le journal.
- Pour revenir en arrière ou récupérer après un crash ou une coupure de courant, chargez le dernier instantané et réexécutez tous les appels enregistrés dans le journal.
Les précautions nécessaires pour faire ce travail sont:
- Ne laissez pas les références d'objets mutables s'échapper ou entrer dans la couche de prévalence. Vous avez besoin d'une sorte de proxy ou de schéma OID, comme si vous faisiez du RPC. (C'est une erreur si courante pour les débutants qu'elle a été surnommée le `` problème du baptême ''.)
- Toute la logique accessible à partir d'un appel doit être complètement déterministe et ne doit pas effectuer d'appels d'E / S ou de système d'exploitation significatifs pour la logique métier. L'écriture dans un journal de diagnostic est probablement OK, mais l'obtention de l'heure système ou le lancement d'un délégué asynchrone ne l'est généralement pas. Il en est ainsi que le journal est relu à l'identique même s'il est restauré sur une machine différente ou à un moment différent. (La plupart des codes de prévalence fournissent un autre appel horaire pour obtenir l'horodatage de la transaction.)
- La simultanéité des écrivains introduit une ambiguïté dans l'interprétation des revues, elle est donc interdite.
Est-ce parce que ...
- les gens ont développé un mauvais goût pour eux après avoir essayé d'en utiliser un sur un projet qui ne leur convenait pas * ?
- Le plaidoyer strident de Klaus Wuestefeld a rebuté les gens ?
- les gens qui aiment le modèle de programmation impératif n'aiment pas séparer les E / S du calcul , préférant plutôt entrelacer le calcul avec les E / S et les appels de thread?
- les couches de prévalence sont si conceptuellement simples et si intimement liées aux caractéristiques du cadre qu'elles habitent qu'elles sont généralement personnalisées pour le projet, ce qui les rend trop étrangères / non standard / risquées?
- il est tout simplement trop difficile de garder ce que vous devez faire attention à ne pas faire?
- la tête des débutants semble juste exploser face à quelque chose qui n'est pas le même type d'application basée sur une base de données à deux niveaux qu'ils ont appris à écrire à l'école? ;)
* L' ensemble des données tient dans la RAM , vous n'avez pas besoin de la simultanéité des écrivains et vous n'avez pas besoin de faire des requêtes ad hoc, des rapports ou des exportations vers un entrepôt de données. Avec des excuses à SQLite, la prévalence est une amélioration des fichiers de sauvegarde, pas un remplacement pour Oracle.