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ć:
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.