Pregunta

La prevalencia es una técnica sencilla para proporcionar propiedades ACID a un modelo de objetos en memoria basado en la serialización binaria y el registro de escritura anticipada. Funciona de esta manera:

  • Comience con una instantánea. Serializar el modelo de objetos y escribir en un archivo.
  • Crea un archivo de diario. Para cada llamada en el modelo de objetos, serializar la llamada y sus argumentos.
  • Cuando la revista se hace demasiado grande, que está cerrando, o es de otro modo conveniente, realizar un puesto de control:. Escribir una nueva instantánea y truncar el diario
  • Para volver rollo o recuperarse de una falla de energía o de golpe, cargue la última instantánea y volver a ejecutar todas las llamadas grabadas en la revista.

Las precauciones necesarias para hacer este trabajo son:

  • No deje que las referencias a objetos mutables escapar o entrar en la capa de prevalencia. Es necesario algún tipo de esquema de proxy o OID, como si estuviera haciendo RPC. (Esto es un error común, tales novato que ha sido apodado el ' problema bautismo ').
  • Toda la lógica alcanzable desde una llamada debe ser completamente determinista, y no debe realizar E de lógica de negocio-significativa de E / S o SO llamadas. Escribir en un registro de diagnóstico es probablemente bien, pero conseguir la hora del sistema o el lanzamiento de un delegado asincrónica en general, no lo es. Esto es para que la revista vuelve a reproducir de forma idéntica incluso si se restauró en una máquina diferente o en un momento diferente. (La mayor prevalencia de código proporciona un tiempo de atención alternativa para obtener la fecha y hora de la transacción.)
  • Writer introduce ambigüedad en la interpretación de concurrencia diario, por lo que está prohibido.

¿Es porque ...

  • personas desarrollaron un mal sabor para ellos después de tratar de usar uno en un proyecto que no se adaptaba bien * a ella?
  • estridente promoción de Klaus Wuestefeld la gente desactivado ?
  • los que les gusta el modelo de programación imperativo aversión separación de E / S de cálculo , prefiriendo en lugar de cómputo intercalación con I / O y llamadas de roscado?
  • capas de prevalencia son tan conceptualmente simple y tan íntimamente unida a las características del marco que habitan que son por lo general-rodaron a medida para el proyecto, lo que los hace demasiado ajeno / no estándar / arriesgado?
  • que es demasiado duro para mantener recta lo que tiene que tener cuidado de no hacer?
  • cabezas novatos apenas se parecen a punto de estallar cuando se enfrentan a algo que no es el mismo tipo de aplicación de dos niveles con bases de datos que han aprendido a escribir en la escuela? ;)

* todo el conjunto de datos se ajusta en la memoria RAM , no es necesario escritor de concurrencia, y que no es necesario hacer consultas ad-hoc, informes o exportar a un almacén de datos. Con perdón de SQLite, la prevalencia es una mejora con respecto Parada en archivos, no un reemplazo para Oracle.

¿Fue útil?

Solución

creo que algunos de los problemas es que tienen un caso de uso muy específico (su razón para no adecuado). He construido y trabajado en sistemas que utilizan este enfoque y cuando se tiene un problema que es en realidad este problema puede ser una solución maravillosa.

Otra parte es que se parece mucho al igual que algunos de los bits más dolorosos de almacenamiento de datos a medida que utilizó para encontrar una gran cantidad de más de 10 años atrás y tiene algunas de las mismas trampas (piensa por lotes actualizado btreive por ejemplo) que trae en su punto "demasiado a medida", sino que también hace que sea difícil de encontrar por las partes de la plataforma que el trabajo cortésmente con él.

La última parte es que pueden ser maldito difícil de consulta contra en muchos casos y la gente en general son bastante acostumbrado a ser capaz de obtener sus respuestas en este momento.

Otros consejos

Creo que primero tiene que demostrar que tantos desarrolladores absolutamente los odio. No creo que ese es el caso. Tengamos en cuenta que Fowler, un tiempo atrás, formalizado un patrón de las clases para este aquí .

La respuesta a la pregunta es que si bien la teoría es simple la práctica no lo es.

Sólo probando una configuración de este tipo requiere docenas de casos de prueba, añadir en el proceso de mutli o código multihilo y esto salta a cientos de posibles condiciones que necesitan ser probados, tanto para la persistencia y recuperación.

Cualquier monitor de transacciones tales como CICS, Tuxedo, Weblogic, Websphere, JBoss o NET, proporcionará todas estas instalaciones de una manera limpia y probado. Y cualquier base de datos proporcionará "suficiente" transaccional / persistencia para la mayoría de aplicaciones.

Su principalmente un caso de que la rueda se inventó y perfeccionó hace mucho tiempo.

Los requisitos previos sonar un poco onerosa de código por todas partes, sobre todo con la mayoría de sistemas no necesitan el cumplimiento ácido cuando se ejecuta en la memoria. sonidos de arriba un poco desagradable también - hay un montón de seguimiento de estado involucrado allí.

Licenciado bajo: CC-BY-SA con atribución
scroll top