Från Googlehemsida

Hoppa till: navigering, sök

Lösningsförslag på övninguppgifterna:

[redigera] 2.

a)

  • OF1: Ja, alla T1 kommer före T2. Alla operationer i T1 som krockar med T2 kommer före dessa.
  • OF2: Nej, C:=C-100 kommer före C:=C*1.1 -> T1 före T2.
    • B:=B+100 kommer efter B:=B*1.1 -> T1 efter T2.

b)

  • OF1: A=2200, B=1210, C=990. Tot: 4400
  • OF2: A=2200, B=1200, C=990. Tot: 4390
  • Det kommer delas ut ränta på pengar som inte "existerar".

c) 4400-4390 = 10 riksdaler.

d)

  1. Låsning: Hjälper inte eftersom samma operationsföljder fortfarande är möjliga.
  2. 2-faslås: Förhindrar felaktig ändring, kommer ge dead-lock pga:
    1. OF2: 3e steget -> C låst av T1, B låst av T2.
    2. När T1 sen vill låsa B, och T2 låsa C, går båda in i ett väntetillstånd eftersom de båda redan är låsta.
    3. (Konservativ 2-fas: Alla objekt låses på en gång i början av en transaktion, skulle förhindra felaktiga ändringar och dead-lock.)
  3. T1 & T2 tar lokala kopior och arbetar med kopior av dessa. Innan den lokalt uppdaterade kopian skrivs till databasen tas ytterligare en kopia (av databasens tupel) som jämförs med den lokala kopian. Om de två kopiorna är lika skrivs den lokala uppdaterade kopian till databasen, annars startar man om.
  4. TS(T1)=20, TS(T2)=10.
    1. OF1: Då T2 försöker läsa B får den göra rollback och starta om. T1 blir klar och T2 kan genomföras.
    2. OF2: Då T2 försöker läsa C får den göra rollback och starta om. T1 blir klar och T2 kan genomföras.

[redigera] 3.

a) De här är lite kluddriga på mitt papper och lite svåra att överföra men men. Det här är såklart en egen version och alla TS-siffror har jag hittat på. Alla "go" betyder typ att det är "ok att bara köra på":

T1(10)        T2(20)        T3(30)
R1(A)go
              R2(B)go
W1(C)rollback  
                            R3(B)go
                            R3(C)go
              W2(B)rollback
                            W3(A)go

A tillåts alltså hela vägen, alla read kommer tillåtas men alla write får göra minst en rollback. Jag är inte 100 på det här men det är så jag förstått det =)

b) Nu blir det lite bakvänt eftersom jag satta Tidsstämpelsiffrorna åt andra hållet.

T1(20)        T2(10)
R1(A)go       
              R2(B)rollback
              W2(A)rollback
W1(B)go