La prevalencia es una técnica simple para proporcionar propiedades ACID a un modelo de objetos en memoria basado en la serialización binaria y el registro de escritura anticipada. Funciona así:
- Comience con una instantánea. Serialice el modelo de objetos y escríbalo en un archivo.
- Crea un archivo de diario. Para cada llamada al modelo de objetos, serialice la llamada y sus argumentos.
- Cuando el diario se hace demasiado grande, está cerrando, o de lo contrario es conveniente, realice un punto de control: escriba una nueva instantánea y trunca el diario.
- Para retroceder o recuperarse de un choque o golpe de poder, cargue la última instantánea y vuelva a ejecutar todas las llamadas grabadas en el diario.
Las precauciones necesarias para que esto funcione son:
- No permita que las referencias de objetos mutables escapen o entren en la capa de prevalencia. Necesita algún tipo de esquema proxy u OID, como si estuviera haciendo RPC. (Este es un error de novato tan común que se ha apodado el ' problema del bautismo ').
- Toda la lógica accesible desde una llamada debe ser completamente determinista y no debe realizar llamadas de E / S o SO con sentido de lógica empresarial. Escribir en un registro de diagnóstico probablemente esté bien, pero generalmente no se obtiene la hora del sistema o se inicia un delegado asincrónico. Esto es para que el diario se reproduzca de manera idéntica incluso si se restaura en una máquina diferente o en un momento diferente. (La mayoría del código de prevalencia proporciona una llamada de hora alternativa para obtener la marca de tiempo de la transacción).
- La concurrencia del escritor introduce ambigüedad en la interpretación de la revista, por lo que está prohibido.
¿Es porque ...
- la gente desarrolló un mal gusto por ellos después de tratar de usar uno en un proyecto que no estaba bien adaptado * ?
- ¿La defensa estridente de Klaus Wuestefeld apagó a la gente ?
- ¿A las personas que les gusta el modelo de programación imperativo no les gusta separar la E / S del cálculo , prefiriendo en cambio intercalar la computación con E / S y enhebrar llamadas?
- las capas de prevalencia son conceptualmente simples y están tan íntimamente ligadas a las características del marco que habitan que generalmente están hechas a medida para el proyecto, lo que las hace demasiado extrañas / no estándar / riesgosas.
- es demasiado difícil mantener la línea recta, ¿qué debes tener cuidado de no hacer?
- Las cabezas de los novatos parecen explotar cuando se enfrentan a algo que no es el mismo tipo de aplicación de base de datos de dos niveles que aprendieron a escribir en la escuela. ;)
* Los ataques todo el conjunto de datos en la RAM , que no necesitan escritor concurrencia, y no es necesario hacer consultas ad-hoc, informes o exportar a un almacén de datos. Con disculpas por SQLite, la prevalencia es una mejora en los archivos guardados, no un reemplazo para Oracle.