sql >> Databáze >  >> RDS >> Mysql

StaleObjectStateException u vysokofrekvenčních aktualizací

Zdá se, že jste nakonfigurovali režim spánku tak, aby používal optimistické řízení souběžnosti . To znamená, že vaše tabulka uživatelů obsahuje pole verze, které se při každé aktualizaci řádku zvýší v režimu spánku.

Vaše transakce s největší pravděpodobností začíná na začátku požadavku HTTP a končí na konci odpovědi HTTP. To znamená, že proces úpravy uživatele se skládá ze dvou transakcí:jedné transakce k vyplnění webového formuláře a jedné transakce k uložení změn.

V takovém případě změna úrovně izolace databáze nepřinese nic dobrého. S největší pravděpodobností vše, co získáte, je horší výkon a škálovatelnost .

Není špatné mít StaleObjectException s. Odráží skutečný svět – lidé skutečně jednou za čas pracují na stejné věci a může dojít ke konfliktům. Otázkou je, když byl zjištěn konflikt, jak jej vyřešíte způsobem, který uspokojí koncové uživatele? Lze to vyřešit bez asistence uživatele?

Možné strategie by mohly být

  • přepsat změny předchozího uživatele (často ne to, co chcete – proto je potřeba kontroly souběžnosti),

  • zobrazit chybovou zprávu s žádostí o aktualizaci a opětovné provedení změn

  • automaticky sloučit změny bez přepsání změn předchozího uživatele (někdy je to možné)

  • informovat uživatele o zastaralosti jeho dat a nabídnout mu způsob, jak ručně sloučit své změny

Vše závisí na kontextu.



  1. vytvořte zbývající api url pro připojení k databázi mysql

  2. Jak vložit datum a čas s přesností na mikrosekundu do mysql?

  3. SQL:výběr řádků, kde se hodnota sloupce změnila oproti předchozímu řádku

  4. Jak vyléčím příčinu výjimky Hibernate Při volání setter došlo k výjimce IllegalArgumentException?