Pi pr叩ci s datab叩z鱈 se mus鱈me pomrn asto pot箪kat s problematikou v鱈cen叩sobn辿ho soub転n辿ho p鱈stupu k dat哲m. Prezentace se zab箪v叩 touto problematikou, pedstavuje dva mechanismy e邸鱈c鱈 soub転n辿 transakce: pessimistic a optimistic offline lock. D叩le zmiuje mo転n辿 probl辿my ka転d辿ho z tchto p鱈stup哲 a na z叩vr vz叩jemn porovn叩 vhodnost jejich pou転it鱈 v r哲zn箪ch p鱈padech.
Autoi: Lubo邸 Kr叩l, Ondej Machulda - VUT FEL
1 of 25
Download to read offline
More Related Content
Optimistic/Pessimistic Offline Lock
1. Optimistic Offline Lock
vs
Pessimistic Offline Lock
Lubo邸 Kr叩l
Ondej Machulda
VUT FEL
Y36ASS - Architektura SW syst辿m哲
LS 2011
2. Offline lock
Probl辿m
Soub転n箪 p鱈stup k dat哲m
Zabr叩nit nekonzistenci v datech
Vz叩jemn辿 pepisov叩n鱈 dat
営ten鱈 star箪ch dat
Business transakce pes nkolik syst辿mov箪ch transakc鱈
P鱈klad
Datab叩ze
Jak na to?
Optimistic offline lock
Mo転n箪 konflikt pi commitu
Pessimistic offline lock
Zabr叩nit za ka転dou cenu konfliktu
4. Optimistic offline lock
Princip
Fakticky nefunguje jako z叩mek data nezamyk叩
Hl鱈d叩, kter叩 data byla zmnna (znevalidov叩na pro ostatn鱈 transakce)
Pre-commit validation
Business transakce z鱈sk叩 OOL pouze pokud od doby naten鱈 dat do pokusu o
jejich zmn nedo邸lo ke zmn tchto dat jinou stranou
Pokud se transakce pokus鱈 pepsat nevalidn鱈 data konflikt
Pokud tato transakce z鱈sk叩 OOL, teprve tedy dojde ke zmn tchto dat v
datab叩zi
e邸en鱈 koliz鱈
Ignorov叩n鱈 kolize a peps叩n鱈 dat v nov辿 transakci
Vye邸en鱈: u転ivatelem, automaticky
Nee邸it a zalogovat
Pedpoklad
N鱈zk箪 poet konflikt哲
Mal叩 ztr叩ta v p鱈pad ne炭sp邸n辿 transakce
5. Optimistic offline lock verzovac鱈 implementace
Verzovac鱈 implementace
Pi z鱈sk叩n鱈 dat se k session ulo転鱈 i aktu叩ln鱈 verze tchto dat
Pi pokusu o zmnu dat se porovn叩 verze dat ze session s verz鱈 dat v syst辿mu:
Pokud se verze neli邸鱈, session z鱈sk叩 OOL a je j鱈 umo転nno data zmnit
Inkrementuje se verze
Pokud se verze li邸鱈 konflikt
Nen鱈 vhodn辿 pou転ivat timestamp ani jeho varianty zavisl辿 na syst辿mov辿m ase
nespolehliv辿
Vhodnj邸鱈 je pou転鱈vat obyejn箪 integer
営asto se spolu s aktu叩ln鱈 verz鱈 z叩znamu v syst辿mu ukl叩d叩 i as a autor
posledn鱈 zmny
7. Optimistic offline lock SQL implementace
SQL implementace
Pi ten鱈 dat (SELECT) se natou data vetn hodnoty verze
U ka転d辿ho SQL dotazu zmny (UPDATE, DELETE)
V podm鱈nce (WHERE) je 鱈slo verze v session z鱈skan叩 pi na鱈t叩n鱈 dat
Zmna dat z叩rove mn鱈 (SET) i 鱈slo verze
Tento p鱈stup zeslo転i泥uje SQL dotazy a m哲転e b箪t pomal箪 v z叩vislosti na
datab叩zov辿m stroji
9. Optimistic offline lock Nekonzistentn鱈 ten鱈
Nekonzistentn鱈 ten鱈 dat
Kontrola verze dat pi zmn dat neznamen叩, ze v pr哲bhu business transakce
nem哲転eme na鱈st data zmnn叩 nk箪m jin箪m
Pokud na za叩tku transakce nev鱈me, jak叩 data budeme / m哲転eme potebovat,
neexistuje rozumn辿 e邸en鱈
Je poteba zn叩t, kter叩 data se maj鱈 kontrolovat
Pi z叩pisu dat se ov鱈, zda i data naten叩 (by泥 nemnn叩 v pr哲bhu
transakce) odpov鱈daj鱈 svou verz鱈 verzi session
M哲転e zp哲sobit probl辿my v z叩vislosti na izolaci dat v r叩mci syst辿mov辿
transakce (datab叩ze), tak転e se budou znovu ten叩 data jevit stejn
Provede umlou zmnu takov箪chto dat se stejnou hodnotou a s
inkrementovanou verz鱈
M哲転e b箪t pomal辿 pi z叩vislosti na velk辿m objemu dat
Coarse-grained lock umo転uje zamykat skupinu dat jako jedin箪 zamykateln箪
objekt (Person 1 --- * Address)
11. Optimistic offline lock uk叩zka soubhu
U転ivatel 1
U転ivatel 2
Nateme verzi, ta ji転 ale byla
inkrementov叩na soub転nou operac鱈
Ulo転鱈me tak辿 inkrementovan箪
鱈ta verze
Verze se tedy li邸鱈,
provedeme rollback
12. Optimistic offline lock Pou転it鱈
Pou転it鱈
Kdy転 oek叩v叩me m叩lo konflikt哲
Konflikt je ztr叩ta u転ivatel ho mus鱈 asto e邸it
Jednoduch箪 na implementaci
Pokud sta鱈, nen鱈 teba ho doplovat o jin辿 z叩mky
Pou転it鱈 v praxi
Verzovac鱈 syst辿my: SVN, Git,
Pi konfliktu umo転n鱈 u転ivateli spravit situaci
Pokud to jde, provede s叩m merge a znovu se pokus鱈 o proveden鱈 commitu
MediaWiki
JPA 2.0
Google App Engine
14. Pessimistic offline lock
Princip
Zamyk叩 data v哲i urit辿 炭rovni p鱈stupu
Exclusive Write Lock: Pro z叩pis dat je poteba z鱈skat z叩mek. Nee邸鱈 ten鱈
ani nehl鱈d叩, jestli nkdo data zmn鱈 tsn pedt鱈m.
Exclusive Read Lock: Z叩mek je poteba pro naten鱈 dat. Jejich pou転it鱈
nehraje roli. Dokud je z叩mek aktivn鱈, nikdo jin箪 s daty nem哲転e jakkoliv
manipulovat.
Read/Write Lock: Kombinace pedchoz鱈ch. Syst辿m umo転uje z鱈skat bu
z叩mek na ten鱈 nebo na z叩pis. Je mo転nost existence soub転n箪ch z叩mk哲 na
ten鱈. Z叩mek na z叩pis tedy nikdy nem哲転e existovat spolu s jin箪m z叩mkem
(na ten鱈 ani na z叩pis).
e邸en鱈 zam鱈tnut鱈
Vyk叩n鱈 na pidlen鱈 z叩mku
Zru邸en鱈 transakce
Pedpoklad
Vysok箪 poet konflikt哲
Velk叩 cena za konflikt v pozdj邸鱈 f叩zi business transakce
16. Pessimistic offline lock Lock Manager
Lock manager
Lock manager spravuje z叩mky a u転ivatele (business transakce).
Ide叩ln centralizovan箪, jednoduch箪 a jedin箪 (singleton)
Pokud nem哲転e b箪t centralizovan箪 (distribuovan辿 syst辿my), je lep邸鱈 pou転鱈t
zamyk叩n鱈 zalo転en辿 na datab叩zi
Pi poteb spousty roztrou邸en箪ch z叩mk哲 na r哲zn叩 data je vhodn辿 uva転ovat o
nasazen鱈 Coarse-Grained Lock
17. Pessimistic offline lock Deadlock a Timeout
Deadlock
Prvn鱈 session uzamkne data A a potebuje i z叩mek na data B
Z叩rove druh叩 session uzamkne data B a potebuje i data A
Vznikl箪 deadlock nen鱈 efektivn鱈 e邸it na stran session timeoutem
Nejlep邸鱈 mo転n辿 e邸en鱈 je zru邸it transakci pi prvn鱈m nedostupn辿m z叩mku
M哲転e naopak v辿zt ke zbyten辿mu ru邸en鱈 transakc鱈
Timeout
Pokud vypadne klient ani転 by ukonil transakci, tj. uvolnil z叩mky, mohou b箪t
data blokovan叩 p鱈li邸 dlouho
嬰e邸en鱈:
Timeout na stran aplikace
Timestamp jako atribut z叩mku po uplynut鱈 urit辿 doby bude z叩mek
neplatn箪
18. Pessimistic offline lock uk叩zka soubhu
U転ivatel 1
U転ivatel 2
Z鱈sk叩me z叩mek
Z叩mek nelze z鱈skat, dr転鱈 jej
soub転n叩 operace
Z叩mek uvoln鱈me
19. Pessimistic offline lock Pou転it鱈
Pou転it鱈
Pedpokl叩d叩me vznik konflikt哲 => nutno 鱈dit soub転n辿 operace
Nechceme zahazovat data v p鱈pad konfliktu v pozdj邸鱈 f叩zi transakce
Ide叩ln pokud je doba uzamen鱈 kr叩tk叩
Pou転it鱈 v praxi
JPA 2.0
Hibernate
21. Overly Optimistic Lock
Princip
Overly optimistic lock nezamyk叩 ani nijak nekontroluje soub転n箪 p鱈stup k dat哲m
Pou転it鱈
Append-only data
Logy
Read-only data
Jednou転ivatelsk辿 syst辿my
22. Coarse-grained lock
Princip
Ucelen叩 skupina souvisej鱈c鱈ch dat
Pi vy転叩d叩n鱈 z叩mku k njak箪m dat哲m z t辿to skupiny dojde k zamen鱈 cel辿 skupiny
23. Implicit lock
Princip
Nkdo hl鱈d叩 p鱈stup k dat哲m a zaji邸泥uje automatick辿 zamyk叩n鱈
Eliminuje se tak spousta potenci叩ln鱈ch chyb spojen箪ch s run鱈m hl鱈d叩n鱈m z叩mk哲
24. Optimistic vs Pessimistic offline lock V箪hody a Nev箪hody
Optimistic Offline Lock Pessimistic Offline Lock
V箪hody: V箪hody:
Nemus鱈 si udr転ovat spojen鱈 s Bezkonfliktn鱈
datab叩z鱈
Nemus鱈 nic zamykat Nev箪hody:
営ten鱈 dat nikoho neomezuje V箪kon
Jednodu邸邸鱈 implementace Nutn辿 spojen鱈 s datab叩z鱈
Obt鱈転n叩 邸k叩lovatelnost
Nev箪hody:
Hroz鱈 konflikt
25. Optimistic vs Pessimistic offline lock - Shrnut鱈
Jakou implementaci?
Je poteba zv叩転it:
Jak箪 je pomr editac鱈 a prohl鱈転en鱈 (read-only)?
Jak叩 je pravdpodobnost soubhu p鱈stup哲?
Do jak辿 m鱈ry je zamyk叩n鱈 nahraditeln辿 syst辿movou transakc鱈?
D辿lka prov叩dn箪ch transakc鱈
Cena za konflikt
Cena za dirty read
Implementace se vz叩jemn dopluj鱈! Nejsou v箪lun辿!
Souvisej鱈c鱈 vzory
Coarse-grained Lock
Implicit Lock
Identity Map