Hajautusrakenteet. Hajautukseen perustuvat tiedostorakenteet. Hajautukseen perustuvat tiedostorakenteet. Hajautukseen perustuvat tiedostorakenteet

Samankaltaiset tiedostot
Hajautusrakenteet. R&G Chapter Tietokannan hallinta, kevät 2006, Jan 1

TKHJ:ssä on yleensä komento create index, jolla taululle voidaan luoda hakemisto

D B. B+ -puun tasapainotus poistossa. B+ -puun tasapainotus poistossa. Poistot. B+ -puun tasapainotus poistossa. B+ -puun tasapainotus poistossa

Yksitasoisia talletusrakenteita käytetään lähinnä datatietueiden talletukseen

Helsingin yliopisto/tktl Tietokannan hallinta kevät Harri Laine 1 D B. Yksitasoiset talletusrakenteet

Helsingin yliopisto/tktl Kyselykielet, s 2006 Tietokantaoperaatioiden toteutuksesta Harri Laine 1. Tiedostorakenteet.

Algoritmit 2. Luento 3 Ti Timo Männikkö

Algoritmit 2. Luento 3 Ti Timo Männikkö

Algoritmit 2. Luento 4 To Timo Männikkö

Tiedostorakenteet. R&G Chapter Tietokannan hallinta, kevät 2006, Jan 1

Hakemistorakenteet. R & G Chapter Tietokannan hallinta, kevät 2006, Jan 1

Algoritmit 2. Luento 4 Ke Timo Männikkö

Hakemistotyypeistä. Hakemistorakenteet. Hakemiston toteutuksesta. Hakemiston toteutuksesta

Luento 2: Tiedostot ja tiedon varastointi

Jokaisella tiedostolla on otsake (header), joka sisältää tiedostoon liittyvää hallintatietoa

D B. Harvat hakemistot. Harvat hakemistot

oheishakemistoja voi tiedostoon liittyä useita eri perustein muodostettuja

Algoritmit 2. Luento 5 Ti Timo Männikkö

Algoritmit 2. Luento 6 Ke Timo Männikkö

5. Hajautus. Tarkastellaan edelleen sivulla 161 esitellyn joukkotietotyypin toteuttamista

Hajautus. operaatiot insert ja search pyritään tekemään erittäin nopeiksi

Luku 8. Aluekyselyt. 8.1 Summataulukko

Algoritmit 2. Luento 6 To Timo Männikkö

B-puu. 3.3 Dynaamiset hakemistorakenteet

Käsitellyt hakemistot (hajautus, ISAM): hakemisto-osa on staattinen eli ei muutu muuten kuin uudelleenorganisoinnissa.

Tietorakenteet, laskuharjoitus 7, ratkaisuja

Algoritmit 2. Luento 5 Ti Timo Männikkö

D B. Tiedostojen käsittely

D B. Tietokannan hallinta kertaus

Algoritmit 1. Luento 5 Ti Timo Männikkö

Algoritmit 2. Luento 2 To Timo Männikkö

D B. Harvat hakemistot

Algoritmit 1. Luento 7 Ti Timo Männikkö

Liitosesimerkki Tietokannan hallinta, kevät 2006, J.Li 1

Liitosesimerkki. Esim R1 R2 yhteinen attribuutti C. Vaihtoehdot

Helsingin yliopisto /TKTL Tietokannan hallinta Harri Laine 1 D B. Harvat hakemistot. Harvat hakemistot

815338A Ohjelmointikielten periaatteet Harjoitus 3 vastaukset

Tietorakenteet ja algoritmit - syksy

Tietorakenteet ja algoritmit. Hajautus. Ari Korhonen Tietorakenteet ja algoritmit - syksy

Algoritmit 2. Luento 7 Ti Timo Männikkö

58131 Tietorakenteet (kevät 2009) Harjoitus 6, ratkaisuja (Antti Laaksonen)

v 1 v 2 v 3 v 4 d lapsisolmua d 1 avainta lapsen v i alipuun avaimet k i 1 ja k i k 0 =, k d = Sisäsolmuissa vähint. yksi avain vähint.

A TIETORAKENTEET JA ALGORITMIT

2. Tietokannan tallennusrakenteet

4. Hajautus. Hajautus (hashing) on vaihtoehto tasapainoisille puille dynaamisen joukon toteuttamisessa:

Tietorakenteet ja algoritmit Johdanto Lauri Malmi / Ari Korhonen

58131 Tietorakenteet ja algoritmit (syksy 2015) Toinen välikoe, malliratkaisut

2. Tietokannan tallennusrakenteet

D B. Levykön rakenne. pyöriviä levyjä ura. lohko. Hakuvarsi. sektori. luku-/kirjoituspää

Algoritmit 1. Luento 8 Ke Timo Männikkö

Ohjelmoinnin peruskurssi Y1

Algoritmit 1. Luento 11 Ti Timo Männikkö

811312A Tietorakenteet ja algoritmit, , Harjoitus 5, Ratkaisu

Helsingin yliopisto/tktl Kyselykielet, s 2006 Optimointi Harri Laine 1. Kyselyn optimointi. Kyselyn optimointi

Helsingin yliopisto/tktl Tietokantojen perusteet, s 2006 Tietokantaoperaatioiden toteutuksesta 3. Harri Laine 1

A TIETORAKENTEET JA ALGORITMIT

Tietokannan indeksointi: B puun ja hajautusindeksin tehokkuus

811120P Diskreetit rakenteet

ALGORITMIT 1 DEMOVASTAUKSET KEVÄT 2012

Algoritmit 1. Luento 12 Ti Timo Männikkö

Algoritmit 2. Luento 2 Ke Timo Männikkö

Algoritmit 2. Demot Timo Männikkö

Tehtävän V.1 ratkaisuehdotus Tietorakenteet, syksy 2003

811312A Tietorakenteet ja algoritmit, , Harjoitus 7, ratkaisu

Ohjelmoinnin perusteet Y Python

Algoritmit 1. Luento 9 Ti Timo Männikkö

Algoritmit 1. Luento 6 Ke Timo Männikkö

PERUSLASKUJA. Kirjoita muuten sama, mutta ota välilyönti 4:n jälkeen 3/4 +5^2

Algoritmit 2. Luento 14 Ke Timo Männikkö

811312A Tietorakenteet ja algoritmit, , Harjoitus 5, Ratkaisu

Jaetun muistin muuntaminen viestin välitykseksi. 15. lokakuuta 2007

Lineaarinen optimointitehtävä

(a) L on listan tunnussolmu, joten se ei voi olla null. Algoritmi lisäämiselle loppuun:

Algoritmit 1. Luento 1 Ti Timo Männikkö

Algoritmit 1. Luento 12 Ke Timo Männikkö

Tietorakenteet ja algoritmit syksy Laskuharjoitus 1

Ohjelmassa muuttujalla on nimi ja arvo. Kääntäjä ja linkkeri varaavat muistilohkon, jonne muuttujan arvo talletetaan.

7.4 Sormenjälkitekniikka

Kirjoita ohjelma jossa luetaan kokonaislukuja taulukkoon (saat itse päättää taulun koon, kunhan koko on vähintään 10)

Esimerkki A1. Jaetaan ryhmä G = Z 17 H = 4 = {1, 4, 4 2 = 16 = 1, 4 3 = 4 = 13, 4 4 = 16 = 1}.

A ja B pelaavat sarjan pelejä. Sarjan voittaja on se, joka ensin voittaa n peliä.

1. a) Laadi suoraviivaisesti kyselyä vastaava optimoimaton kyselypuu.

A TIETORAKENTEET JA ALGORITMIT KORVAAVAT HARJOITUSTEHTÄVÄT 3, DEADLINE KLO 12:00

Datatähti 2019 loppu

Kirjoita oma versio funktioista strcpy ja strcat, jotka saavat parametrinaan kaksi merkkiosoitinta.

private TreeMap<String, Opiskelija> nimella; private TreeMap<String, Opiskelija> numerolla;

jotakin käyttötarkoitusta varten laadittu kokoelma toisiinsa liittyviä säilytettäviä tietoja

Tietorakenteet, laskuharjoitus 8, malliratkaisut

Tietokanta (database)

Kääreluokat (oppikirjan luku 9.4) (Wrapper-classes)

Algoritmit 1. Demot Timo Männikkö

Yleistä. Nyt käsitellään vain taulukko (array), joka on saman tyyppisten muuttujien eli alkioiden (element) kokoelma.

A TIETORAKENTEET JA ALGORITMIT

1 + b t (i, j). Olkoon b t (i, j) todennäköisyys, että B t (i, j) = 1. Siis operaation access(j) odotusarvoinen kustannus ajanhetkellä t olisi.

Pikalajittelu: valitaan ns. pivot-alkio esim. pivot = oikeanpuoleisin

Perusteet. Pasi Sarolahti Aalto University School of Electrical Engineering. C-ohjelmointi Kevät Pasi Sarolahti

Ohjelmoinnin perusteet Y Python

Algoritmit 1. Luento 10 Ke Timo Männikkö

Algoritmit 2. Luento 9 Ti Timo Männikkö

Algoritmit 1. Luento 2 Ke Timo Männikkö

Transkriptio:

Hajautusrakenteet R&G Chapter Hajautukseen perustuvissa tiedostorakenteissa on tavoitteena yksittäisen tietueen nopea haku. Tähän pyritään siten, että tietueen sijoituspaikan eli solun (cell, bucket) osoite lasketaan jonkin tietueessa olevan tiedon eli hajautusavaimen (hash key) perusteella. Parhaassa tapauksessa solu olisi tietty tiedoston lohko. Yleensä solu kuitenkin muodostuu useasta lohkosta. Solun osoitteena on joko kotilohkon osoite (tällöin ei käytetä soluhakemistoa) tai soluhakemiston indeksi soluhakemisto on taulukko, jonka alkioina on kotilohkojen osoitteita Mahdolliset soluosoitteet muodostavat osoiteavaruuden (address space) soluhakemistoa käytettäessä saadaan pienellä lisätilalla kasvatettua osoiteavaruutta moninkertaiseksi. Osoitteen laskentaan käytetään hajautusfunktiota (hajautinta) (hash function, randomizing function). Olkoon h(x) hajautus funktio ja R K tietue, jonka hajautusavain on K. Tällöin R K :n sijoitussolun osoite = h(k). Solujen sisällä tietueet sijoitetaan kasarakenteen tapaan eli lisäykset loppuun. 4

Optimitapauksessa tietue löytyy yhdellä levyhaulla eli solun kotilohkosta*. Tämä edellyttää, että hajautusfunktio jakaa tietueet tasaisesti osoiteavaruuden osoitteisiin osoiteavaruus on määritelty riittävän isoksi niin, että kaikki tietueet voidaan sijoittaa solujen kotilohkoihin * soluhakemistoa käytettäessä joudutaan satunnaisesti hakemaan myös soluhakemiston sivuja 5 Haku avaimella K: lasketaan hajautusfuktiolla solun osoite s=h(k) jos käytössä on soluhakemisto haetaan kotilohkon osoite sieltä p=h[s] muuten käytetään kotilohkon osoitteena solun osoitetta p=s. haetaan sivu lohkosta s ellei tietuetta löydy käydään läpi solun muut lohkot Jos hajautusavain ei ole tietueen avain on haussa käytävä läpi kaikki solun sivut. 6 Hajautusfunktio on tyypillisesti muotoa h(k) = int(k) mod B missä int(k) muuntaa hajautusavaimen kokonaisluvuksi Hyvältä hajautusfunktiolta edellytetään, että se jakaa hajautusavaimen arvot tasaisesti osoiteavaruuteen laskennan nopeus ei ole yhtä oleellista kuin keskusmuistihajautuksessa rakenteet nopeuttavat hakua vain kyselyissä, joissa tietueita haetaan hajautusavaimeen perustuvan yhtäsuuruusehdon avulla. 7 Oletetaan, että tiedosto mahtuisi kasarakenteena N sivulle ja hajautusavaimella olisi k erilaista arvoa. Olkoon osoiteavaruus 0,..B- Tällöin tulisi valita B<=k (muuten varataan tilaa soluille, jotka välttämättä jäävät tyhjiksi), Vain, jos B>=N, voidaan päästä yhteen levyhakuun tietuetta haettaessa B:n kokoon vaikuttavat mm. hajautusfunktio hajautusavaimen rakenne käytetäänkö soluhakemistoa, jolloin osoiteavaruuden koon kasvattaminen on kevyempää 8

A) Solun osoite on soluhakemiston indeksi () (9) soluhakemiston sivu B) Solun osoitteena on kotilohkon osoite () Talletukseen varattu perustila - kotilohkot lohko x solu 9 solu Lohkot käyttävissä koti- tai ylivuotolohkoiksi Tyhjille soluille varataan tilaa vain soluhakemiston alkion verran Soluhakemisto on haettava erikseen Yleisimmin käytetty ratkaisu 9 Tyhjätkin solut varaavat tilaa yhden lohkon verran Ylivuotolohkoille oma alueensa 0 Staattinen hajautus Perussolmujen lukumäärä kiinteä, varataan peräkkäin, soluja ei vapauteta; ylivuotosoluja tarpeen mukaan. h(k) modm= solu mihin avaimen k omaava tietue kuuluu. (M = solujen lkm). h(k) mod M avain h Pääsolut 0 M- Ylivuotosivut Dynaamiset hajautusratkaisut Aiemmin käsitelty hajautusrakenne perustui siihen, että tietueelle laskettiin soluosoite hajautusavaimen perusteella. Hajautusfunktio oli kiinteä ja sen arvoalue (osoiteavaruus) piti kiinnittää funktiota määriteltäessä. Tällöin ei välttämättä ole riittävää tietoa siitä, miten hajautusfunktio jakaa tietueet todellisessa käyttötilanteessa eikä välttämättä edes tietoa siitä, miten nopeasti tietueiden määrä kasvaa. Solua laajentavan ylivuotoketjun pituutta ei voida hallita ja ainakin alussa täytyy varata tilaa paljon yli todellisen tarpeen.

Dynaamiset hajautusratkaisut B+ -puussa hakupolun pituus pidetään hallinnassa puolittamalla sivu ja pitämällä kummatkin puolikkaat samanmittaisen hakupolun päässä. Sivun puolituksen ideaa sovelletaan myös dynaamisissa hajautusrakenteissa. Tunnetuimpia näistä ovat laajeneva hajautus (extendible hashing) ja lineaarinen hajautus (linearhashing) Laajeneva hajautus Soluille varattu tila tulee täyteen. Miksi ei organisoida tiedostoa siten että tila tuplaantuu? Kaikkien sivujen lukeminen ja kirjoittaminen kallista! Ajatus: Käytetään osoitinhakemistoa soluihin. Tuplataan solujen määrä tuplaamalla hakemiston koko jakamalla täyteen tullut solu. Hakemisto on paljon pienempi kuin tiedosto joten sen lukeminen ja kirjoittaminen on edullisempaa. Vain yksi tietosolu joudutaan jakamaan. Ongelmana kuinka hajautusfunktiota muutetaan. 4 Laajeneva hajautus Laajeneva hajautus Soluhakemiston koko on siis, 4, 8,. solua Olkoon rakenteen globaali syvyys d. Tällöin avaimen k solu (siis soluhakemiston indeksi) saadaan eristämällä hajautusfunktion antaman osoitteen lopusta d bitin pituinen osa tail_bits(h(k),d). Jos d= otetaan viimeinen bitti => {0,} Jos d= otetaan viimeistä bittiä => {00,0,0,} Lisäysten käsittely Jos soluhakemistosta löytyvässä kotilohkossa on tilaa tietue lisätään sinne kuten aiemmin käsitellyssä hajautuksessa Jos kotilohko (olkoon sen solutunnus binäärisenä {b}) on täynnä, otetaan käyttöön uusi lohko ja jaetaan ylivuotavan kotilohkon tietueet kotilohkon ja uuden lohkon välillä kotilohkolla on paikallinen syvyys (local depth) p (monenko bitin perusteella tietueet on sijoitettu lohkoon) 5 6 4

Laajeneva hajautus Lisäyksen käsittely jatkuu tietueille tehdään uusi sijoittelu ottamalla käyttöön hajauttimen tuottaman osoitteen lopusta päin p+:s bitti ne tietueet, joilla tämä bitti on 0, jäävät kotilohkoon ja muut siirtyvät (oletetaan, että kaikki eivät menneet samaan lohkoon, näinkin voisi käydä L ) kotilohkon ja uuden lohkon paikalliseksi syvyydeksi asetetaan p+ soluhakemiston alkiot, joiden indeksin p+ viimeistä bittiä ovat {b} asetetaan osoittamaan uuteen lohkoon Esimerkki Soluhakemiston koko 4. Solun r löytämiseen, eristä globaalin syvyyden lukumäärä bittejä. Merkitään tätä h(r). Jos h(r) = 5 = binäärisenä 0, oikean solun osoite löytyy siis solusta 0. Paikallinen syvyys Globaali syvyys * 5* * * Lisäys: Jos solu on täynnä, halkaise se (varaa uusi sivu ja sijoita arvot uudestaan). 00 0 0 Soluhakemisto 4* * * 0* 5* 7* 9* tietohakemisto Solu A Solu B Solu C Solu D 7 8 Lisätään h(r)=0 Huomioita Paikallinen syvyys Globaali syvyys 00 0 0 Hakemisto Solu A * * 5* ** Solu B 0* 5* 7* 9* Solu C Solu D Paikallinen syvyys Globaali syvyys 4* * 0* Solu A Hakemisto (`uusi sivu ja puolet solusta A) 000 00 00 0 00 0 0 5* 7* 9* * Solu A * 5* ** Solu B 0* 4* * 0* Solu C Solu D Solu A 9 0 = binäärisenä 000. Viimeiset bittiä (00) kertoo että r kuuluu soluun A tai A. Viimeiset bittiä kertoo kumpaan. Hakemiston globaali syvyys: Kuinka monta bittiä tarvitaan oikean solun etsimiseen. Solun paikallinen syvyys: kuinka monta bittiä tarvitaan selvittämään kuuluuko arvo tähän soluun. Milloin solun halkaisu aiheuttaa hakemiston kasvatuksen? Ennen lisäystä solun paikallinen syvyys = globaali syvyys ja lisäys aiheuttaa tilanteen, jossa solun paikallinen syvyys > globaali syvyys. 0 5

Hakemiston kasvatus Esimerkki : /4 Miksi käytää vähiten merkitseviä bittejä? Sallii kasvatuksen kopioinnilla! 000 00 00 0 00 0 0 globaali syvyys 6 = 0 000 6 = 0 000 lisätään: 000 0 00 0 0 00 00 0 00 0 0 Vähitenmerkitsevät vs. 0 00 0 0 00 00 0 00 0 0 Eniten merkitsevät 000 000 0 00 000 00 00 täynnä 00 Esimerkki : /4 Esimerkki : /4 000 00 00 0 00 0 0 globaali syvyys 000 00 00 0 00 0 0 globaali syvyys lisätään: 000 000 00 00 00 000 000 00 0 000 00 00 00 000 00 000 000 0 siirretään ne, joilla. viimeinen bitti on siirretään ne, joilla. viimeinen bitti on vanhan ja uuden paikallinen syvyys vaihdetaan ne soluosoittimet, joiden indeksi loppuu..0 osittamaan uuteen 4 6

Esimerkki : 4/4 Laajeneva hajautus 000 00 00 0 00 0 0 000 00 000 00 00 00 globaali syvyys 000 000 0 Rakenne laajenee sykäyksittäin Jos jakokohtaan osuvissa avaimissa on yhtenäinen bittisekvenssi, voidaan joutua tekemään monta jakoa ennen kuin tietueet saadaan jaettua Jos soluhakemisto kasvaa isoksi eikä sitä voida pitää keskusmuistissa voidaan hakuun tarvita levyhakua Jako ja tuplaus voivat edellyttää useita hakuja. siirretään ne, joilla. viimeinen bitti on vaihdetaan ne soluosoittimet, joiden indeksi loppuu..0 osittamaan uuteen 5 6 Lineaarisessa hajautuksessa (kotimaista alkuperää Per Larsson) ei välttämättä tarvita soluhakemistoa. Hajautusaluetta laajennetaan solu kerrallaan jakamalla jakovuorossa olevan solun sisältö solun itsensä ja uuden solun kesken. Solut saavat jakovuoronsa järjestyksessä, eikä jaettava solu ole suinkaan välttämättä se jonka kohdalla ylivuoto tapahtuu soluihin voidaan ylivuotavia tietueita varten liittää ylivuotolista. Solun osoitteen määräämiseksi käytössä on sarja hajauttimia h 0,h,h,... Nämä ovat muotoa h i = hh(k) mod ( i i N). N voidaan valita kakkosen potenssiksi d, tällöin h i eristäisi d+i bittiä perushajauttimen tuottaman arvon lopusta. jos d=5, niin h 0 eristää 5 bittiä, h 6 bittiä jne tietueen haussa tarvitaan perushajauttimen lisäksi kahta hajautinta h taso ja h taso+ 7 8 7

Haku laske osoite h taso (h(k)), eli ota d+taso bittiä lopusta jos kyseessä on jakamaton solu, etsi tietuetta solusta. jos kyseessä on jaettu solu muodosta uusi osoite h taso+ (h(k)), eli ota d++taso bittiä lopusta etsi tietuetta saadusta solusta Solu on jakamaton, jos sen indeksi on suurempi tai yhtä suuri kuin jakovuorossa olevan solun indeksi. Olkoon d=, taso=, eli h antaa osoitteet 0..7 ja h osoitteet 0..5 jaettuja jakovuorossa jaon tuloksena syntyneitä seuraavan tason soluja 9 0 Lisäyksessä, solmu lisätään haun määräämään lohkoon Jos solmu ei mahdu kotilohkoon, se lisätään ylivuotoketjuun. Ylivuoto käynnistää jako-operaation. Olkoon jakovuorossa olevan solun taso+d bitistä muodostuva osoite {b}. Otetaan käyttöön uusi solu jonka osoite on {b}. jakovuorossa olevan solun tietueet jaetaan alkuperäisen soluun ja uuden solun kesken käyttäen hajautinta h taso+. Jos jakovuorossa oli tason viimeinen solu siirtyy jakovuoro soluun 0 ja tasoa kasvatetaan yhdellä, muuten jakovuoro siirtyy seuraavaan soluun. Olkoon d=, taso=, eli h antaa osoitteet 0..7 ja h osoitteet 0..5 jaettuja jakovuorossa jaon vastaanottajat 8

Kullakin tasolla jaetaan vuorollaan jokainen tason solu. Kun kaikki on jaettu, on hajautusalue tuplautunut ja siirrytään seuraavalle tasolle. Rakenteessa voi olla pitkiäkin ylivuotoketjuja, mutta ne lyhenevät kun taso kasvaa. 9