Questo è un problema che ho affrontato in molte lingue nel corso degli anni (js, go, c, f #, haskell, python, ...), ma non ho ancora trovato un approccio generale per risolverlo. L'apprendimento dei modelli di coerenza nei database mi ha fatto capire che tutti i miei approcci finora stanno fallendo in modi diversi, di solito finisco con un sacco di condizioni di gara accidentali.
Il problema:
Sto recuperando i dati da un db e li sto memorizzando in strutture dati in memoria su un server. Non c'è limite al numero di parti di una singola base di codice che possono contenere quegli elementi alla volta, quindi potremmo contenere due copie contraddittorie di un singolo dato in memoria se non stiamo attenti. Alcuni aggiornamenti richiedono modifiche atomiche nel db (tentativi di accesso, ad esempio), mentre altri (come il nome visualizzato dall'utente) possono essere obsoleti o memorizzati nella cache per un po 'di tempo. Non voglio chiamare il db su ogni lettura / scrittura, perché è un modo lento e costoso.
Come ti avvicini di solito a questo problema? Quali sono i pro / contro del tuo approccio? Ci sono alcune migliori pratiche indipendenti dalla lingua in questo settore? Un modo per essere ragionevolmente sicuro del codice libero da gare di dati?
Tagging come ORM anche se non è strettamente relativo ai mapping OOP-RDBMS, perché non so come chiamare la cosa più generale.