konkurentnost u bazama podataka

14
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.

Upload: luka-rajcevic

Post on 24-May-2015

430 views

Category:

Technology


3 download

DESCRIPTION

Konkurentnost u bazama podataka

TRANSCRIPT

Page 1: Konkurentnost u bazama podataka

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.

Page 2: Konkurentnost u bazama podataka

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.

Page 3: Konkurentnost u bazama podataka

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

Page 4: Konkurentnost u bazama podataka

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.

Page 5: Konkurentnost u bazama podataka

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

Page 6: Konkurentnost u bazama podataka

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.

Page 7: Konkurentnost u bazama podataka

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

Page 8: Konkurentnost u bazama podataka

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

Page 9: Konkurentnost u bazama podataka

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

Page 10: Konkurentnost u bazama podataka

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

Page 11: Konkurentnost u bazama podataka

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)

Page 12: Konkurentnost u bazama podataka

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.

Page 13: Konkurentnost u bazama podataka

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.

Page 14: Konkurentnost u bazama podataka

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