Proporcionar una instantánea histórica única y actual de una base de datos H2
Frecuentes
Visto 180 veces
1
Actualmente estoy trabajando en una aplicación Java respaldada por una base de datos H2 que generará periódicamente varios archivos según su modelo (la frecuencia será configurable y actualmente el valor predeterminado es una vez por hora). Para respaldar este comportamiento por lotes, necesito proporcionar dos versiones del modelo de datos a pedido del usuario: la versión "Actual" que se puede editar libremente y la versión "Aplicada" que es de solo lectura y se puede usar para consultar el comportamiento real del sistema. Las soluciones que he encontrado son:
- Podría agregar datos históricos a la base de datos y derivar la versión forzada de eso. Desconfiamos de esta opción ya que el modelo es bastante complejo con muchas relaciones de muchos a muchos y no queremos empeorar las cosas (ni siquiera estoy seguro de cómo podría mantener un historial fácilmente consultable de unión tablas a través de Hibernate)
- Podría copiar la base de datos a una segunda ubicación y proporcionar acceso a ambos. Esta fue la primera solución que alguien me sugirió, pero no me gusta la idea de tener que cerrar constantemente todas las conexiones a ambos mientras espero que se realice la copia.
- Podría mantener las dos bases de datos una al lado de la otra y proporcionar mi propia implementación de EntityManager para escrituras que envuelve un administrador de entidades para cada base de datos, confirma la transacción a la versión actual y descarga a la versión forzada pero no confirma para que otros EntityManagers no verán los cambios. Comencé a implementar esto, pero se siente frágil, y si la aplicación se reinicia sin realizar la confirmación (lo cual es probable; hacer que los apagados dependan de completar la escritura de un archivo no siempre será posible), entonces volverá a hacer una copia completa para el primero escribe.
- Podría mantener dos bases de datos y conservar una lista de todos los objetos de transacción que ingresan. Luego, en un archivo, escriba las transacciones almacenadas que se pueden aplicar al modelo aplicado y borrar. Esto es a lo que me inclino actualmente, debería ser confiable ya que las transacciones se ponen en cola de forma persistente y se escriben para ser idempotentes y atómicas, por lo que será resistente a los bloqueos, etc. Aún así, parece que debería haber una forma más elegante.
¿Hay algo mejor para proporcionar una especie de instantánea histórica disponible activamente como esta de una manera simple y con un rendimiento razonable?
0 Respuestas
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas hibernate jpa h2 or haz tu propia pregunta.
Podrías usar el copia de seguridad en línea. No es necesario cerrar ninguna conexión para eso. La copia de seguridad en línea es rápida, ya que es de bajo nivel (básicamente, copia el archivo). ¿Sería esa una opción? - Thomas Mueller
Eso bien puede funcionar, lo probaré y veré cómo se comporta, ¡gracias por la sugerencia! - Illessa