Mam następującą konfigurację:Django save() zachowanie z transakcjami AUTOCOMMIT
- Kilka pracownicy przetwarzania danych uzyskać konfigurację z django widzenia
get_conf()
przez http. - konfiguracja jest przechowywana w modelu django przy użyciu MySQL/InnoDB backend
- modelu konfiguracja ma przesłonięte
save()
metodę, która mówi pracownikom, aby przeładować Configuration
Zauważyłem, że czasami pracownicy nie otrzymują poprawnie zmienioną konfigurację. W szczególności, gdy czas przeładowania conf był krótszy niż zwykle, pracownicy otrzymali "starą" konfigurację z get_conf()
(brak ostatniej zmiany). Model transakcji używany w Django jest domyślnym autocommit.
I mają pochodzić z poniższego możliwy scenariusz, który mógłby spowodować zachowanie:
- Nowa konfiguracja zostanie zapisana
save()
powroty ale MySQL/InnoDB jest nadal przetwarzania (Auto) zobowiązać- Pracowników są uruchamiane i tworzą żądanie http dla nowej konfiguracji
- Zakończenia zatwierdzania MySQL (automatyczne)
Czy krok 2 w powyższym scenariuszu jest możliwy? To znaczy, czy django model save()
może powrócić przed faktycznym zatwierdzeniem danych w bazie danych, jeśli używana jest metoda transakcyjna autocommit? Lub, aby przejść o jedną warstwę w dół, czy automatyczne kończenie operacji MySQL INSERT
lub UPDATE
przed zakończeniem zatwierdzenia (aktualizacja/wstawienie widoczne dla innych transakcji)?
Czy używasz InnoDB lub MyISAM dla swojego silnika? – FlipperPA
InnoDB. DB działa na Amazon RDS z domyślną konfiguracją.Istnieje kilka dużych tabel, ale tabele związane z tym problemem są małe (rzędu około 128kb). – jhonkola
Czy możesz wyłączyć automatyczne zatwierdzanie tylko w tym przypadku? – sobolevn