ASP.NET MVC - współbieżność bazy danych

Spisie treści
Obsługa zbieżność W aplikacjach webowych jest to jeden z tematów, któremu musimy poświęcić trochę czasu jakościowego, ponieważ ze względu na samą naturę aplikacji możemy spotkać przypadki, w których kilku użytkowników musi wejść w interakcję z tym samym elementem.
Sam w sobie jest interakcja To nie problem, prawdziwy problem pojawia się, gdy po modyfikacji lub dotknięciu tego elementu należy go zapisać w bazie danych, a następnie dwóch lub więcej użytkowników chce wykonać akcję na tym samym elemencie w tym samym czasie, czyli gdzie nasza logika musi zdefiniować zachowanie, aby wiedzieć, jaki jest właściwy sposób radzenia sobie z tym.
Jak wyjaśniliśmy na początku, zbieżność Dzieje się tak, gdy dwóch lub więcej aktorów pracuje nad elementem w naszej aplikacji, generując akcję przeciwko bazie danych.
Sprawa współbieżnościProblemy mogą pojawić się, gdy zmiany są sprzeczne, na przykład: użytkownik A zapisał wartość, ale użytkownik B również w tym czasie modyfikuje i zapisał inną wartość, w oczach użytkownika A jej treść nie została zmodyfikowana i w oczach użytkownik B nic nie powstrzymało go przed dokonaniem zmiany.
Tego typu konflikty mogą nadszarpnąć wydajność naszej aplikacji w oczach użytkownika, dlatego musimy ocenić, czy obszary, które posiadamy, będą tego warte, czy nie, aby zaprogramować współbieżność.
Zobaczmy trochę rodzaje współbieżności, w ten sposób możemy nieco lepiej zrozumieć, jakie akcje możemy wykonać w naszych aplikacjach:
Pesymistyczna współbieżnośćTakie podejście sugeruje, że korzystając z bazy danych wykonujemy a blokowanie prewencyjne używanego rejestru, dzięki temu unikamy jednoczesnego modyfikowania wartości przez wielu użytkowników, problem powoduje, że w środowisku sieciowym nie jest możliwe jego pełne wykorzystanie, ponieważ nie ma stanów tak naprawdę nie wiemy, czy blokada został zastosowany lub usunięty, dopóki nie skomunikujemy się z serwerem, powodując zamieszanie i spowolnienie w użyciu.
Optymistyczna frekwencjaTo inne podejście zamiast tego robi coś bardziej zgodnego z siecią, podczas modyfikacji, przed zapisaniem w bazie danych weryfikuje, czy dane nie zostały zmodyfikowane od momentu dokonania odczytu, w tym celu dokonujemy porównania wartości rekordów i powiązane pole, które zawiera znacznik czasu z datą, godziną i sekundami dla większej dokładności.
ASP.NET MVC Nie obsługuje podejścia pesymistycznego, więc musimy pracować z optymistycznym, w tym celu musimy wyposażyć nasze struktury w pola daty, aby zapisać ostatnią modyfikację, abyśmy mogli wiedzieć, czy wartość została zmieniona po uzyskaniu rekordu a przed zapisaniem, dzięki temu możemy uzyskać alert, a tym samym zdecydować, czy nadpisać te wartości.
Zobaczmy mały przykład kodu, jak możemy to sprawdzić:

Zauważamy wtedy, że walidujemy podczas dokonywania zmiany w bazie danych, czy pole zostało zmodyfikowane po wykonaniu odczytu, jeśli tak robimy wyjątek, dzięki temu będziemy mogli podjąć odpowiednie działania, zostawiamy również miejsce na pracę nad różnymi wyjątkami, które mogą być generowane.
Pod koniec tego samouczka wiemy już trochę więcej o współbieżności w bazach danych i jak rozwiązać problem w ASP.NET MVC.
wave wave wave wave wave