Varadin, 2013. SVEUILITE U ZAGREBU FAKULTET ORGANIZACIJE I INFORMATIKE V A R A D I N
Luka Rajevi
Konkurentnost u bazama podataka
SEMINARSKI RAD
Mentor: Prof. Dr. Sc. Alen Lovreni
Varadin, lipanj 2013.
I Sadraj
1. UVOD..............................................................................................................................................................1 2. KONKURENTNOST I KONZISTENTNOST ..............................................................................................2 2.1 OSNOVNI POJMOVI ..........................................................................................................................................2 2.2 UPRAVLJANJE KONKURENTNOU U BAZAMA PODATAKA ................................................................................2 2.2.1 PROTOKOLI TEMELJENI NA ZAKLJUAVANJU (LOCK-BASED PROTOCOL) .........................................................4 2.2.2 PROTOKOLI TEMELJENI NA VREMENSKOJ ZNAMCI (TIMESTAMP-BASED PROTOCOL) .........................................8 2.2.3 MVCC (MULTIVERSION CONCURRENCY CONTROL) ......................................................................................9 3. ZAKLJUAK ............................................................................................................................................... 10 LITERATURA ...................................................................................................................................................... 11
1 1. Uvod U single-user bazama podataka, tj. bazama kojima pristupa samo jedan korisnik, nema potrebe voditi rauna o problemima konkurentnosti i mijenjanja podatka od strane drugog korisnika. Jedan korisnik upravlja bazom i ne moe se dogoditi da on dohvati podatke koje u isto vrijeme trai drugi korisnik. Kod baza kojima pristupa vie razliitih korisnika istovremeno, taj problem je vrlo izraen i, ako elimo ouvati konzistentnost podataka, moramo se pozabaviti problemom konkurentnosti i rijeiti ga na najefikasniji nain. U ovom seminarskom radu u ukratko objasniti glavne pojmove vezane uz konzistentnost podataka te konkurentnost u bazama podataka. Takoer u objasniti i neke od najee koritenih naina rjeavanja problema konkurentnosti.
2 2. Konkurentnost i konzistentnost 2.1 Osnovni pojmovi Konkurentnost podataka je svojstvo (mogunost, sposobnost) baze kojim vie razliitih korisnika moe pristupati podacima u isto vrijeme. Konzistentnost podataka pojam koji oznaava nepromjenjivost podataka, tj. sposobnost da korisnik pristupa podacima za koje je siguran da su valjani, toni, korisni te da im nije naruen integritet. Osigurati konzistentnost podataka znai osigurati da svaki korisnik dobije tone i valjane podatke u bio kojem trenutku pristupanja bazi. Navedeni pojmovi su vrlo vani i jedni su od najbitnijih funkcionalnosti koje svaka baza podataka treba imati. Osigurati konkurentnost u bazi podataka nije toliki kompleksan posao sam po sebi, ali on sa sobom nosi druge komplikacije, a jedna od njih je upravo i konzistentnost podataka. Kao to smo ranije rekli, zamislimo da 2 korisnika ele pristupiti istom podatku u isto vrijeme i svaki korisnik eli promijeniti taj podatak. Nakon to prvi korisnik spremi svoju promjenu, u bazi e se promijeniti stanje onakvo kakvo prvi korisnik eli. Meutim, kad drugi korisnik promijeni podatak u neto drugo, tada se u bazi prebrie podatak prvog korisnika i dolazi do problema. To je klasian primjer nekonzistentnosti podataka. Prvi korisnik oekuje da se u bazi nalazi podatak koji je on zapisao to, vidjeli smo, nije istina. Kako rijeti problem nekonzistentnosi? Problem nije toliko jednostavan, ali ipak postoji dosta naina rjeavanja. U daljnjem tekstu u objasniti glavne naine rjeavanja problema konkurentnosti, tj. ouvanja konzistentnosti podataka. 2.2 Upravljanje konkurentnou u bazama podataka Upravljanje konkurentnou (concurrency control) slui nam za korektno i ispravno obavljanje konkurentnih operacija na najefikasniji mogui nain. Podruje koje se bavi upravljanjem konkurentnou nam daje pravila, metode, metodologije za dizajn te teorijsku podlogu za odravanje konzistentnosti prilikom obavljanja konkurentnih operacija, a na taj nain i sveukupne konzistentnosti aplikacije, baze podataka i sl. Prilikom upravljanja konkurentnou potrebno je voditi rauna o brzini obavljanja operacija. Konkurentnost je, kao takva, uvedena da se ubrza dohvaanje podataka, da se povea uinkovitost i sl. te bi, ukoliko upravljanje (kontrola) nad tom konkurentnosti traje predugo, mogli izgubiti dosta prednosti koje dobijemo uvoenjem konkurentnosti. Loe implementirano upravljanje konkurentnou moe, kao to je
3 ve navedeno, dovesti do korupcije podataka (nekonzistentnosti) zbog neorganiziranih read- write operacija. Svaki (kvalitetan) sustav za upravljanje bazama podataka (DBMS) bi trebao imati upravljanje konkurentnou, upravo stoga jer je ona jedan od najbitnijih, ako ne i najbitniji, element za odravanje baze (sustava) ispravnim i konzistentnim, a podacima ispravnim, tonim i nekoruptiranim. Za najjednostavniji prikaz operacija konkurentnosti koriste se transakcije koje se izvode konkurentno. Transakcija predstavlja samostalnu i neovisnu "jedinicu rada" obavljenu u sustavu za upravljanje bazom podataka nad bazom podataka. Transakcija se sastoji od jedne ili vie razliitih operacija koje se provode nad podacima u bazi. Posebnost transakcija su njena svojstva: atomarnost (A), konzistentnost (C), izolacija (I) i trajnost (D). Ta svojstva su poznata i pod kraticom ACID. Kada se neka transakcija pokree, ona se izvrava u cijelosti od poetka do kraja. Trajanje transakcije ovisi o broju operacija koje se u njoj nalaze te moe trajati vrlo kratko (par sekundi) sve do nekoliko dana ( transakcijske sage). Jo jedno bitno svojstvo je roll-back. Kada se, prilikom izvoenja transakcije, dogodi pogreka, transakcija ima sposobnost povratiti sve promjene koje je uinila. To je takoer korisno i prilikom pada sustava, kad se kod ponovnog pokretanja sve transakcije i podaci mogu vratiti na poetak i pokrenuti ponovo. Zato su nam transakcije bitne za konkurentnost i konzistentnost podataka? Odgovor je jednostavan. Transakcija moe biti vie u jednom sustavu, i one se mogu izvravati konkurentno. Za vjerovati je da e se prije ili kasnije dogoditi situacija u kojoj e dvije razliite transakcije zatrebati isti podatak iz tablice. to uiniti u tom sluaju? Kao to smo ve rekli, potrebno je upravljati konkurentnou tih transakcija, tj. potrebno je osmisliti mehanizam u kojem e svaka transakcija dobiti svoj podatak onda kada je tom podatku, a ujedno i cijelom sustavu, osigurana konzistentnost.
4 2.2.1 Protokoli temeljeni na zakljuavanju (Lock-based Protocol)
Jedan od naina osiguranja konzistentnosti podataka i upravljanja konkurentnou transakcija temelji se na lockovima, tj. na meusobnoj iskljuivosti prilikom pristupanja podacima. Princip je prilino jednostavan: u trenutku kada jedna transakcija pristupa podacima, nijedna druga transakcija ne moe mijenjati te podatke. To se postie tzv. zakljuavanjem, odnosno lockovima. Transakcija e, dakle, pristupiti podatku samo ukoliko on na sebi ima lock. Postoji vie naina po kojima neki podatak moe biti zakljuan: dijeljeno zakljuavanje (shared lock) ekskluzivno zakljuavanje (exclusive lock) Dijeljeno zakljuavanje: Ukoliko transakcija T1 od podatka (Q) preuzme shared-mode lock (S) tada T2 ili bio koja druga transakcija mogu samo itati podatak Q ali ne i pisati u njega. Ekskluzivno zakljuavanje: Ukoliko transakcija T1 od podatka (Q) preuzme exclusive-mode lock (X) tada T2 ili bilo koja druga transakcija mogu i itati i pisati u Q.
Primjer izvoenja jednostavne transakcije koritenjem ekskluzivnog zakljuavanja:
Slika 1: Izvoenje jednostavne transakcije
5 Prilikom pristupanja podatku transakcija zakljuava isti zakljuava te ovisno o vrsti zakljuavanja postavlja restrikciju za druge transakcijekoje ele pristupiti istom podatku. Na slijedeoj slici je prikazan jednostavan primjer konkurentnog izvravanja dvije transakcije te koritenja zakljuavanja kao sredstva za ouvanje konzistentnosti:
Transakcije obavljaju jednostavne operacije nad podacima A i B te prilikom pristupanja pojedinom podatku isti i zakljuavaju. U primjeru transakcije koriste oba oblika zakljuavanja (dijeljeni S i ekskluzivni X).
Slika 2: Konkurentno izvoenje dvije transakcije
6 Prilikom koritenja metoda zakljuavanja kod upravljanja konkurentnou, ponekad moe doi do neeljenih situacija kod izvoenja transakcija. Na slijedeoj slici se nalazi jedan primjer takve situacije:
to se uope dogodilo u ovoj sitaciji? Ako pogledamo izvoenja transakcija T3 i T4 moemo uoiti slijedee stvari: T3 je zakljuala podatak B u ekskluzivnom modu dok je transakcija T4 zakljuala podatak A u dijeljenom modu. U nastavku izvoenja transakcija dogaa se situacija u kojoj T3 eli zakljuati podatak A u ekskluzivnom modu a T4 eli zakljuati B u dijeljenom modu. Ta situacija se naziva deadlock. U ovom trenutku niti jedna transakcija ne nastavlja s radom jer T3 eka da T4 otkljua A dok T4 eka da T3 otkljua B. Kada se dogodi ovakva situacija jedno od rjeenja je roll-back jedne od transakcija. Uglavnom se za roll-back odabire transakcija koja je najkasnije poela, tj. ona koja je obavila najmanje posla. Nakon to je transakcija obavila roll-back, podaci koji su bili zakljuani se otkljuavaju te druga transakcija moe nastaviti sa radom. U protokolima temeljenim na tehnologiji zakljuavanja se istiu 2 tipa: Two-phase Locking protocol o protokol osigurava serijalizabilnost podataka o ne rjeava problem deadlocka o izvrava se u dvije faze: Faza rasta u kojoj transakcija moe zakljuati podatak, ali ne i otkljuati Faza smanjivanja u kojoj transakcija moe otkljuati podatak ali ne i zakljuati ga Slika 3: Deadlock
7 Graph-based Protocols o zahtjeva prethodnu informaciju o redoslijedu izvoenja transakcija o transakcije su prikazane u obliku usmjerenog grafa o prepoznavanje deadlocka je pojednostavljeno (svaki ciklus u grafu predstavlja deadlock)
Slika 4: Deadlock prikazan usmjerenim grafom
8 2.2.2 Protokoli temeljeni na vremenskoj znamci (Timestamp-based Protocol) Kod protokola temeljenih na vremenskoj znamci svakoj transakciji prije pokretanja bude dodijeljena vremenska znamka koja oznaava vrijeme pokretanja. Prilikom pokretanja transakcije T1, istoj bude dodjeljena znamka TS(T1) i svaka slijedea transakcija koja bude pokrenuta, npr. T2 e imati vrijednost znamke veu od T1 tako da e biti: TS(T1) < TS(T2). Znamka se moe generirati koritenjem vrijednosti sistemskog sata (system clock) ili koritenjem brojaa kojemu se vrijednost povea nakon to se dodijeli znamka. Osim vremenskih znamki, za ove protokole je potrebno svakom podatku (Q) pridodati 2 oznake: W-znamka(Q) oznaava najveu vrijednost znamke koju je imala transakcija koja je nad podatkom Q izvrila write operaciju. R-znamka(Q) oznaava najveu vrijednost znamke koju je imala transakcija koja je nad podatkom Q izvrila read operaciju. Ove oznake su aurirane svaki put kada se dogode read ili write instrukcije. Njapoznatiji protokol temeljen na vremenskoj znamci je "Timestamp-ordering Protocol". Odlike ovog protokola su navedene u daljnjem tekstu: 1. T1 eli obaviti read(Q) ukoliko je TS(T1) < W-znamka(Q), znai da T1 eli proitati vrijednost podatka Q koji je ve promijenjen. Zbog toga se read operacija odbija i T1 pokree roll-back ukoliko je TS(T1) >= W-znamka(Q), tada se read operacija izvrava i R-znamka(Q) postavlja na max(R-znamka(Q), TS(T1)). 1. T1 eli obaviti write(Q) ukoliko je TS(T1) < R-znamka(Q), tada je vrijednost koju T1 eli staviti u Q bila potrebna ranije i sustav je zakljuio da ta vrijednost nikada nee stii. Radi toga se odbija write operacija i obavlja se roll-back T1 transakcije. ukoliko je TS(T1) < W-znamka(Q) , tada T1 ustvari pokuava zapisati staru vrijednost Q. Upravo zato sustav odbija write operaciju i obavlja se roll-back T1 transakcije. u ostalim suajevima sustav izvrava write operaciju i postavlja W-znamka(Q) = TS(T1)
9 2.2.3 MVCC (Multiversion concurrency control)
Nain upravljanja konkurentnou koji je prilino popularan u zadnje vrijeme je svakako MVCC. Njega koriste poznate SQL baze podataka kao Oracle database, MSSQL Server, MySQL, PostgresSQL ali i NoSQL baze kao to su npr. CouchDB, Hbase itd. MVCC je nain upravljanja konkurentnou koji ne koristi zakljuavanja. Svaki korisnik koji je spojen na bazu podataka, koja radi MVCC principom, vidi snapshot baze podataka u odreenom vremenskom trenutku. Sve promjene koje se dogode npr. write naredbama nee biti vidljive od drugih korisnika dok sve transakcije nisu obavile svoj posao, tj. dok transakcija nije pozvala commit. Kad MVCC baza podataka treba aurirati neki podatak, ona nee prebrisati stari podatak nego e ga oznaiti kao zastarjeli i dodati novu verziju negdje drugdje. Radi toga, postoji mnogo razliitih verzija u memoriji, ali samo jedna je najnovija. Takav nain upravljanja omoguava transakcijama koje itaju pristup podacima koji su bili prisutni u bazi u trenutku kada je itanje zapoelo, ak ako se u meuvremenu dogodila promjena ili brisanje podatka. MVCC takoer koristi vremenske znamke kako bi se osigurala konzistentnost podataka. Transakcija nikad ne mora ekati da pristupi nekom objekta iz baze upravo na nain da istovremeno upravlja razliitim verzijama objekata. Svaka verzija objekta treba imati W-znamku i dozvolila bi transakciji T1 itanje one verzije objekta ije vrijeme prethodi vremenu kreiranja transakcije TS(T1). Takoer, ukoliko transakcija T1 eli pisati u neki objekt i ako postoji neka druga transakcija T2, vrijeme kreiranja T1 mora biti ranije od vremena kreiranja transakcije T2 kako bi write operacija uspjela. Dakle, write operacija ne moe uspjeti ukoliko se obavljaju i transakcije s ranijom vremenskom znamkom kreiranja. Svaki objekt takoer ima i znamku itanja te ako npr. transakcija T1 eli pisati u objekt (P) te ako je vrijeme kreiranja te transakcije TS(T1) ranije od vremenske znamke itanja objekta (TS(T1) < RTS(P)), transakcija se prekida i pokree ponovo. U protivnom sluaju T1 kreira novu verziju objekta (P) i postavlja mu znamke za itanje i pisanje jednakima TS(T1). Oigledni nedostaci ovakvog pristupa su naravno memorijske prirode. Potrebno je vie memorije kako bi se moglo spremiti vie razliitih verzija objekata u bazi. No, s druge strane operacije itanja nikad nisu blokirane to moe bti jako vano kod baza podataka iz kojih se uglavnom itaju podaci.
10 3. Zakljuak Upravljanje konkurentnou je vrlo vano podruje u polju razvoja baza podataka. Loe izvedena implementacija upravljanja moe imati katastrofalne posljedice po podatke koji se u bazi nalaze. Upravo zato postoji dosta razliitih implementacija upravljanja konkurentnou. Svi oni imaju svoje prednosti i nedostatke. Kod nekih moe doi i do neeljenih situacija kao to su deadlock-ovi ili izgladnjivanja transakcije, kod drugih se koriste vremenske znamke, a neki pak koriste kombinacije tih dva ili verzioniranje baze podataka i objekata unutar nje. U svakom sluaju, implementacija upravljanja transakcijama se moe izvesti na vie naina i na nama je daodaberemo najefikasniji nain, tj. onaj koji e nam osigurati najveu konzistentnost podataka te osigurati njihov integritet.
11 Literatura 1. Database System Concepts Silberschatz, Korth, Sudarshan 2. Data concurrency and consistency lanak dostupan 16. 06. 2013. na http://docs.oracle.com/cd/B19306_01/server.102/b14220/consist.htm#i5700 3. Concurrency control lanak dostupan 16.06.2013. na http://en.wikipedia.org/wiki/Concurrency_control 4. MVCC lanak dostupan 16.06. 2013. na http://en.wikipedia.org/wiki/Multiversion_concurrency_control