Hakupuut muistihierarkiassa



Samankaltaiset tiedostot
Hakupuut muistihierarkiassa

arvostelija OSDA ja UDDI palveluhakemistoina.

Algoritmit 2. Luento 4 To Timo Männikkö

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.

Selainpelien pelimoottorit

Tietorakenteet, laskuharjoitus 7, ratkaisuja

Lyhimmän polun etsintä verkossa muistihierarkiatehokkaasti

Johnson, A Theoretician's Guide to the Experimental Analysis of Algorithms.

Department of Mathematics, Hypermedia Laboratory Tampere University of Technology. Roolit Verkostoissa: HITS. Idea.

Algoritmit 2. Luento 2 To Timo Männikkö

Arkkitehtuurinen reflektio

Algoritmit 2. Luento 2 Ke Timo Männikkö

Algoritmit 2. Luento 4 Ke Timo Männikkö

PN-puu. Helsinki Seminaari: Tietokannat nyt HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

Algoritmit 2. Luento 6 Ke Timo Männikkö

Algoritmit 2. Luento 5 Ti Timo Männikkö

Kuva 1: J+-puun rakenne [HXS09].

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

Miten käydä läpi puun alkiot (traversal)?

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

Aika/Datum Month and year Kesäkuu 2012

Pinot, jonot, yleisemmin sekvenssit: kokoelma peräkkäisiä alkioita (lineaarinen järjestys) Yleisempi tilanne: alkioiden hierarkia

AVL-puut. eräs tapa tasapainottaa binäärihakupuu siten, että korkeus on O(log n) kun puussa on n avainta

Algoritmit 2. Luento 5 Ti Timo Männikkö

Hakupuut. tässä luvussa tarkastelemme puita tiedon tallennusrakenteina

Algoritmit 2. Luento 7 Ti Timo Männikkö

Mukautuvat järjestämisalgoritmit

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

Maailman muutosta tallentamassa Marko Vuokolan The Seventh Wave -valokuvasarja avauksena taidevalokuvan aikaan

Pro gradu -tutkielma Meteorologia SUOMESSA ESIINTYVIEN LÄMPÖTILAN ÄÄRIARVOJEN MALLINTAMINEN YKSIDIMENSIOISILLA ILMAKEHÄMALLEILLA. Karoliina Ljungberg

Työn laji Arbetets art Level Aika Datum Month and year Sivumäärä Sidoantal Number of pages

D B. Harvat hakemistot. Harvat hakemistot

Koht dialogia? Organisaation toimintaympäristön teemojen hallinta dynaamisessa julkisuudessa tarkastelussa toiminta sosiaalisessa mediassa

B + -puut. Kerttu Pollari-Malmi

Binäärihaun vertailujärjestys

Algoritmit 1. Luento 3 Ti Timo Männikkö

Algoritmit 2. Luento 6 To Timo Männikkö

Algoritmit 1. Luento 6 Ke Timo Männikkö

Simulation model to compare opportunistic maintenance policies

Algoritmit 1. Luento 7 Ti Timo Männikkö

Julkaisufoorumin kuulumiset

Computing Curricula raportin vertailu kolmeen suomalaiseen koulutusohjelmaan

Dominointianalyysi. Teppo Niinimäki. Helsinki Approksimointialgoritmit HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

Tietokannan eheysrajoitteet ja niiden määrittäminen SQL-kielellä

A TIETORAKENTEET JA ALGORITMIT

Katsaus korruption vaikutuksesta Venäjän alueelliseen talouskasvuun ja suoriin ulkomaisiin investointeihin

Luonnontieteiden popularisointi ja sen ideologia

Kahden virtualisointiohjelmiston suorituskyvyn testaus (valmiin työn esittely)

Kierros 4: Binäärihakupuut

Algoritmit 1. Luento 8 Ke Timo Männikkö

Tehostettu kisällioppiminen tietojenkäsittelytieteen ja matematiikan opetuksessa yliopistossa Thomas Vikberg

Tyyppiluokat II konstruktoriluokat, funktionaaliset riippuvuudet. TIES341 Funktio-ohjelmointi 2 Kevät 2006

Laskennallinen yhteiskuntatiede

Algoritmit 2. Luento 3 Ti Timo Männikkö

CS-A1140 Tietorakenteet ja algoritmit

Tietokoneen muisti nyt ja tulevaisuudessa. Ryhmä: Mikko Haavisto Ilari Pihlajisto Marko Vesala Joona Hasu

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

Algoritmit 2. Luento 3 Ti Timo Männikkö

Tietorakenteet ja algoritmit Hakurakenteet Ari Korhonen

7. Tasapainoitetut hakupuut

Tietorakenteet, laskuharjoitus 6,

! #! %! & #!!!!! ()) +

SSD-tietoiset hakemistorakenteet

Tietorakenteet ja algoritmit - syksy

Minimilatenssiongelman ratkaisualgoritmeja (valmiin työn esittely)

Bachelor level exams by subject in Otaniemi

Hallintomallit Suomen valtionhallinnon tietohallintostrategioissa

58131 Tietorakenteet ja algoritmit (kevät 2016) Ensimmäinen välikoe, malliratkaisut

Tietorakenteet ja algoritmit

TAMPEREEN TEKNILLINEN YLIOPISTO

Tietorakenteet ja algoritmit

Algoritmit 2. Luento 9 Ti Timo Männikkö

ALGORITMIT 1 DEMOVASTAUKSET KEVÄT 2012

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

TAMPEREEN TEKNILLINEN YLIOPISTO

Bachelor level exams by date in Otaniemi

Oppimateriaalin kokoaminen ja paketointi

58131 Tietorakenteet ja algoritmit Uusinta- ja erilliskoe ratkaisuja (Jyrki Kivinen)

58131 Tietorakenteet (kevät 2008) 1. kurssikoe, ratkaisuja

Muita rekisteriallokaatiomenetelmiä

Puuhakemistoista flash-levyllä

Tietorakenteet ja algoritmit Johdanto Lauri Malmi / Ari Korhonen

Luento 2: Tiedostot ja tiedon varastointi

3. Binääripuu, Java-toteutus

Simulation and modeling for quality and reliability (valmiin työn esittely) Aleksi Seppänen

Luku 8. Aluekyselyt. 8.1 Summataulukko

TKT20001 Tietorakenteet ja algoritmit Erilliskoe , malliratkaisut (Jyrki Kivinen)

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

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

811312A Tietorakenteet ja algoritmit, , Harjoitus 7, ratkaisu

2. Seuraavassa kuvassa on verkon solmujen topologinen järjestys: x t v q z u s y w r. Kuva 1: Tehtävän 2 solmut järjestettynä topologisesti.

811312A Tietorakenteet ja algoritmit II Perustietorakenteet

Tiedekunta/Osasto Fakultet/Sektion Faculty Valtiotieteellinen tiedekunta

Joonas Haapala Ohjaaja: DI Heikki Puustinen Valvoja: Prof. Kai Virtanen

TAMPEREEN TEKNILLINEN YLIOPISTO Digitaali- ja tietokonetekniikan laitos. Harjoitustyö 4: Cache, osa 2

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

DBN Mitä sillä tekee? Dynaamisten Bayes-verkkojen määrittely aikasarja-analyysissä Janne Toivola

811312A Tietorakenteet ja algoritmit III Lajittelualgoritmeista

f(n) = Ω(g(n)) jos ja vain jos g(n) = O(f(n))

oheishakemistoja voi tiedostoon liittyä useita eri perustein muodostettuja

Transkriptio:

hyväksymispäivä arvosana arvostelija Hakupuut muistihierarkiassa Paavo Koskinen Helsinki 11.6.2011 Pro gradu -tutkielma HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

HELSINGIN YLIOPISTO HELSINGFORS UNIVERSITET UNIVERSITY OF HELSINKI Tiedekunta Fakultet Faculty Laitos Institution Department Matemaattis-luonnontieteellinen Tekijä Författare Author Paavo Koskinen Työn nimi Arbetets titel Title Tietojenkäsittelytieteen laitos Hakupuut muistihierarkiassa Oppiaine Läroämne Subject Tietojenkäsittelytiede Työn laji Arbetets art Level Aika Datum Month and year Sivumäärä Sidoantal Number of pages Pro gradu -tutkielma 11.6.2011 53 sivua Tiivistelmä Referat Abstract Algoritmien suoritusajasta kuluu usein merkittävä osa datan siirtelyyn muistihierarkian kerrosten välillä. Ongelma korostuu hakurakenteilla, sillä ne käsittelevät suuria datamääriä. Työn päämääränä on selvittää muistisiirtojen minimoinnilla saavutettavat käytännön edut hakupuiden tapauksessa. Toinen päämäärä on kartoittaa ideaalisen välimuistin malliin perustuvien parametrittomien hakupuiden etuja ja heikkouksia ulkoisen muistin malliin perustuviin parametrillisiin hakupuihin nähden. Parametrittomuus tarkoittaa, ettei algoritmi tiedä käytetyn suunnittelumallin parametreja, kuten välimuistin kokoa. Staattisista hakupuista tarkastellaan leveyssuuntaiseen järjestykseen, esijärjestykseen ja van Emde Boas -järjestykseen tallennettuja binäärihakupuita sekä staattista B- puuta. Dynaamisista hakupuista käsitellään B + -puuta sekä parametritonta B-puuta, COB-puuta. Sekä parametrittomat että parametrilliset hakupuut pyrkivät minimoimaan vaadittavaa muistisiirtojen määrää parantamalla laskennan paikallisuutta. Käsiteltävien hakupuiden käytännön nopeutta testataan monipuolisesti. Saatujen tulosten nojalla sekä staattiset että dynaamiset parametrittomat hakupuut pärjäävät satunnaisoperaatioiden nopeudessa vastaaville parametrillisille hakupuille. Ne jäävät kuitenkin jonkin verran jälkeen perättäisoperaatioita suoritettaessa. ACM Computing Classification System (CCS): E.1 [DATA STRUCTURES] Trees E.5 [FILES] Sorting/searching H.3.2 [INFORMATION STORAGE AND RETRIEVAL]: Information Storage File organization H.3.3 [INFORMATION STORAGE AND RETRIEVAL]: Information Search and Retrieval Avainsanat Nyckelord Keywords hakupuu, ideaalisen välimuistin malli, B + -puu, COB-puu, van Emde Boas -järjestys Säilytyspaikka Förvaringsställe Where deposited Kumpulan tiedekirjasto, sarjanumero C- Muita tietoja övriga uppgifter Additional information

Sisältö ii 1 Johdanto 1 1.1 Käytetyt merkinnät............................ 3 2 Algoritmien suunnittelumallit 3 2.1 RAM-malli................................ 4 2.2 Ulkoisen muistin malli.......................... 4 2.3 Ideaalisen välimuistin malli....................... 5 2.4 Hierarkkisen muistin malli........................ 6 3 Staattiset hakupuut 7 3.1 Hakupuun määritelmä ja muodot.................... 7 3.2 Leveyssuuntainen järjestys........................ 8 3.3 Esijärjestys................................ 9 3.4 Van Emde Boas -järjestys........................ 10 3.5 Van Emde Boas -indeksin laskeminen.................. 12 3.6 Staattinen B-puu............................. 14 3.7 Staattisen B-puun muodostaminen................... 15 3.8 Arvojen tallennus............................. 16 4 Staattisten hakupuiden tulokset 17 4.1 Testiasetelma ja -ympäristö....................... 17 4.2 Satunnaishaut............................... 18 4.3 Perättäishaut............................... 22 5 B + -puut 24 5.1 Haku.................................... 26 5.2 Alkion lisäys................................ 26 5.3 Alkion poisto............................... 29 5.4 Aluehaku................................. 30

iii 6 Pakatun muistin taulukko 30 6.1 Alkion lisäys................................ 31 6.2 Alkion poisto............................... 33 6.3 Haku.................................... 33 6.4 Tiheysrajojen valinta........................... 34 6.5 Optimointeja............................... 35 7 COB-puut 36 7.1 Haku.................................... 37 7.2 Aluehaku................................. 38 7.3 Alkion lisäys................................ 38 7.4 Alkion poisto............................... 39 8 Dynaamisten hakupuiden tulokset 39 8.1 Testiasetelma ja -ympäristö....................... 40 8.2 Lisäykset................................. 40 8.3 Haut.................................... 43 8.4 Poistot................................... 45 8.5 Muiden tuloksia.............................. 48 9 Yhteenveto 49 Lähteet 51

1 Johdanto 1 Nykyaikaisen tietokoneen muistihierarkia koostuu monesta kerroksesta. Tavallisia kerroksia ovat ainakin suorittimen rekisterit ja kolme eritasoista välimuistia, keskusmuisti ja kiintolevy tai SSD-massamuisti. Näiden lisäksi eri laitteilla, kuten massamuistilla ja DVD-asemilla, on omat välimuistinsa. Erot muistitasojen nopeuksissa ovat huomattavia, mikä korostuu erityisesti keskusmuistin ja kiintolevyn välillä. Kun samalla suorittimet nopeutuvat muistitasoja kovempaa tahtia, yhä suurempi osa algoritmien suoritusajasta kuluu datan siirtelyyn muistitasolta toiselle. Koska datan siirtely käy laskentaan nähden aina vain kalliimmaksi, erityisesti paljon muistisiirtoja vaativien algoritmien kohdalla siirtojen määrän minimointi vaikuttaa hyvältä päämärältä. Tällaisia algoritmiryhmiä ovat esimerkiksi järjestysalgoritmit ja tietorakenteiden algoritmit. Tässä työssä käsitellään muistihierarkiaa tehokkaasti hyödyntäviä hakurakenteita. Ehkä yleisin ja yksi vanhimmista muistisiirtojen määrää minimoivista hakurakenteista on B-puu [BM72] useine muunnoksineen. B-puut hyödyntävät sitä seikkaa, että siirrot eri muistihierarkian kerrosten välillä tapahtuvat yleensä usean alkion lohkoissa. Tavanomaisemmista binäärihakupuista poiketen B-puun solmuilla on useita arvoja ja lapsia. Kun solmut ovat samaa kokoluokkaa kuin kerralla siirrettävä lohko, saadaan puuta madallettua käytännössä ilmaiseksi. Lisäys-, poisto- ja hakuoperaatiot vaativat B-puissa luokkaa O(log B n) muistisiirtoa, missä B on lohkoon mahtuvien alkioiden määrä ja n puuhun tallennettujen alkioiden määrä. Puut tukevat lisäksi tehokkaita aluehakuja. Aluehaku palauttaa kaikki rakenteeseen tallennetut alkiot annetulta arvoväliltä. Tavallisissa B-puissa solmut pidetään vähintään puolillaan. Rakenteesta on myös muunnos B -puu [Knu98], jossa solmujen täyttöaste on vähintään 2/3. Ehkä yleisin B-puun versio on B + -puu, jossa varsinaiset data-alkiot tallennetaan puun lehtisolmuihin. Puun sisäsolmut toimivat vain eräänlaisena ohjausrakenteena. Ratkaisu yksinkertaistaa lisäys-, poisto- ja aluehakuoperaatioita sekä madaltaa puuta. Puun madaltuminen johtuu siitä, ettei sisäsolmuihin tarvitse tallentaa avaimiin liitettäviä arvoja. Termiä B -puu on käytetty myös B + -puusta [Com79] sekä B + -puun ja B -puun yhdistelmästä [Vit06]. Edellä mainittujen melko suoraviivaisten muunnosten lisäksi B-puista on kehitetty erikoisempiakin versioita: Litwin ja Lomet [LL87] yhdistivät B-puun ja hajautus-

2 taulun. O Neil on kehittänyt erityisesti aluehakuja optimoivan SB-puun [O N92], joka perustuu solmujen rypästämiseen kiintolevyllä. Huang ym. [yhshfc + 09] ovat vuorostaan esittäneet nimeltään samankaltaisen staattisen S-B-puun. B-puita on sovellettu Ferraginan ja Grossin [FG99] toimesta merkkijono-b-puussa myös vaihtuvanmittaisten avainten tapaukseen. Huomattavasti laajempi listaus B-puun muunnoksista löytyy esimerkiksi Vitterin artikkelista [Vit06]. B-puiden ongelmana on, että käytettävä solmukoko joudutaan määrittelemään laitteistokohtaisesti, jotta rakenne toimisi tehokkaasti. Toinen B-puiden heikkous on, että ne optimoivat muistisiirtojen määrää vain kahden muistihierarkian kerroksen välillä; yleensä keskusmuistin ja kiintolevyn. Nykyään on kuitenkin olemassa myös hakurakenteita, jotka hyödyntävät tehokkaasti kaikkia muistihierarkian tasoja tarvitsematta laitteistoriippuvaisia parametreja. Bender ym. [BDFC05] esittivät ensimmäisinä tällaisen tietorakenteen, COB-puun eli parametrittoman B-puun. Se on kuitenkin hyvin monimutkainen. Rakenteesta on myöhemmin kehitetty useita yksinkertaistettuja ja muunneltuja versioita [BFJ02, Kas04, BDIW04, BFCK06]. Kaikki listatut rakenteet perustuvat Frigon ym. kehittämään [FLPR99] ideaalisen välimuistin malliin. Tässä työssä esitellään tarkemmin perinteisen B-puun muunnelma B + -puu. Lisäksi parametrittomista, muistihierarkiaa tehokkaasti käyttävistä hakupuista esitellään Kasheffin [Kas04] yksinkertaistettuun versioon perustuva COB-puun versio. Puun käyttäytymiseen liittyvien tiheysparametrien valinta analysoidaan aiempia töitä tarkemmin. Työssä tarkastellaan myös rakenteiden tehokkuutta käytännössä. Ennen dynaamisia rakenteita työssä tarkastellaan yksinkertaisempia staattisia hakupuita. Tässä staattisuus tarkoittaa sitä, ettei rakenteeseen voida lisätä tai siitä poistaa alkioita sen luonnin jälkeen. Vastapainoksi staattiset rakenteet ovat tavallisesti dynaamisia rakenteita yksinkertaisempia ja tehokkaampia. Työssä esitellään useampi versio binäärihakupuusta sekä implisiittinen B-puu. Binääripuista Prokopin van Emde Boas -järjestykseen [Pro99] perustuva versio on oleellisessa osassa myös myöhemmin esiteltävässä COB-puussa. Myös staattisten hakupuiden käytännön tehokkuutta vertaillaan. Työssä esitellään lyhyesti algoritmien suunnittelussa ja analysoinnissa käytettäviä muistihierarkiamalleja. Malleista esitellään ideaalisen välimuistin mallin lisäksi myös Aggarwalin ja Vitterin perinteinen kaksitasoinen ulkoisen muistin malli [AV88] sekä Aggarwalin ym. hierarkkisen muistin malli [AACS87]. Työllä on kaksi ensisijaista päämäärää. Ensimmäinen päämääristä on selvittää muistihierarkian huomioinnil-

3 la saavutettavat käytännön edut hakupuiden tapauksessa. Toisena päämääränä on kartoittaa ideaalisen välimuistin malliin perustuvan COB-puun mahdollisia etuja ja heikkouksia perinteisempään B + -puuhun nähden. Luvussa 1.1 listataan työssä käytettäviä merkintöjä. Luvussa 2 esitellään algoritmien suunnittelumalleista RAM-malli, ulkoisen muistin malli, ideaalisen välimuistin malli sekä hierarkkisen muistin malli. Luvussa 3 esitellään testattavat staattiset hakupuut ja luvussa 4 esitellään ja analysoidaan niille saatuja tuloksia. Luvussa 5 esitellään dynaaminen ja parametrillinen B + -puu. Luvussa 6 esitellään COB-puun tärkeä rakennusosa, pakatun muistin taulukko. Luvussa 7 esitellään dynaaminen ja parametriton COB-puu. Luvussa 8 käsitellään dynaamisille hakurakenteille saatuja tuloksia. Lopulta luvussa 9 tehdään yhteenveto saaduista tuloksista. 1.1 Käytetyt merkinnät Tässä työssä on pyritty käyttämään yhdenmukaisia ja vakiintuneita merkintöjä tietorakenteiden kuvauksissa ja analyyseissä. Alla olevaan taulukkoon on listattu osa käytetyistä merkinnöistä selityksineen. T Hakupuu itse n Puuhun tallennettujen avainten lukumäärä N Puun solmujen lukumäärä u Solmuun u mahtuvien avainten lukumäärä d Solmun etäisyys puun juuresta, juurella d = 0 h Puun korkeus, lehtisolmuilla d = h C Välimuistin lohkojen lukumäärä B Välimuistilohkon koko 2 Algoritmien suunnittelumallit Tässä luvussa esitellään algoritmien suunnittelussa ja analysoinnissa käytettäviä malleja. Mallien tarkoitus on idealisoida tietokone ilman algoritmien analyysin kannalta epäoleellisia osia. Tällöin niiden tehokkuutta voidaan arvioida helpommin matemaattisin keinoin. Mallin kehityksessä on oleellista löytää tarkoitukseen sopiva idealisoinnin taso: Mitä yksinkertaisempi malli on, sitä helpompaa algoritmeja on analysoida sen puitteissa. Toisaalta liikaa yksinkertaistetussa mallissa tehty analyysi ei välttämättä vastaa

4 enää riittävän tarkasti todellisuutta. Ensimmäisessä aliluvussa 2.1 esitellään perinteinen RAM-malli. Toisessa aliluvussa 2.2 esitellään datan siirtoon keskittyvä I/O-malli. Aliluvussa 2.3 esitellään monitasoisen muistihierarkian käsittelyyn suunniteltu ideaalisen välimuistin malli. Viimeisessä aliluvussa 2.4 esitellään vielä Aggarwalin ym. hierarkkisen välimuistin malli. 2.1 RAM-malli RAM-malli [AHU74] on yksi vanhimmista ja yleisimmin käytetyistä algoritmien suunnittelumalleista. Siinä mitataan ainoastaan algoritmin suorituksen vaatimien konekäskyjen määrää. Tavallisesti käskyjen määrä suhteutetaan esimerkiksi annetun syötteen suuruuteen tai muuhun ominaisuuteen. Pienehköillä syötteillä RAM-mallin tarjoama nopeusarvio on usein riittävä. Oleellista on, että sekä algoritmin syöte että mahdolliset apurakenteet mahtuvat kerralla keskusmuistiin. Suuremmilla syötteillä muistisiirrot, erityisesti kiintolevyn ja keskusmuistin välillä, voivat viedä viedä hyvin suuren osan algoritmin suoritusajasta. Tällöin RAM-mallin nopeusarvio ei välttämättä enää vastaa käytännön mittaustuloksia. 2.2 Ulkoisen muistin malli Nykyaikaisen tietokoneen muistihierarkia koostuu monesta kerroksesta. Tavallisesti hierarkiasta löytyvät ainakin suorittimen rekisterit ja kolme eritasoista välimuistia, keskusmuisti sekä kiintolevy tai SSD-massamuisti. Näiden lisäksi eri laitteilla, kuten massamuistilla ja DVD-asemilla, on omat välimuistinsa. Erot muistitasojen nopeuksissa ovat huomattavia. Tämä korostuu erityisesti keskusmuistin ja kiintolevyn välillä. Kun samalla suorittimet nopeutuvat muistitasoja kovempaa tahtia, yhä suurempi osa algoritmien suoritusajasta kuluu datan siirtelyyn muistitasolta toiselle. Yhteistä muistihierarkian eri kerroksille on, että data siirretään näiden välillä lohkoina. Lohkon koot voivat vaihdella tasoittain. Siirtolohkon koko voi vaihtua myös tason sisällä: esimerkiksi kiintolevyllä levyn sisäreunan lohkot ovat ulkoreunaa pienempiä. Aggarwalin ja Vitterin [AV88] esittelemä ulkoisen muistin malli (External-Memory Model) vähentää muistitasot kahteen. Mallissa lasketaan suoritettujen konekäskyjen

47 1200 1000 800 600 b puu 31 b puu 63 b puu 127 cob pieni 0,33 cob pieni 0,50 cob pieni 0,67 cob suuri 0,20 cob suuri 0,25 cob suuri 0,30 bdb b puu 400 200 0 300000 250000 200000 150000 100000 50000 0 Kuva 23: Kasvavassa järjestyksessä suoritettujen poistojen kesto. Vaaka-akselin arvot kuvaavat puussa jäljellä olevien alkioiden määrää. Aikayksikkönä sekunti. kuvaajassa taas selvinä portaina. B + -puilla poistot ovat sen sijaan nopeimmillaan pienimmissä ja suurimmissa puissa ja selvästi hitaampia ääripäiden välillä. Eri solmukokoja käyttävien B + -puiden keskinäinen järjestys kääntyy 170 000 alkion paikkeilla. Suurilla alkiomäärillä solmukoon kasvattaminen vain hidastaa poistoja. Tämä johtunee solmujen välisen alkioiden siirtelyn hintavuudesta: solmukoon kasvaessa sisarussolmujen tasaamiseen tarvitaan kasvava määrä muistisiirtoja. Keskusmuistiin mahduttaessa puurakenteen päivittäminen muodostunee vuorostaan pullonkaulaksi. Tällöin suureen solmukokoon liittyvä puun mataluus parantaa tehokkuutta. B + -puista poiketen bdb-b-puu käyttäytyy satunnaispoistotestissä melko tasaisesti. Pienemmillä puilla rakenne jää selvästi joukon hännille, mutta alkiomäärien kasvaessa bdb-b-puu ohittaa kaikki testin B + -puut ja pääsee lähelle suurilehtisten COBpuiden nopeutta. Käyttäytyminen saattaa olla joko ominaista Berkeley DB:n käyttämälle B-puuvariantille tai johtua esimerkiksi B + -puutoteutuksista poikkeavasta solmujentasauslogiikasta.

48 Kun alkiot poistetaan rakenteista avaimen mukaan kasvavassa järjestyksessä, kääntyy tilanne taas perinteisempien B-puuvarianttien eduksi. Hajautukseen perustuva bdb-hajautus ei hyödynnä operaatioiden paikallisuutta, eikä siksi ole mukana vertailussa. Kaikenkaikkiaan tilanne vastaa hyvin pitkälti perättäislisäysten tapausta, kuten nähdään vertaamalla kuvia 23 ja 20. COB-puut ovat taas koonmuutosten korostumisen takia joukon hännillä B + -puiden dominoidessa liki kaikilla alkiomäärillä. Ehkä silmiinpistävin asia kuvassa 23 on tiheysparametrilla ρ = 0,20 varustettujen COB-puiden hitaus. Heikko suoritus johtuu molemmilla lähinnä siitä, että ensimmäinen rakenteen pienennys tehdään vasta hyvin myöhään. Ero tiukkarajaisempiin COB-puihin on kuitenkin yllättävän suuri, kun muissa testeissä tiheysparametrien vaikutus on ollut suhteellisen pieni. COB-puiden käyttäytyminen on perättäispoistojen tapauksessa muutenkin aiemmista testeistä poikkeavaa: suurilla puilla cob-suuri-0,25 pärjää tiukkarajaisempaa cob-suuri-0,30-puuta paremmin. Sama pätee myös puille cob-pieni-0,25 ja cob-pieni- 0,30. Tulos on ollut myös toistettavissa, sillä järjestys on toteutunut kaikilla testikierroksilla. Järjestys on päinvastainen kuin satunnaispoistojen tapauksessa. Hieman vastaava vaihto tapahtuu kuitenkin myös satunnaislisäysten tapauksessa puiden cobpieni-0,33 ja cob-pieni-0,50 välillä. 8.5 Muiden tuloksia Parametrittomia hakupuita on testattu aiemminkin. Kassheff [Kas04] on suorittanut testejä esiteltyä vastaavalle COB-puurakenteelle. Juurisolmun maksimitiheysparametri on näissä testeissä τ 0 = 0,5 ja koonmuutoskerroin a = 2. Avainten koko on 520 tavua. Testeissä tutkitaan vain lisäysoperaatioiden nopeutta. Keskusmuistiin mahtuvan 40 000 alkion lisääminen satunnaisjärjestyksessä vie COBpuulta noin 48 % verrokkina toimineen B-puun käyttämästä ajasta. Järjestyksessä lisättäessä COB-puu jää jälkeen ja käyttää noin 39 % enemmän aikaa kuin B-puu. Kun alkioita lisätään 160 000, eivät rakenteet mahdu enää keskusmuistiin. Tällöin COB-puu käyttää satunnaislisäyksiin vain 32 % B-puun käyttämästä ajasta. Perättäisjärjestyksessä B-puu vie taas voiton ja COB-puu käyttää yli 3,2 kertaisen ajan B-puuhun nähden. Kuitenkaan edes B-puu ei aivan pärjää verrokkina toimineelle Berkeley DB:lle. Erot Kassheffin ja omien tuloksieni välillä johtunevat toteutusyksityiskohdista sekä rakenteiden optimointitasoista. Kassheff ei myöskään kerro tarkemmin millaista B-

49 puuvarianttia verrokkina käytetään. Myös testiympäristöt ja esimerkiksi käytetyt kääntäjäversiot voivat vaikuttaa tuloksiin. Myös Brodal ym. [BFJ02] ovat testanneet omaa parametritonta hakupuutaan. Rakenne perustuu siihen, että dynaaminen hakupuu sisällytetään täydelliseen staattiseen hakupuuhun. Dynaamisen hakupuun korkeus saa poiketa korkeintaan vakiolla saman kokoisen täydellisen hakupuun korkeudesta. Staattisena puuna voidaa käyttää esimerkiksi van Emde Boas -järjestykseen tallennettua puuta. Brodal ym. eivät vertaa rakennettaan B-puuhun. Sen sijaan he käyttävät erilaisia staattisia hakupuita, joita vertaillaan keskenään. Lisäystesteissä van Emde Boas -järjestys pärjää äärimmäisen hyvin: keskusmuistissa se kilpailee tasaväkisesti leveyssuuntaisen järjestyksen kanssa ja kiintolevylle jouduttaessa staattisen B-puun. Toisin sanoen van Emde Boas -järjestys on aina vähintään kärjen tuntumassa. Harmi kyllä Brodalin ym. testit eivät paljasta kuinka hyvin heidän hakurakenteensa pärjäisi perinteisille B-puutoteutuksille. 9 Yhteenveto Työssä esiteltiin lyhyesti eri algoritmien suunnittelumalleja. Näistä ulkoisen muistin mallia sekä ideaalisen välimuistin mallia käytettiin esiteltyjen tietorakenteiden analyysissä. Ideaalisen välimuistin mallia sovelletaan parametrittomien algoritmien ja tietorakenteiden suunnitteluun. Ulkoisen muistin malli on sen sijaan tarkoitettu mallin parametrit tietäville algoritmeille. Parametrittomien algoritmien etuna on niiden hyvä siirrettävyys ja koko muistihierarkian automaattinen hyödyntäminen. Pääaiheena työssä olivat mainittuihin suunnittelumalleihin perustuvat staattiset ja dynaamiset hakupuut. Staattisista rakenteista esiteltiin leveyssuuntaiseen järjestykseen, esijärjestykseen ja van Emde Boas -järjestykseen tallennetut binäärihakupuut sekä staattinen B-puu. Keskusmuistiin mahduttaessa voiton veivät kaikkein yksinkertaisimmat puut: leveyssuuntaiseen järjestykseen tallennettu binäärihakupuu sekä staattiset B-puut. Leveyssuuntaisen järjestyksen etuna on nimensä mukainen lohkojen leveyssuuntaisuus, minkä ansiosta puun yläosa pysyy välimuistissa. Sama pätee pienemmässä määrin myös pienisolmuisille staattisille B-puille. Myös esijärjestykseen ja van Emde Boas -järjestykseen tallennetut binääripuut pärjäsivät hyvin kilvassa, kun puut eivät enää mahtuneet keskusmuistiin. Sen sijaan leveyssuuntaiseen järjestykseen tallennettu binääripuu jäi selvästi joukon hitaimmak-

50 si. Suurten staattisten hakupuiden kohdalla muistisiirtojen minimointi on tulosten perusteella erittäin hyödyllistä. Parametrittomat rakenteet voivat myös olla kilpailukykyisiä perinteisiin parametrillisiin ratkaisuihin nähden. Lisäksi huomataan, että on edullista pitää mahdollisimman korkea yläpuu rakenteesta aina keskusmuistissa. Dynaamisista rakenteista työssä esiteltiin B-puun ehkä yleisin muunnos, B + -puu, sekä parametriton B-puu, COB-puu. Molempia testattiin eri parametreilla: B + -puita testattiin kolmella eri solmukoolla ja COB-puita kahdella solmukoonlaskukaavalla ja kolmilla tiheysrajaparametreilla. Satunnaisoperaatioilla COB-puut pärjäsivät sekä lisäyksissä, poistoissa että hauissa hyvin B-puille: pienilehtiset COB-puut voittivat nämä suurilla alkiomäärillä kaikissa kategorioissa. B + -puut olivat omimmillaan kasvavassa järjestyksessä suoritetuissa lisäys- ja poistooperaatioissa. Niissä kaikki B + -puut voittivat COB-puiden lisäksi verrokkina olleen Berkeley DB -tietokannan selvällä marginaalilla. Erityisesti pienilehtiset COB-puut pärjäsivät huonosti perättäisoperaatioissa indeksipuun päivittämiseen liittyvän ylläpitotyön takia. Suurilehtiset COB-puut pärjäsivät testeissä kohtuullisen hyvin kaikilla paitsi suurimmilla alkiomäärillä. Testitulokset osoittavat COB-puiden olevan satunnaisoperaatioilla hyvin kilpailukykyisiä parametrillisille hakurakenteille. Erityisesti paljon poistoja ja hakuja tehtäessä pienilehtiset COB-puut ovat elementissään. Tällainen tilanne syntyy esimerkiksi, mikäli kaikki rakenteeseen tallennettava data on jo valmiiksi olemassa ja järjestyksessä. COB-puu saadaan luotua yksinkertaisesti rakentamalla datan sisältävälle taulukolle indeksipuu. Myös B + -puu voidaan rakentaa helposti järjestetystä datasta lisäämättä alkioita puuhun yksi kerrallaan. Kilpailukykyisen nopeuden lisäksi COB-puilla on etunaan parametrittomuudesta johtuva hyvä siirrettävyys. Vaikka eri solmukoon B + -puut pärjäsivätkin testeissä suunnilleen yhtä hyvin, täytyisi solmukoko valita uudelleen siirryttäessä lohkokooltaan merkittävästi erilaiseen muistihierarkiaan. Myös olemassa olevan tietorakenteen siirtäminen ympäristöstä toiseen on hankalaa, sillä solmukoon muuttaminen vaatii koko puun rakentamisen uudelleen. COB-puiden tiheysparametreja voidaan sen sijaan muuttaa helposti lennossa ja lehtien kokoakin indeksipuun rakennuksen yhteydessä. COB-puihin ja yleisemmin parametrittomiin hakurakenteisiin liittyy useita avoimia tutkimuskohteita. Yksi merkittävä päämäärä olisi kehittää myös pahimman tapauksen työ- ja muistisiirtovaativuuksiltaan hyvä parametriton hakurakenne. COB-puun tapauksessa lisäyksille ja poistoille annetaan vain operaatiojonon yli tasoitetut vaa-

tivuusluokat. Myös van Emde Boas -indeksien laskenta-algoritmin optimointi voisi tehostaa erityisesti keskusmuistiin mahtuvia rakenteita. 51 Lähteet AACS87 ACS87 AHU74 AV88 BCD + 02 BDFC05 BDIW04 BFCK06 Aggarwal, A., Alpern, B., Chandra, A. K. ja Snir, M., A model for hierarchical memory. Proceedings of the 19th Annual ACM Symposium on Theory of Computing, STOC 87, New York, NY, USA, 1987, ACM, sivut 305 314. Aggarwal, A., Chandra, A. K. ja Snir, M., Hierarchical memory with block transfer. Proceedings of the 28th Annual Symposium on Foundations of Computer Science, FOCS 87. IEEE Computer Society, 1987, sivut 204 216. Aho, A. V., Hopcroft, J. E. ja Ullman, J. D., The Design and Analysis of Computer Algorithms. Addison-Wesley, Reading, MA, ensimmäinen painos, 1974. Aggarwal, A. ja Vitter, J. S., The input/output complexity of sorting and related problems. Communications of the ACM, 31,9(1988), sivut 1116 1127. Bender, M. A., Cole, R., Demaine, E. D., Farach-Colton, M. ja Zito, J., Two simplified algorithms for maintaining order in a list. Proceedings of the 10th Annual European Symposium on Algorithms, osa 2461 sarjasta Lecture Notes in Computer Science. Springer-Verlag, 2002, sivut 152 164. Bender, M. A., Demaine, E. D. ja Farach-Colton, M., Cache-oblivious B-trees. SIAM Journal on Computing, 35,2(2005), sivut 341 358. Bender, M. A., Duan, Z., Iacono, J. ja Wu, J., A locality-preserving cache-oblivious dynamic dictionary. Journal of Algorithms, 53,2(2004), sivut 115 136. Bender, M. A., Farach-Colton, M. ja Kuszmaul, B. C., Cache-oblivious string B-trees. Proceedings of the 25th ACM SIGMOD-SIGACT-

SIGART Symposium on Principles of Database Systems, PODS 06. ACM, 2006, sivut 233 242. 52 BFJ02 BM72 Brodal, G. S., Fagerberg, R. ja Jacob, R., Cache oblivious search trees via binary trees of small height. Proceedings of the 13th Annual ACM- SIAM Symposium on Discrete Algorithms, SODA 02. Society for Industrial and Applied Mathematics, 2002, sivut 39 48. Bayer, R. ja McCreight, E. M., Organization and maintenance of large ordered indexes. Acta Informatica, 1,3(1972), sivut 173 189. Com79 Comer, D., The ubiquitous B-tree. ACM Computing Surveys, 11,2(1979), sivut 121 137. FG99 FLPR99 IKR81 Kas04 Knu98 LL87 O N92 Ferragina, P. ja Grossi, R., The string b-tree: A new data structure for string search in external memory and its applications. Journal of the ACM, 46,2(1999), sivut 236 280. Frigo, M., Leiserson, C. E., Prokop, H. ja Ramachandran, S., Cacheoblivious algorithms. Proceedings of the 40th Annual Symposium on Foundations of Computer Science, FOCS 99. IEEE Computer Society, 1999, sivut 285 298. Itai, A., Konheim, A. G. ja Rodeh, M., A sparse table implementation of priority queues. Proceedings of the 8th Colloquium on Automata, Languages and Programming, osa 115 sarjasta Lecture Notes in Computer Science. Springer-Verlag, 1981, sivut 417 431. Kasheff, Z., Cache-oblivious dynamic search trees. Masters thesis, Department of Electrical Engineering and Computer Science, Massachusetts Institute of Technology, Cambridge, MA, USA, kesäkuu 2004. Knuth, D. E. The art of computer programming, volume 3: sorting and searching, sivut 486 489. Addison Wesley Longman Publishing Co., Inc., Redwood City, CA, USA, toinen painos, 1998. Litwin, W. ja Lomet, D. B., A new method for fast data searches with keys. IEEE Software, 4,2(1987), sivut 16 24. O Neil, P. E., The sb-tree: An index-sequential structure for highperformance sequential access. Acta Informatica, 29,3(1992), sivut 241 265.

Ora Oracle, Berkeley db. URL http://www.oracle.com/us/products/ database/berkeley-db/index.html. 53 Pro99 veb77 vebkz77 Vit06 Wil82 Wil86 Wil92 Prokop, H., Cache-oblivious algorithms. Masters thesis, Department of Electrical Engineering and Computer Science, Massachusetts Institute of Technology, Cambridge, MA, USA, kesäkuu 1999. van Emde Boas, P., Preserving order in a forest in less than logarithmic time and linear space. Information Processing Letters, 6,3(1977), sivut 80 82. van Emde Boas, P., Kaas, R. ja Zijlstra, E., Design and implementation of an efficient priority queue. Mathematical Systems Theory, 10(1977), sivut 99 127. Vitter, J. S., Algorithms and data structures for external memory. Foundations and Trends in Theoretical Computer Science, 2,4(2006), sivut 305 474. Willard, D. E., Maintaining dense sequential files in a dynamic environment (extended abstract). Proceedings of the 14th Annual ACM symposium on Theory of computing, STOC 82. ACM, 1982, sivut 114 121. Willard, D. E., Good worst-case algorithms for inserting and deleting records in dense sequential files. Proceedings of the 1986 ACM SIGMOD international conference on Management of data, SIGMOD 86, New York, NY, USA, 1986, ACM, sivut 251 260. Willard, D. E., A density control algorithm for doing insertions and deletions in a sequentially ordered file in good worst-case time. Information and Computation, 97,2(1992), sivut 150 204. yhshfc + 09 yin Huang, K., shan He, Y., fei Chen, P., yun Chen, X. ja jie Li, L., An improved query technique for embedded database based on s-b tree. Proceedings of the 2009 First International Workshop on Database Technology and Applications, DBTA 09. IEEE Computer Society, 2009, sivut 459 462.