nei miei ceppi hoptoad farò periodicamente vedereTransient Mysql :: Errore: voce duplicata su un sito ad alto traffico - qualche idea?
Mysql::Error: Duplicate entry 'XXXX' for key 'YYY'
Questo accade per la maggior parte dei miei modelli, circa 6 in tutto, e vedrò questo errore una volta ogni paio d'ore su un sito che fa circa 5k richieste/minuto secondo a newrelic.
Sto facendo un ActiveRecord.find_or_initialize_by in ognuno di questi casi. È possibile, ma improbabile, che questo provenga da un client sul campo che esegue due post simultanei degli stessi dati, poiché si tratta di client mobili e il codepath non si presta realmente a questo (ovvero, non si tratta di un clic del client un pulsante di invio due volte rapidamente).
C'è un problema noto con find_or_initialize_by? E 'possibile che la mia istanza mysql (Amazon RDS) sia ogni tanto appena sfaldata (anche se mi aspetterei di sollevare un'eccezione in quel caso e non restituire dati) ...
Inoltre, c'è un modo migliore inserire record? Se il record esiste, generalmente aggiorno solo il suo campo updated_at.
Grazie!
Grazie per le informazioni .... probabilmente hai ragione, immagino sia teoricamente possibile che se c'è una latenza in una delle mie operazioni DB e un utente ripete in qualche modo un'azione, potrei attivare questo comportamento. Non lo vedo così spesso almeno (una volta ogni poche ore sembra fare migliaia di richieste/min). Ho letto il post sul blog di Rails Warts, sto facendo quello che lui e voi suggerite (sostenendolo con un controllo di validità del DB), quindi suppongo che sia buono come adesso. – esilver