Liitosesimerkki 16.02.06 Tietokannan hallinta, kevät 2006, J.Li 1
Esim R1 R2 yhteinen attribuutti C T(R1) = 10,000 riviä T(R2) = 5,000 riviä S(R1) = S(R2) = 1/10 lohkoa Puskuritilaa = 101 lohkoa 16.02.06 Tietokannan hallinta, kevät 2006, J.Li 2
Vaihtoehdot Liitosjärjestys: R1 R2, R2 R1 Liitosalgoritmit: Sisäkkäiset silmukat Sort merge liitos Hakemistoliitos Hajautusliitos 16.02.06 Tietokannan hallinta, kevät 2006, J.Li 3
Sisäkkäiset silmukat for each r R1 do for each s R2 do if r.c = s.c then output {r,s} pair 16.02.06 Tietokannan hallinta, kevät 2006, J.Li 4
Sort merge liitos (1) Jos R1 tai R2 ei ole lajiteltu, lajittele se (2) i 1; j 1; While (i T(R1)) (j T(R2)) do if R1{ i }.C = R2{ j }.C then outputtuples else if R1{ i }.C > R2{ j }.C then j j+1 else if R1{ i }.C < R2{ j }.C then i i+1 16.02.06 Tietokannan hallinta, kevät 2006, J.Li 5
Procedure Output Tuples While (R1{ i }.C = R2{ j }.C) (i T(R1)) do [jj j; while (R1{ i }.C = R2{ jj }.C) (jj T(R2)) do [output pair R1{ i }, R2{ jj }; jj jj+1 ] i i+1 ] 16.02.06 Tietokannan hallinta, kevät 2006, J.Li 6
Esimerkki i R1{i}.C R2{j}.C j 1 10 5 1 2 20 20 2 3 20 20 3 4 30 30 4 5 40 30 5 50 6 52 7 16.02.06 Tietokannan hallinta, kevät 2006, J.Li 7
Hakemistoliitos For each r R1 do [ X index (R2, C, r.c) Oletus R2.C hakemistossa for each s X do output {r,s} pair] Huom: X index(rel, attr, value) then X = set of rel tuples with attr = value 16.02.06 Tietokannan hallinta, kevät 2006, J.Li 8
Hajautusliitos Hajautusfunktio h, arvoalue 0 k Solut R1: G0, G1,... Gk Solut R2: H0, H1,... Hk Algoritmi (1) Hajauta R1 tietueet soluihin G (2) Hajauta R2 tietueet soluihin H (3) For i = 0 to k do vertaa tietueita soluissa Gi, Hi 16.02.06 Tietokannan hallinta, kevät 2006, J.Li 9
Esimerkkihajautus R1 R2 Solut 2 5 Parilliset 4 4 R1 R2 3 12 Parittomat 5 3 8 13 9 8 11 14 2 4 8 4 12 8 14 3 5 9 5 3 13 11 16.02.06 Tietokannan hallinta, kevät 2006, J.Li 10
Esim 1(a): sisäkkäiset silmukat R1 R2 Relaatiot eivät ole peräkkäisiä T(R1) = 10,000 T(R2) = 5,000 S(R1) = S(R2) =1/10 lohkoa Muistia=101 lohkoa Kustannus: jokaiselle R1:n tietueelle [lue tietue + lue R2] Yhteensä =10,000 [1+5000]=50,010,000 I/O:ta 16.02.06 Tietokannan hallinta, kevät 2006, J.Li 11
Voidaanko tehdä paremmin? Käytetään muistia (1) Luetaan 100 lohkoa R:tä (2) Luetaan kokonaan R2 (1 lohko) + liitos (3) Toistetaan kunnes valmista 16.02.06 Tietokannan hallinta, kevät 2006, J.Li 12
Kustannus: jokaiselle R1 lohkolle Lue lohkot: 1000 IOs Lue R2: 5000 IOs 6000 Yht = 10,000 x 6000 = 60,000 IOs 1,000 16.02.06 Tietokannan hallinta, kevät 2006, J.Li 13
Voidaanko parantaa? Vaihdetaan järjestys: R2 R1 Yht = 5000 x (1000 + 10,000) = 1000 5 x 11,000 = 55,000 IOs 16.02.06 Tietokannan hallinta, kevät 2006, J.Li 14
Esim 1(b): sisäkkäiset silmukat R2 R1 Relaatiot peräkkäisiä Kustannus jokaiselle R2 palalle: Lue lohkot: 100 IOs Lue R1: 1000 IOs 1,100 Yhteensä= 5 palaa x 1,100 = 5,500 IOs 16.02.06 Tietokannan hallinta, kevät 2006, J.Li 15
Esim 1(c): Lomitusliitos (Merge Join) Molemmat R1, R2 järjestetty C:n mukaan ; relaatiot peräkkäisiä Muisti R1.. R1 R2.. R2 Kustannus: Lue R1 + Lue R2 = 1000 + 500 = 1,500 IOs 16.02.06 Tietokannan hallinta, kevät 2006, J.Li 16
Esim 1(d): Sort Merge liitos R1, R2 eivät järjestettyjä, mutta peräkkäisiä > Lajitellaan R1, R2 ensin. Kuinka? 16.02.06 Tietokannan hallinta, kevät 2006, J.Li 17
Merge Sort (i) Jokaiselle 100 lohkon palalle R:ää R1 R2 Lue lohkot Lajittelele muistissa Kirjoita levylle Muisti... lajitellut palat 16.02.06 Tietokannan hallinta, kevät 2006, J.Li 18
(ii) Lue kaikki palat + liitä + kirjoita Lajiteltu Muisti Lajiteltu pala...... 16.02.06 Tietokannan hallinta, kevät 2006, J.Li 19
Kustannus: Lajittelu Jokainen tietue luetaan, kirjoitetaan, luetaan, kirjoitetaan siis... R1 lajittelukustannus: 4 x 1,000 = 4,000 R2 lajittelukustannus: 4 x 500 = 2,000 16.02.06 Tietokannan hallinta, kevät 2006, J.Li 20
Esim 1(d): Sort Merge liitos jatkoa Kokonaiskustannus = järjestys + liitos = 6,000 + 1,500 = 7,500 IOs Mutta: sisäkkäiset silmukat = 5,500 ei kannata siis! 16.02.06 Tietokannan hallinta, kevät 2006, J.Li 21
Oletetaan R1 = 10,000 lohkoa peräkkäin R2 = 5,000 lohkoa, ei järjestetty Silmukat: 5000 x (100+10,000) = 50 x 10,100 100 = 505,000 IOs Sort Merge: 5(10,000+5,000) = 75,000 IOs Sort Merge parempi! 16.02.06 Tietokannan hallinta, kevät 2006, J.Li 22
Esim 1(e): Hakemistoliitos Oletetaan R1.C hakemisto; 2 tasoa Oletetaan R2 peräkkäin, järjestämätön Oletetaan R1.C hakemisto mahtuu muistiin 16.02.06 Tietokannan hallinta, kevät 2006, J.Li 23
Kustannus: Lukeminen: 500 IOs jokaiselle R2 tietueelle: läpikäy hakemisto ilmaista jos löytyy, lue R1 tietue: 1 IO 16.02.06 Tietokannan hallinta, kevät 2006, J.Li 24
Kuinka monta yhteistä tietuetta? (a) Olkoon R1.C avain ja R2.C viiteavain, tällöin = 1 (b) Olkoon V(R1,C) = 5000, T(R1) = 10,000 tasaisen jakauman oletuksella keskimäärin = 10,000/5,000 = 2 ( V(R,C) = C attribuutin arvojen lkm R:ssä) 16.02.06 Tietokannan hallinta, kevät 2006, J.Li 25
Kuinka monta yhteistä arvoa? (c) Olkoon DOM(R1, C)=1,000,000 T(R1) = 10,000 tällä oletuksella yhteisiä = 10,000 = 1 1,000,000 100 ( DOM(R,C) = C:n arvoalue R:ssä ) 16.02.06 Tietokannan hallinta, kevät 2006, J.Li 26
Hakemistoliitoksen kokonaiskustannus (a) Yhteensä = 500+5000(1)1 = 5,500 (b) Yhteensä = 500+5000(2)1 = 10,500 (c) Yhteensä = 500+5000(1/100)1=550 16.02.06 Tietokannan hallinta, kevät 2006, J.Li 27
Entä jos hakemisto ei mahdu muistiin? Esim: Olkoon R1.C hakemiston koko 201 lohkoa Pidä juuri + 99 lehtitason solmua muistissa Jokaisen läpikäynnin odotettu kustannus E = (0) 99 + (1) 101 0.5 200 200 16.02.06 Tietokannan hallinta, kevät 2006, J.Li 28
Kokonaiskustannus = 500+5000 [läpikäynti + tietueen luku] = 500+5000 [0.5+2] tasainen jakauma oletuksena = 500+12,500 = 13,000 (tapaus b) Tapaus (c): = 500+5000[0.5 1 + (1/100) 1] = 500+2500+50 = 3050 IOs 16.02.06 Tietokannan hallinta, kevät 2006, J.Li 29
Eli tähänmennessä tiedetään että ei peräkkäin peräkkäin Sisäkkäin R2 R1 55,000 (paras) Lomitusliitos Sort Merge liitos R1.C hakemisto R2.C hakemisto Sisäkkäin R2 R1 5500 Lomitusliitos 1500 Sort Merge liitos 7500 4500 R1.C hakemisto 5500 3050 550 R2.C hakemisto 16.02.06 Tietokannan hallinta, kevät 2006, J.Li 30
Esim 1(f): Hajautusliitos R1, R2 peräkkäisiä, järjestämättömi Käytetään 100 solua Lue R1, hajauta, + kirjoita solut R1...... 100 10 lohkoa 16.02.06 Tietokannan hallinta, kevät 2006, J.Li 31
> Samoin R2 > Lue yksi R1 solu; rakenna solutaulukko > Lue vastaavat R2 solut + hajauta + tutki R2 R1 R1...... muisti Toista kaikille soluille 16.02.06 Tietokannan hallinta, kevät 2006, J.Li 32
Kustannus: Soluittain: Lue R1 + kirjoita Lue R2 + kirjoita Liitos: Lue R1, R2 Yhteensä = 3 x [1000+500] = 4500 16.02.06 Tietokannan hallinta, kevät 2006, J.Li 33
Yhteenveto Sisäkkäiset silmukat menetelmä sopii pienille relaatioille (verrattuna keskusmuistiin). Hajautusliitos yleensä paras yhtäsuuruusliitokseen, missä relaatiot eivät ole järjestetty eikä hakemistoja ole. Sort Mege on hyvä jos ehtona ei yhtäsuuruus (esim, R1.C > R2.C). Jos relaatiot jo järjestetty, käytä lomitusliitosta. Jos hakemistoja on, ovat yleensä hyödyllisiä (riippuu siitä kuinka rajaava liitosehto on). 16.02.06 Tietokannan hallinta, kevät 2006, J.Li 34