Ho preso una classe di database in questo semestre e stiamo studiando il mantenimento della coerenza della cache tra RDBMS e un server cache come memcached. I problemi di coerenza sorgono quando ci sono condizioni di gara. Ad esempio:Consistenza cache durante l'utilizzo di memcached e rdbms come MySQL
- Supponiamo di fare un
get(key)
dalla cache e c'è un errore di cache. Perché ottengo un errore di cache, recupero i dati dal database e quindi eseguo ilput(key,value)
nella cache. - Tuttavia, potrebbe verificarsi una condizione di competizione, in cui altri utenti potrebbero eliminare i dati recuperati dal database. Questa eliminazione potrebbe accadere prima di fare un
put
nella cache.
Quindi, idealmente il put
nella cache non dovrebbe accadere, poiché i dati sono più presenti nel database.
Se la voce di cache ha un TTL, la voce nella cache potrebbe scadere. Ma ancora, c'è una finestra in cui i dati nella cache sono incoerenti con il database.
Sono stato alla ricerca di articoli/documenti di ricerca che parlano di questo tipo di problemi. Ma non sono riuscito a trovare alcuna risorsa utile.
Spiegare come sono corrette le condizioni di gara citate nella domanda. la tua risposta apparentemente non affronta il problema. – Alexey