Honza wrote:
Dekuji za odpoved.
Optimisticke zamikani vypada docela slibne. Nicmene vezmneme
nasledujici priklad. Objekty v mem systemu se radi do samostatnych
stromu. Techto stromu bude docela malo v pomeru s tim jak jsou velike.
Zamykat jenom podstromy by bylo dost slozite, takze budu muset zamykat
koren. Pouziji-li optimisticky lock znamena to ze si dva uzivatele
budou moci soucasne otevrit ten samy strom a pracovat v nem
(pridavat/prohlizet/menit/mazat listy), ale zmeny se podari ulozit
jenom tomu kdo jako prvni klikne save a commitne svoji transakci.
Druhemu uzivateli by pak bylo sdeleno ze jeho zmeny nelze ulozit.
Z tohoto duvodu me prijde schudny jedine pesimisticky pristup. Nicmene
stale premyslim jak to implementovat a jedine co me napada pridat do
DB sloupecek ktery bude zamek identifikovat a tim se ridit. Dalsi
problem vidim v trvanlivosti takovychto zamku a taky jak zajistim ze v
jine session nedojde k nejake chybe a zamek se neuvolni. Je periodicke
obnovovani zamku spravne reseni?
Je to jedno z moznych reseni, ale jakekoliv pesimisticke zamky prinasi
problemy - viz ten timeout zamku.
Zajimave je to popsano v clanku
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnbda/html/concurev4M.asp
Tam se doctete, co dal by mohlo pomoci:
- uzivatel vlastni svoje data (toto pouzivame ve 2,5 vrstve aplikaci
taky, spolu s verzovanim)
- pouzivate navrhovy vzor "business actions" neboli "postings" (v
podstate chytrejsi verzovani dat)
- omezte dobu po jakou muze uzivatel editovat sva data, bez ziskani
nove verze
- zvetste granularitu moznosti editace (napr. povolte pouze jednu zmenu
struktury ve stromu a po ni synchronizujte verze se serverem)
Verzovanim si v podstate vyrabite situaci kdy:
- zapis neblokuje cteni
- cteni neblokuje zapis
Tj. MVCC, ktere v posledni dobe na urovni databaze zavedli/zavedou dalsi
3 produkty (MS SQL od verze 2005, DB2 na PC (verzi zpameti nevim a
Informix (pristi verze). Tuto funkcionalitu uz delsi dobu ma Oracle (od
verze 6 nebo 7), od uplneho zacatku Interbase (Firebird), PostreSQL a
MySQL InnoDB.
Lukas