ASP.NET MVC - souběžnost databáze

Obsah
Manipulace s souběh Ve webových aplikacích je to jedno z témat, kterým musíme věnovat trochu kvalitního času, protože vzhledem k samotné povaze aplikace se můžeme setkat s případy, kdy několik uživatelů musí komunikovat se stejným prvkem.
Samo o sobě je interakce Není to problém, skutečný problém nastává, když po úpravě nebo dotyku tohoto prvku je nutné jej uložit do databáze a poté dva nebo více uživatelů chce provést akci na stejném prvku současně, to je místo, kde naše logika musí definovat chování, abychom věděli, jaký je správný způsob, jak to zvládnout.
Jak jsme vysvětlili na začátku, souběh Je to tehdy, když dva nebo více aktérů pracuje na prvku v naší aplikaci a generuje akci proti databázi.
Souběžný případProblémy mohou nastat, když jsou změny konfliktní, například: uživatel A uložil hodnotu, ale uživatel B v té době také upravoval a uložil jinou hodnotu, v očích uživatele A nebyl její obsah upraven a v očích uživatele uživateli B nic nebránilo v jeho změně.
Tyto typy konfliktů mohou pošpinit výkon naší aplikace v očích uživatele, takže musíme vyhodnotit, zda oblasti, které máme, budou stát za to, nebo nebudou souběžně programovat.
Podívejme se na některé typy souběžnostiTímto způsobem můžeme trochu lépe pochopit, jaký typ akcí můžeme v našich aplikacích provést:
Pesimistická souběžnostTento přístup navrhuje, abychom při používání databáze vytvořili a preventivní blokování používaného registru, čímž se vyhneme tomu, aby více uživatelů upravovalo hodnotu současně, problém má za následek, že ve webovém prostředí to není možné použít důkladně, protože jelikož neexistují žádné státy, ve skutečnosti nevíme, zda zámek byl použit nebo odstraněn, dokud nebudeme komunikovat se serverem, což způsobí zmatek a pomalost při používání.
Optimistická účastTento jiný přístup místo toho dělá něco trochu kompatibilnějšího s webem, při úpravách před uložením do databáze ověří, že data nebyla změněna od okamžiku, kdy bylo provedeno čtení, za tímto účelem porovnáváme hodnoty záznamů a přidružené pole, které pro větší přesnost nese časové razítko s datem, časem a sekundami.
ASP.NET MVC Nepodporuje pesimistický přístup, takže musíme pracovat s optimistickým přístupem, proto musíme našim strukturám poskytnout pole data, aby bylo možné uložit poslední úpravu, abychom mohli zjistit, zda byla hodnota změněna poté, co jsme získali záznam a než to uložíme, můžeme tím získat výstrahu a rozhodnout se, zda tyto hodnoty přepsat nebo ne.
Podívejme se na malý příklad kódu, jak bychom to mohli ověřit:

Všimli jsme si tedy, že při provádění změny v databázi ověřujeme, zda bylo pole změněno poté, co jsme provedli čtení, pokud ano vyvoláváme výjimku„Díky tomu budeme moci provádět odpovídající akce, ponecháme také prostor pro práci na různých generovaných výjimkách.
Na konci tohoto tutoriálu již víme něco více o souběžnosti v databázích a o tom, jak problém vyřešit v ASP.NET MVC.
wave wave wave wave wave