Abbiamo avuto un'esperienza molto buona con l'archiviazione della configurazione in un database per applicazioni a esecuzione prolungata (come siti Web e servizi). Vantaggi:
- È possibile modificare la configurazione in remoto e in modo sicuro (user/password)
- E 'semplice per l'applicazione per prendere cambiamenti (
select max(lmod) from config
) automaticamente o da un segnale (ping una pagina web o creare un file vuoto da qualche parte)
- L'applicazione richiede solo una singola voce di configurazione per ambiente (dev, test, prod): il DB da utilizzare. Se si dispone di un server applicazioni, le applicazioni sono config libere per tutti gli ambienti.
Il problema principale è la modifica se si dispone di una struttura di configurazione gerarchica complessa con valori predefiniti, elenchi ed ereditarietà.Le nostre soluzioni:
- La tabella di configurazione ha queste righe: varchar Application (32), varchar chiave (512), valore varchar (4096)
- Un DB per ambiente (macchina sviluppatore locale, test di sviluppo, test di integrazione , produzione)
- La chiave è gerarchica (option.suboption .... nome)
- Defaults usano "l'opzione. .name" (ad esempio, "JDBC. .driver", dal momento che usiamo un solo tipo di database)
- Le liste sono memorizzate come stringhe, separate da newline.
- Le mappe sono come stringhe, "nome = valore \ n"
- Esiste un'implementazione che può leggere la configurazione da un file (per i test di unità). Mappare ogni gerarchia della chiave a un elemento (......)
Gli oggetti di configurazione nascondono questi dettagli, quindi l'applicazione funziona solo con gli oggetti.
Una classe speciale è responsabile della rilettura della configurazione in caso di modifica. Di solito, aggiorniamo la configurazione un po 'di tempo durante il giorno e un lavoro a tempo verrà ricaricato dopo ore. In questo modo, non abbiamo mai bisogno di sincronizzare i metodi di configurazione.
Backup e cronologia delle modifiche erano un problema, però. Lo abbiamo risolto utilizzando i file XML nel VCS che vengono poi "caricati" sul DB. In questo modo, abbiamo potuto verificare la configurazione di produzione prima di caricarla (usandola con una serie speciale di test unitari su una macchina per sviluppatori). Quando è stato attivato durante la notte, di solito ha funzionato subito e l'operatore responsabile dell'app avrebbe dovuto fare solo un po 'di test.
fonte
2009-02-19 10:27:38
Vedo che questa domanda è ancora altamente visualizzata, quindi vorrei solo suggerire ai lettori di controllare le opzioni NoSQL per questo tipo di applicazioni –