Presne vasi situaci (malo velkych stromu) mam taky. Resim to, jak jsem
jiz napsal, verzovanim, a verzi vlastni kazdy objekt ve stromu (resp.,
kazdy objekt u ktereho to dava smysl, tj. objekt, ktery mohu nejakym
zpusobem editovat). V pripade zapisu do db se zvetsi verze nikoliv pouze
objektu, ktery byl editovan, ale i objektu na stejne vetvi az po koren,
cimz zajistim konzistenci stromu. Ma to nevyhodu ze muze byt odmitnut
zapis naprosto nesouvisejicich zmen, ale pomer cteni/zapis v moji
aplikaci je natolik velky, ze jsem zvolil tuto strategii (tj. zvolil
jsem mirny pesimismus v optimisticke strategii :-))
Mirek
Lukas Barton napsal(a):
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)
Do teto polozky by se moje aplikace dala zaradit.
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