Questo approccio è praticamente il modo accettato di fare qualsiasi cosa nella nostra azienda. Un semplice esempio: quando un dato di un cliente viene richiesto da un servizio, recuperiamo tutti i dati per quel cliente (parte rilevante del servizio) e lo salviamo in un dizionario in memoria, quindi lo servono da lì in seguito alle richieste (gestiamo servizi singleton). Qualsiasi aggiornamento va a DB, quindi aggiorna il dizionario in memoria. Sembra tutto semplice e innocuo, ma quando implementiamo regole aziendali più complicate, la cache non è più sincronizzata e dobbiamo fare i conti con bug difficili da trovare. A volte rimandiamo la scrittura al database, mantenendo i nuovi dati nella cache fino ad allora. Ci sono casi in cui memorizziamo milioni di righe in memoria perché la tabella ha molte relazioni con altre tabelle e dobbiamo mostrare rapidamente i dati aggregati.
Tutta questa gestione della cache è una parte importante della nostra base di codice e sento che questo non è il modo giusto per farlo. Tutta questa giocoleria aggiunge troppo rumore al codice e rende difficile capire la reale logica di business. Tuttavia, non penso che possiamo fornire i dati in un ragionevole lasso di tempo se dovessimo colpire il database ogni volta.
Sono scontento della situazione attuale ma non ho un'alternativa migliore. La mia unica soluzione sarebbe quella di usare la cache di 2 ° livello di NHibernate ma non ho quasi nessuna esperienza con esso. So che molte aziende usano Redis o MemCached pesantemente per ottenere prestazioni, ma non ho idea di come vorrei integrarle nel nostro sistema. Inoltre, non so se riescono a ottenere prestazioni migliori rispetto alle strutture e alle query dei dati in memoria.
Esistono approcci alternativi che dovrei esaminare?