Avatar billede repsak Nybegynder
23. oktober 2003 - 09:37 Der er 12 kommentarer og
2 løsninger

Statisk db-objekt

Er denne påstand korrekt i en database applikation hvor mange brugere skal accesse samme DB:

Det er smartere at lave én klasse som indeholder metoder som er static og locked end at have non-static metoder (altså mange én metode for HVER bruger). Vil dette ikke også sikre db's data er konsistente? (måske vil performance være en smule langsommere, meeen...)

class DB{
  ...
  static bool NonQuery{
    lock(....){
      blabla
    }
  }
}
Avatar billede quaser Nybegynder
23. oktober 2003 - 10:59 #1
I mange tilfælde vil en update i tabel A ikke have indflydelse på din læsning af tabel B.

Dit forslag er derfor en flaskehals.
Avatar billede repsak Nybegynder
23. oktober 2003 - 12:49 #2
Hvad så hvis det KUN er NonQuery-metoden som er static og locked?
Avatar billede quaser Nybegynder
23. oktober 2003 - 15:02 #3
Så har du problemet med lost updates.

Pris hentes fra tabel A af tråd 1
Pris hentes fra tabel B af tråd 1
Pris opdateres i tabel A af tråd 2
Samlet pris indsættes i tabel C af tråd 1

Prisen i tabel C er forkert.

Der findes vist en bedre forklaring :)

Men overvej brugen af transaktions.
Avatar billede repsak Nybegynder
24. oktober 2003 - 15:14 #4
hvordan kan jeg få lost update hvis metoden er locked og static? Så er der da ikke mere end én tråd som kan få lov til at opdatere/indsætte/slette ad gangen
Avatar billede quaser Nybegynder
24. oktober 2003 - 16:44 #5
Hvis du ser på den forrige besked, kommer de ind hver for sig.

Eller også har jeg ikke set hele din kode.
Avatar billede repsak Nybegynder
24. oktober 2003 - 17:28 #6
...eller også har jeg ikke forstået dit eksempel ;-)
hvorfor er prisen i 3 tabeller?
Avatar billede quaser Nybegynder
24. oktober 2003 - 17:51 #7
Avatar billede arne_v Ekspert
24. oktober 2003 - 22:20 #8
1)  Hvis både SELECT og UPDATE er i samme locked kode så kan der ikke blive nogen
    "lost update".

2)  Det er ikke nødvendigt hvis der kun udføres en enkelt UPDATE/INSERT/DELETE
    (og hver tråd har sin egen connection).

3)  Locked kode er ikke specielt kønt og kan være upraktisk tenderende
    til det umulige hvis flere forskellige operationer berører samme data.

4)  Standard måden at løse problemet på hvis tiden mellem SELECT og UPDATE
    måles i mikrosekunder/millisekunder er transaktioner.

5)  Hvis transaktioner skal virke så skal du formentligt op på
    transaction isolation level serializable.

6)  Hvis tiden mellem SELECT og UPDATE måles i sekunder/minutter så
    er standard løsningen versioning (skal også bruge transaktioner).
Avatar billede arne_v Ekspert
04. november 2003 - 00:00 #9
OK ?
Avatar billede repsak Nybegynder
26. november 2003 - 12:25 #10
undskyld svartiden - ja det er ok :-)
Avatar billede arne_v Ekspert
26. november 2003 - 12:28 #11
Så skal du vel også have fordelt "byttet" ?
Avatar billede repsak Nybegynder
26. november 2003 - 12:32 #12
ja, men det kræver skam at folket svarer ;-)
Avatar billede arne_v Ekspert
26. november 2003 - 13:58 #13
svar
Avatar billede quaser Nybegynder
26. november 2003 - 16:09 #14
svarting
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester