Innholdsfortegnelse
Håndteringen av samtidighet I webapplikasjoner er det et av temaene vi må bruke litt kvalitetstid på, siden vi på grunn av applikasjonens natur kan finne tilfeller der flere brukere må samhandle med det samme elementet.I seg selv er interaksjon Det er ikke et problem, det virkelige problemet kommer når det etter å ha endret eller berørt dette elementet er nødvendig å lagre det i databasen og deretter vil to eller flere brukere gjøre en handling på det samme elementet samtidig, det er der vår logikk må definere en oppførsel for å vite hva som er den riktige måten å håndtere dette på.
Som vi forklarte i begynnelsen, samtidighet Det er når to eller flere aktører jobber med et element i applikasjonen vår, og genererer en handling mot databasen.
Tilfeldig sakProblemer kan oppstå når endringene er i konflikt, for eksempel: bruker A lagret en verdi, men bruker B endret også på den tiden og lagret en annen verdi, i brukerens øyne A ble innholdet ikke endret og i øynene til bruker B var det ingenting som hindret ham i å gjøre endringen.
Denne typen konflikter kan ødelegge ytelsen til applikasjonen vår i brukerens øyne, så vi må vurdere om områdene vi har vil være verdt det eller ikke å programmere for samtidigheten.
La oss se noen typer samtidighetPå denne måten kan vi forstå litt mer hva slags handlinger vi kan utføre i applikasjonene våre:
Pessimistisk samtidighetDenne tilnærmingen foreslår at når vi bruker databasen lager vi en forebyggende blokkering av registret i bruk, med dette unngår vi at flere brukere endrer verdien samtidig, og problemet resulterer i at i nettmiljøet er det ikke mulig å bruke det grundig, siden det ikke er noen tilstander vi ikke egentlig vet om låsen ble brukt eller fjernet til vi kommuniserer med serveren, noe som skaper forvirring og treghet i bruk.
Optimistisk valgdeltakelseDenne andre tilnærmingen gjør i stedet noe litt mer kompatibelt med nettet, når den endres, før den lagres i databasen, bekrefter den at dataene ikke har blitt endret fra det øyeblikket lesingen ble gjort, for dette gjør vi sammenligning av postverdier og et tilknyttet felt som har et tidsstempel med dato, klokkeslett og sekunder for større nøyaktighet.
ASP.NET MVC Den støtter ikke den pessimistiske tilnærmingen, så vi må jobbe med den optimistiske. For dette må vi gi våre strukturer datofelt for å lagre den siste gangen den ble endret, slik at vi kan vite om verdien ble endret etter at vi fikk posten og før vi lagrer det, kan vi med dette få et varsel og dermed bestemme om vi skal overskrive disse verdiene eller ikke.
La oss se et lite kodeeksempel på hvordan vi kan validere dette:
Vi merker da at vi validerer når vi gjør en endring i databasen hvis feltet ble endret etter at vi gjorde lesingen, i så fall vi tar et unntak, med dette vil vi være i stand til å iverksette de tilsvarende handlingene, vi gir også plass til å kunne jobbe med de forskjellige unntakene som kan genereres.
På slutten av denne opplæringen vet vi allerede litt mer om samtidighet i databaser og hvordan du arbeider med problemet ASP.NET MVC.