Al momento disponiamo di un framework applicativo in cui memorizziamo automaticamente sia le entità che le raccolte di entità a livello aziendale (utilizzando la cache .NET). Quindi il metodo GetWidget (int id) controlla la cache utilizzando una chiave Widget_Id_ {0} prima di colpire il database e il metodo GetWidgetsByStatusId (int statusId) controlla la cache utilizzando Widgets_Collections_ByStatusId_ {0}. Se gli oggetti non sono nella cache, vengono recuperati dal database e aggiunti alla cache.
Questo approccio è ovviamente veloce per gli scenari di lettura, e poiché un approccio globale è veloce da implementare, ma richiede un numero elevato di chiavi di cache da eliminare quando le operazioni CRUD vengono eseguite sulle entità. Ovviamente, con l'aggiunta di metodi aggiuntivi, questo impatta le prestazioni e diminuiscono i vantaggi del caching.
Sono interessato ad approcci alternativi alla gestione della memorizzazione nella cache delle raccolte. So che NHibernate memorizza nella cache una lista degli identificatori nella raccolta piuttosto che le entità reali. È un approccio che altre persone hanno provato: quali sono i pro e i contro?
In particolare, sto cercando opzioni che ottimizzino le prestazioni e possano essere implementate automaticamente attraverso il codice generato da boilerplate (abbiamo il nostro strumento di generazione del codice). So che alcune persone diranno che il caching deve essere fatto a mano ogni volta per soddisfare le esigenze della situazione specifica, ma sto cercando qualcosa che ci farà ottenere la maggior parte del modo automaticamente.