ho un seguente configurazione:Django save() comportamento con le transazioni autocommit
- Diversi lavoratori di trattamento dei dati di configurazione ottengono dalla vista Django
get_conf()
da http. - configurazione viene memorizzata nel modello di Django utilizza MySQL/InnoDB backend
- modello di configurazione ha ignorato
save()
metodo che dice ai lavoratori di ricaricare la configurazione
Ho notato che a volte gli operai non ricevono correttamente la configurazione modificata. In particolare, quando il tempo di ricarica è stato più breve del solito, i lavoratori hanno ottenuto la configurazione "vecchia" da get_conf()
(manca la modifica più recente). Il modello di transazione utilizzato in Django è l'autocommit predefinito.
Sono venuto con la seguente possibile scenario che potrebbe causare il comportamento:
- Nuova configurazione viene salvata
save()
rendimenti ma MySQL/InnoDB sta ancora elaborando la (auto) commettere- Lavoratori sono avviato e fare richiesta HTTP per nuova configurazione
- MySQL (auto) commettere finiture
È possibile il passaggio 2 nello scenario sopra riportato? Cioè, è possibile restituire il modello django save()
prima che i dati vengano effettivamente impegnati nel DB se viene utilizzato il metodo transazionale autocommit? Oppure, per scendere di un livello, MySQL può eseguire l'autocommitting dell'operazione INSERT
o UPDATE
prima che il commit sia completato (aggiornamento/inserimento visibile ad altre transazioni)?
Stai utilizzando InnoDB o MyISAM per il tuo motore? – FlipperPA
InnoDB. Il DB è in esecuzione su Amazon RDS con configurazione predefinita.Esistono alcune tabelle di grandi dimensioni, ma le tabelle relative a questo problema sono piccole (dell'ordine di 128 kb o giù di lì) – jhonkola
È possibile disattivare l'autocommit solo per questo caso? – sobolevn