Neslo, nepouzivam Hibernate :-))
Mirek
Jakub Příkazský napsal(a):
A není možné tohle už nějak řešit na úrovni Hibernate? Dost bych se
divil, že by H neměl podporu pro řešení tohoto problému.
Jakub
Mirek Stohr wrote:
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