Gestirà il problema di aggiornamento di due persone ok?Ruby on Rails - La transazione contro-cache è sicura?
I Googled e guardò nel api ma non trovò nulla
Rails 3+, ruby 1.9.3
Gestirà il problema di aggiornamento di due persone ok?Ruby on Rails - La transazione contro-cache è sicura?
I Googled e guardò nel api ma non trovò nulla
Rails 3+, ruby 1.9.3
Quando si utilizza counter_cache, l'inserto di record e l'aggiornamento del contatore sono fatte nella stessa transazione. Ma questo non garantisce l'atomicità di un'operazione. Potrebbe essere necessario "bloccare" il record oltre a evitare il problema di aggiornamento di due persone.
Vedere this excellent article. Si tratta della gemma degli oggetti redis ma le prime due parti spiegano perfettamente il problema e la soluzione con ActiveRecord.
Risposta breve: no. Come menziona Cédric, Rails aggiorna lo counter_cache
all'interno di una transazione, quindi se si dice che si ha un processo in background che aggiorna lo stesso record, si troveranno errori deadlock a meno che non si eseguano entrambi gli aggiornamenti utilizzando un blocco with_lock
nel record.