konkurentnost u bazama podataka
DESCRIPTION
Konkurentnost u bazama podatakaTRANSCRIPT
SVEUČILIŠTE U ZAGREBU
FAKULTET ORGANIZACIJE I INFORMATIKE
V A R A Ž D I N
Luka Rajčević
Konkurentnost u bazama podataka
SEMINARSKI RAD
Varaždin, 2013.
SVEUČILIŠTE U ZAGREBU
FAKULTET ORGANIZACIJE I INFORMATIKE
V A R A Ž D I N
Luka Rajčević
Konkurentnost u bazama podataka
SEMINARSKI RAD
Mentor:
Prof. Dr. Sc. Alen Lovrenčić
Varaždin, lipanj 2013.
I
Sadržaj
1. UVOD..............................................................................................................................................................1
2. KONKURENTNOST I KONZISTENTNOST ..............................................................................................2
2.1 OSNOVNI POJMOVI ..........................................................................................................................................2 2.2 UPRAVLJANJE KONKURENTNOŠĆU U BAZAMA PODATAKA ................................................................................2 2.2.1 PROTOKOLI TEMELJENI NA ZAKLJUČAVANJU (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. ZAKLJUČAK ............................................................................................................................................... 10
LITERATURA ...................................................................................................................................................... 11
1
1. Uvod
U single-user bazama podataka, tj. bazama kojima pristupa samo jedan korisnik, nema potrebe
voditi računa o problemima konkurentnosti i mijenjanja podatka od strane drugog korisnika.
Jedan korisnik upravlja bazom i ne može se dogoditi da on dohvati podatke koje u isto vrijeme
traži drugi korisnik. Kod baza kojima pristupa više različitih korisnika istovremeno, taj problem
je vrlo izražen i, ako želimo očuvati konzistentnost podataka, moramo se pozabaviti problemom
konkurentnosti i riješiti ga na najefikasniji način.
U ovom seminarskom radu ću ukratko objasniti glavne pojmove vezane uz konzistentnost
podataka te konkurentnost u bazama podataka. Također ću objasniti i neke od najčešće korištenih
načina rješavanja problema konkurentnosti.
2
2. Konkurentnost i konzistentnost
2.1 Osnovni pojmovi
Konkurentnost podataka je svojstvo (mogućnost, sposobnost) baze kojim više različitih korisnika
može pristupati podacima u isto vrijeme.
Konzistentnost podataka pojam koji označava nepromjenjivost podataka, tj. sposobnost da
korisnik pristupa podacima za koje je siguran da su valjani, točni, korisni te da im nije narušen
integritet. Osigurati konzistentnost podataka znači osigurati da svaki korisnik dobije točne i
valjane podatke u bio kojem trenutku pristupanja bazi.
Navedeni pojmovi su vrlo važni 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. Međutim, kad drugi korisnik
promijeni podatak u nešto drugo, tada se u bazi prebriše podatak prvog korisnika i dolazi do
problema. To je klasičan primjer nekonzistentnosti podataka. Prvi korisnik očekuje da se u bazi
nalazi podatak koji je on zapisao što, vidjeli smo, nije istina.
Kako riješti problem nekonzistentnosi? Problem nije toliko jednostavan, ali ipak postoji dosta
načina rješavanja. U daljnjem tekstu ću objasniti glavne načine rješavanja problema
konkurentnosti, tj. očuvanja konzistentnosti podataka.
2.2 Upravljanje konkurentnošću u bazama podataka
Upravljanje konkurentnošću (concurrency control) služi nam za korektno i ispravno obavljanje
konkurentnih operacija na najefikasniji mogući način. Područje koje se bavi upravljanjem
konkurentnošću nam daje pravila, metode, metodologije za dizajn te teorijsku podlogu za
održavanje konzistentnosti prilikom obavljanja konkurentnih operacija, a na taj način i
sveukupne konzistentnosti aplikacije, baze podataka i sl. Prilikom upravljanja konkurentnošću
potrebno je voditi računa o brzini obavljanja operacija. Konkurentnost je, kao takva, uvedena da
se ubrza dohvaćanje podataka, da se poveća učinkovitost i sl. te bi, ukoliko upravljanje
(kontrola) nad tom konkurentnosti traje predugo, mogli izgubiti dosta prednosti koje dobijemo
uvođenjem konkurentnosti. Loše implementirano upravljanje konkurentnošću može, 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
konkurentnošću, upravo stoga jer je ona jedan od najbitnijih, ako ne i najbitniji, element za
održavanje baze (sustava) ispravnim i konzistentnim, a podacima ispravnim, točnim 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 više
različitih 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 pokreće, ona se izvršava u cijelosti od početka do
kraja. Trajanje transakcije ovisi o broju operacija koje se u njoj nalaze te može trajati vrlo kratko
(par sekundi) sve do nekoliko dana ( transakcijske sage). Još jedno bitno svojstvo je roll-back.
Kada se, prilikom izvođenja transakcije, dogodi pogreška, transakcija ima sposobnost povratiti
sve promjene koje je učinila. To je također korisno i prilikom pada sustava, kad se kod
ponovnog pokretanja sve transakcije i podaci mogu vratiti na početak i pokrenuti ponovo.
Zašto su nam transakcije bitne za konkurentnost i konzistentnost podataka? Odgovor je
jednostavan. Transakcija može biti više u jednom sustavu, i one se mogu izvršavati konkurentno.
Za vjerovati je da će se prije ili kasnije dogoditi situacija u kojoj će dvije različite transakcije
zatrebati isti podatak iz tablice. Što učiniti u tom slučaju? Kao što smo već rekli, potrebno je
upravljati konkurentnošću 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 zaključavanju (Lock-based Protocol)
Jedan od načina osiguranja konzistentnosti podataka i upravljanja konkurentnošću transakcija
temelji se na lockovima, tj. na međusobnoj isključivosti prilikom pristupanja podacima. Princip
je prilično jednostavan: u trenutku kada jedna transakcija pristupa podacima, nijedna druga
transakcija ne može mijenjati te podatke. To se postiže tzv. zaključavanjem, odnosno lockovima.
Transakcija će, dakle, pristupiti podatku samo ukoliko on na sebi ima lock.
Postoji više načina po kojima neki podatak može biti zaključan:
dijeljeno zaključavanje (shared lock)
ekskluzivno zaključavanje (exclusive lock)
Dijeljeno zaključavanje:
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 zaključavanje:
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 izvođenja jednostavne transakcije korištenjem ekskluzivnog zaključavanja:
Slika 1: Izvođenje jednostavne transakcije
5
Prilikom pristupanja podatku transakcija zaključava isti zaključava te ovisno o vrsti
zaključavanja postavlja restrikciju za druge transakcijekoje žele pristupiti istom podatku.
Na slijedećoj slici je prikazan jednostavan primjer konkurentnog izvršavanja dvije transakcije te
korištenja zaključavanja kao sredstva za očuvanje konzistentnosti:
Transakcije obavljaju jednostavne operacije nad podacima A i B te prilikom pristupanja
pojedinom podatku isti i zaključavaju. U primjeru transakcije koriste oba oblika zaključavanja
(dijeljeni – S i ekskluzivni – X).
Slika 2: Konkurentno izvođenje dvije transakcije
6
Prilikom korištenja metoda zaključavanja kod upravljanja konkurentnošću, ponekad može doći
do neželjenih situacija kod izvođenja transakcija. Na slijedećoj slici se nalazi jedan primjer takve
situacije:
Što se uopće dogodilo u ovoj sitaciji? Ako pogledamo izvođenja transakcija T3 i T4 možemo
uočiti slijedeće stvari: T3 je zaključala podatak B u ekskluzivnom modu dok je transakcija T4
zaključala podatak A u dijeljenom modu. U nastavku izvođenja transakcija događa se situacija u
kojoj T3 želi zaključati podatak A u ekskluzivnom modu a T4 želi zaključati B u dijeljenom
modu. Ta situacija se naziva deadlock. U ovom trenutku niti jedna transakcija ne nastavlja s
radom jer T3 čeka da T4 otključa A dok T4 čeka da T3 otključa B. Kada se dogodi ovakva
situacija jedno od rješenja je roll-back jedne od transakcija. Uglavnom se za roll-back odabire
transakcija koja je najkasnije počela, tj. ona koja je obavila najmanje posla. Nakon što je
transakcija obavila roll-back, podaci koji su bili zaključani se otključavaju te druga transakcija
može nastaviti sa radom.
U protokolima temeljenim na tehnologiji zaključavanja se ističu 2 tipa:
Two-phase Locking protocol
o protokol osigurava serijalizabilnost podataka
o ne rješava problem deadlocka
o izvršava se u dvije faze:
Faza rasta u kojoj transakcija može zaključati podatak, ali ne i otključati
Faza smanjivanja u kojoj transakcija može otključati podatak ali ne i
zaključati ga
Slika 3: Deadlock
7
Graph-based Protocols
o zahtjeva prethodnu informaciju o redoslijedu izvođenja 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 označava vrijeme pokretanja. Prilikom pokretanja
transakcije T1, istoj bude dodjeljena znamka TS(T1) i svaka slijedeća transakcija koja bude
pokrenuta, npr. T2 će imati vrijednost znamke veću od T1 tako da će biti: TS(T1) < TS(T2).
Znamka se može generirati korištenjem vrijednosti sistemskog sata (system clock) ili korištenjem
brojača kojemu se vrijednost poveća nakon što se dodijeli znamka. Osim vremenskih znamki, za
ove protokole je potrebno svakom podatku (Q) pridodati 2 oznake:
W-znamka(Q) – označava najveću vrijednost znamke koju je imala transakcija koja je
nad podatkom Q izvršila write operaciju.
R-znamka(Q) – označava najveću vrijednost znamke koju je imala transakcija koja je nad
podatkom Q izvršila read operaciju.
Ove oznake su ažurirane 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), znači da T1 želi pročitati vrijednost podatka Q koji je
već promijenjen. Zbog toga se read operacija odbija i T1 pokreće roll-back
ukoliko je TS(T1) >= W-znamka(Q), tada se read operacija izvršava 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 zaključio da ta vrijednost nikada neće stići. Radi toga se odbija
write operacija i obavlja se roll-back T1 transakcije.
ukoliko je TS(T1) < W-znamka(Q) , tada T1 ustvari pokušava zapisati staru vrijednost Q.
Upravo zato sustav odbija write operaciju i obavlja se roll-back T1 transakcije.
u ostalim sučajevima sustav izvršava write operaciju i postavlja W-znamka(Q) = TS(T1)
9
2.2.3 MVCC (Multiversion concurrency control)
Način upravljanja konkurentnošću koji je prilično 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 način upravljanja konkurentnošću koji ne koristi zaključavanja. Svaki korisnik koji je
spojen na bazu podataka, koja radi MVCC principom, vidi snapshot baze podataka u određenom
vremenskom trenutku. Sve promjene koje se dogode npr. write naredbama neće biti vidljive od
drugih korisnika dok sve transakcije nisu obavile svoj posao, tj. dok transakcija nije pozvala
commit. Kad MVCC baza podataka treba ažurirati neki podatak, ona neće prebrisati stari podatak
nego će ga označiti kao zastarjeli i dodati novu verziju negdje drugdje. Radi toga, postoji mnogo
različitih verzija u memoriji, ali samo jedna je najnovija. Takav način upravljanja omogućava
transakcijama koje čitaju pristup podacima koji su bili prisutni u bazi u trenutku kada je čitanje
započelo, čak ako se u međuvremenu dogodila promjena ili brisanje podatka.
MVCC također koristi vremenske znamke kako bi se osigurala konzistentnost podataka.
Transakcija nikad ne mora čekati da pristupi nekom objekta iz baze upravo na način da
istovremeno upravlja različitim 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). Također, 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 može uspjeti ukoliko se obavljaju i
transakcije s ranijom vremenskom znamkom kreiranja.
Svaki objekt također 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 pokreće ponovo. U protivnom slučaju T1 kreira
novu verziju objekta (P) i postavlja mu znamke za čitanje i pisanje jednakima TS(T1).
Očigledni nedostaci ovakvog pristupa su naravno memorijske prirode. Potrebno je više memorije
kako bi se moglo spremiti više različitih verzija objekata u bazi. No, s druge strane operacije
čitanja nikad nisu blokirane što može bti jako važno kod baza podataka iz kojih se uglavnom
čitaju podaci.
10
3. Zaključak
Upravljanje konkurentnošću je vrlo važno područje u polju razvoja baza podataka. Loše
izvedena implementacija upravljanja može imati katastrofalne posljedice po podatke koji se u
bazi nalaze. Upravo zato postoji dosta različitih implementacija upravljanja konkurentnošću. Svi
oni imaju svoje prednosti i nedostatke. Kod nekih može doći i do neželjenih 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
slučaju, implementacija upravljanja transakcijama se može izvesti na više načina i na nama je
daodaberemo najefikasniji način, tj. onaj koji će nam osigurati najveću 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