Tuvimos una muy buena experiencia almacenando la configuración en una base de datos para aplicaciones de larga ejecución (como sitios web y servicios). Ventajas:
- Puede editar la configuración remota y segura (usuario/contraseña)
- Es simple para la aplicación para recoger los cambios (
select max(lmod) from config
) de forma automática o por una señal (ping una página web o crear una archivo vacío en algún lugar)
- La aplicación solo necesita un único elemento de configuración por entorno (dev, test, prod): la base de datos a usar. Si tiene un servidor de aplicaciones, sus aplicaciones están libres de config para todos los entornos.
El problema principal es la edición si tiene una estructura de configuración jerárquica compleja con valores predeterminados, listas y herencia.Nuestras soluciones:
- La tabla de configuración consta de las siguientes filas: varchar de aplicación (32), varchar de claves (512), el valor varchar (4096)
- Una base de datos por medio ambiente (ordenador de desarrollo local, haciendo pruebas de desarrollo, prueba de integración , producción)
- La clave es jerárquica (option.suboption .... nombre)
- use valores predeterminados "opción. .name" (por ejemplo, "JDBC. .driver" ya que utilizamos un solo tipo de base de datos)
- Las listas se almacenan como cadenas, separadas por nueva línea.
- Los mapas se almacenan como cadenas, "nombre = valor \ n"
- Hay una implementación que puede leer la configuración desde un archivo (para pruebas unitarias). Asigne cada jerarquía de la clave a un elemento (......)
Los objetos de configuración ocultan estos detalles, por lo que la aplicación solo funciona con objetos.
Una clase especial es responsable de volver a leer la configuración en caso de un cambio. Por lo general, actualizamos la configuración en algún momento durante el día y un trabajo programado la volverá a cargar después de las horas. De esta forma, nunca necesitamos sincronizar los métodos de configuración.
La copia de seguridad y el historial de cambios fueron un problema. Lo arreglamos usando archivos XML en el VCS que luego se "cargan" en el DB. De esta forma, podríamos verificar la configuración de producción antes de cargarla (utilizándola con un conjunto especial de pruebas unitarias en una máquina desarrolladora). Cuando se activó durante la noche, por lo general funcionó de inmediato y el operador responsable de la aplicación simplemente tendría que hacer un poco de prueba.
Veo que esta pregunta todavía se ve muy bien, por lo que me gustaría sugerir lectores para comprobar las opciones NoSQL para este tipo de aplicaciones –