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





Odpovedet emailem