FI102425B - Menetelmä muistin toteuttamiseksi - Google Patents

Menetelmä muistin toteuttamiseksi Download PDF

Info

Publication number
FI102425B
FI102425B FI971066A FI971066A FI102425B FI 102425 B FI102425 B FI 102425B FI 971066 A FI971066 A FI 971066A FI 971066 A FI971066 A FI 971066A FI 102425 B FI102425 B FI 102425B
Authority
FI
Finland
Prior art keywords
node
nodes
bits
address
compressed
Prior art date
Application number
FI971066A
Other languages
English (en)
Swedish (sv)
Other versions
FI971066A (fi
FI102425B1 (fi
FI971066A0 (fi
Inventor
Matti Tikkanen
Jukka-Pekka Iivonen
Original Assignee
Nokia Telecommunications Oy
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Nokia Telecommunications Oy filed Critical Nokia Telecommunications Oy
Priority to FI971066A priority Critical patent/FI102425B/fi
Publication of FI971066A0 publication Critical patent/FI971066A0/fi
Priority to EP98908122A priority patent/EP0970430A1/en
Priority to PCT/FI1998/000191 priority patent/WO1998041932A1/en
Priority to AU66239/98A priority patent/AU6623998A/en
Publication of FI971066A publication Critical patent/FI971066A/fi
Application granted granted Critical
Publication of FI102425B1 publication Critical patent/FI102425B1/fi
Publication of FI102425B publication Critical patent/FI102425B/fi
Priority to US09/389,498 priority patent/US6115716A/en

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/90Details of database functions independent of the retrieved data types
    • G06F16/903Querying
    • G06F16/90335Query processing
    • G06F16/90339Query processing by using parallel associative memories or content-addressable memories

Description

102425
Menetelmä muistin toteuttamiseksi
Keksinnön ala 5 Keksintö liittyy yleisesti assosiatiivisen muistin toteuttamiseen, erityi sesti digitaaliseen trie-rakenteeseen perustuvan assosiatiivisen muistin toteuttamiseen. Keksinnön mukainen ratkaisu on tarkoitettu käytettäväksi lähinnä keskusmuistitietokantojen yhteydessä. Sopivia sovelluskohteita ovat erityisesti sellaiset tietokannat, joissa tehdään hakuihin nähden myös paljon lisäyk-10 siä ja poistoja. Tällaisia sovelluskohteita ovat esim. matkaviestinverkkojen vierailijarekisterit (VLR, Visitor Location Register).
Keksinnön tausta
Keksinnön mukainen periaate pohjautuu sinänsä tunnettuun yksilö ulotteiseen hakemistorakenteeseen, jota kutsutaan nimellä digitaalinen trie (engl. digital trie, sana “trie” tulee englannin kielen sanasta “retrieval”). Digitaalisia trie-rakenteita voidaan toteuttaa kahden tyyppisinä: sellaisina, joissa on sankoja (bucket trie) ja sellaisina, joissa ei ole sankoja.
Sangollinen digitaalinen trie-rakenne on puumainen rakenne, jossa 20 on kahdenlaisia solmuja: sankoja ja trie-solmuja. Sangoksi kutsutaan tässä vaiheessa tietorakennetta, joka sisältää joukon tietoyksikköjä tai joukon osoittimia tietoyksiköihin tai joukon hakuavain/osoitin-pareja (joukkoon voi kuulua vain yksi tietoyksikkö, yksi osoitin tai yksi avain/osoitin-pari). Trie-solmu on puolestaan hakua ohjaava taulukko, jonka koko on kaksi potenssiin k (2k) 25 alkiota. Jos trie-solmun alkio on käytössä, se osoittaa joko hakemistopuun seuraavalla tasolla olevaan trie-solmuun tai sankoon. Muutoin alkio on vapaa (tyhjä).
Tietokantaan kohdistuva haku etenee tutkimalla hakuavainta (joka on esim. matkaviestinverkon tai puhelinkeskuksen tilaajatietokannan tapauksessa 30 tyypillisesti se binääriluku, joka vastaa tilaajan puhelinnumeroa) k bittiä kerrallaan. Tutkittavat bitit valitaan siten, että rakenteen ylimmällä tasolla (ensimmäisessä trie-solmussa) tutkitaan k:ta eniten vasemmalla olevia bittiä, rakenteen toisella tasolla vasemmalta lukien seuraavia k:ta bittiä, jne. Tutkittavat bitit tulkitaan etumerkittömänä kaksijärjestelmän lukuna, jota käytetään 35 suoraan trie-solmun sisältämän alkiotaulukon indeksinä, joka osoittaa tietyn 2 102425 alkion taulukosta. Jos indeksin mukainen alkio ei ole käytössä, haku päättyy epäonnistuneena. Jos alkio osoittaa seuraavalla tasolla olevaan trie-solmuun, siellä tutkitaan edellä kuvatulla tavalla k:ta seuraavaa bittiä, jotka on irrotettu hakuavaimesta. Vertailun perusteella haaraudutaan trie-solmussa edelleen 5 joko seuraavalla tasolla olevaan trie-solmuun tai sankoon. Jos alkio osoittaa avaimen sisältävään sankoon, talletettua avainta verrataan hakuavaimeen. Koko hakuavaimen vertailu tapahtuu siten vasta haun saavuttaessa sangon. Avainten ollessa samat haku on onnistunut, ja haluttu tietoyksikkö saadaan sangon osoittimen osoittamasta muistiosoitteesta. Avainten ollessa erisuuret 10 haku päättyy epäonnistuneena.
Sangottomassa trie-rakenteessa ei ole sankoja, vaan viittaus tietoyksikköön tapahtuu puumaisessa hierarkiassa alimmalla tasolla olevasta trie-solmusta, jota kutsutaan lehtisolmuksi. Sangoista poiketen sangottoman rakenteen lehtisolmut eivät voi sisältää tietoyksikköjä, vaan ainoastaan osoit-15 timia tietoyksiköihin. Myös sangollisessa rakenteessa on lehtisolmuja, joten trie-solmuista lehtisolmuja ovat sellaiset solmut, jotka sisältävät ainakin yhden osoittimen sankoon (sangollinen rakenne) tai tietoyksikköön (sangoton rakenne). Trien muut solmut ovat sisäsolmuja. Trie-solmut voivat siis olla joko si-säsolmuja tai lehtisolmuja. Sankojen avulla saadaan hakemistorakenteen 20 muokkaustarvetta lykättyä ajallisesti, koska sankoihin saadaan mahtumaan paljon osoittimia/tietoyksiköitä ennen kuin kyseinen tarve syntyy.
Keksinnön mukaista ratkaisua voidaan soveltaa sekä sangolliseen että sangottomaan rakenteeseen. Jatkossa käytetään kuitenkin esimerkkeinä « sangollisia rakenteita.
25 Kuviossa 1 on esitetty esimerkki digitaalisesta trie-rakenteesta, jossa avaimen pituus on 4 bittiä ja k=2, jolloin siis kussakin trie-solmussa on 22=4 alkiota ja kullakin tasolla tutkitaan kahta avaimesta irrotettua bittiä. Tietueen sisältäviä sankoja on merkitty viitemerkeillä A, B, C, D...H...M, N, O ja P. Sanko on siis sellainen solmu, josta ei enää osoiteta puun alemmalle tasolle. Trie-30 solmuja on kuviossa 1 merkitty viitemerkillä IN1...IN5 ja trie-solmun alkioita vii-temerkillä NE.
Kuvion 1 mukaisessa esimerkkitapauksessa ovat esitettyjen sankojen hakuavaimet seuraavat: A=0000, B=0001, C=0010,..., H=0111,... ja P=1111. Kuhunkin sankoon on tässä tapauksessa talletettu osoitin siihen 35 tietokannan SD muistipaikkaan, josta varsinainen data, esim. kyseisen tilaajan 3 102425 puhelinnumero sekä muut kyseistä tilaajaa koskevat tiedot löytyvät. Tietokannassa voi varsinainen tilaajadata olla talletettuna esim. peräkkäis-tiedostoksi kuviossa esitettyyn tapaan. Esim. tietueen H hakuavaimen perusteella tapahtuu haku irrottamalla hakuavaimesta ensin kaksi vasem-5 manpuoleisinta bittiä (01) ja tulkitsemalla ne, jolloin päädytään solmun IN1 toiseen alkioon, joka sisältää osoittimen seuraavalla tasolla olevaan solmuun IN3. Tällä tasolla irrotetaan hakuavaimesta seuraavat kaksi bittiä (11), jolloin päädytään ko. solmun neljänteen alkioon, joka osoittaa tietueeseen H.
Osoittimen asemesta sanko voi sisältää (hakuavaimen lisäksi) varsi-10 naisen datatietueen (josta käytetään myös yleisempää nimitystä tietoyksikkö). Näin ollen esim. tilaajaa A koskevat tiedot (kuvio 1) voivat olla sangossa A, tilaajaa B koskevat tiedot sangossa B, jne. Assosiatiivisen muistin ensimmäisessä suoritusmuodossa sankoon on siis talletettu avain-osoitin-pari ja toisessa suoritusmuodossa avain ja varsinainen data, joskaan avain ei ole välttä-15 mätön.
Hakuavain voi olla myös moniulotteinen. Toisin sanoen, hakuavain voi koostuu useasta attribuutista (esim. tilaajan sukunimi ja yksi tai useampi etunimi). Tällainen moniulotteinen trie-rakenne on kuvattu kansainvälisessä patenttihakemuksessa PCT/FI95/00319 (julkaisunumero WO 95/34155). 20 Kyseisessä rakenteessa suoritetaan osoitelaskentaa siten, että kustakin dimensiosta valitaan, muista dimensioista riippumatta, kerrallaan tietty ennalta määrätty lukumäärä bittejä. Trie-rakenteen yksittäisen trie-solmun kullekin dimensiolle asetetaan siis kiinteä, muista dimensioista riippumaton raja määrää-mällä etukäteen kussakin dimensiossa tutkittavien hakuavainbittien lukumäärä. 25 Tällaisella rakenteella saadaan muistipiirien tarve pieneksi silloin, kun hakua-vainten arvojen jakaumat ovat etukäteen tiedossa, jolloin rakenne voidaan toteuttaa staattisena.
Käytännössä on kuitenkin havaittu, että kyseisellä rakenteella ei aina (kaikilla avainjakaumilla) pystytäkään saavuttamaan muistinkulutuksen kan-30 naita optimaalista trie-solmujen täyttöastetta.
Keksinnön yhteenveto
Keksinnön tarkoituksena on päästä eroon edellä kuvatusta epäkohdasta ja saada aikaan menetelmä, jonka avulla kiinteää solmukokoa käyttä-35 vässä rakenteessa pystytään vaadittu muistitila pitämään mahdollisimman 4 102425 pienenä ja muistinhallinta tehokkaana, erityisesti tietokannoissa, joissa on paljon lisäyksiä ja poistoja.
Tämä päämäärä saavutetaan ratkaisulla, joka on määritelty itsenäisissä patenttivaatimuksissa. Näistä ensimmäinen kuvaa rakennetta, jossa 5 käytetään sankoja ja toinen rakennetta, jossa ei käytetä sankoja.
Keksinnön ajatuksena on käyttää rakenteessa kiinteää, neljän kokoista solmua ja korvata sellaiset peräkkäiset nelisolmut, jotka muodostavat vain yhden polun alaspäin puussa (yhdellä tai useammalla) kompressoidu(i)lla solmuilla, johon/joihin on tiivistetty yhdestä tai useasta peräkkäisestä nelisol-10 musta se informaatio, joka tarvitaan rakenteessa etenemiseen ja solmujen uudelleen muodostamiseen, ilman, että kuitenkaan tarvitaan muistitilaa alkio-taulukoille. Ajatuksena on siis käyttää muistitilan tarpeen ja muistin tehokkuuden kannalta optimaalista solmukokoa ja lisäksi vähentää muistitilan tarvetta edelleen niiden peräkkäisten nelisolmujen osalta, jotka muodostavat vain 15 yhden polun alaspäin puussa (ja joiden täyttöaste ei ole optimaalinen). Toisin sanoen, ajatuksena on pienentää muistitilan tarvetta erityisesti epätasaisten avainjakaumien yhteydessä pienentämällä rakenteen syvyyttä kompressoitujen solmujen avulla.
Keksinnön mukainen ratkaisu takaa myös joukko-operaatioiden 20 tehokkaan toteutuksen, koska rakenne on järjestyksen säilyttävä digitaalinen trie.
Kuvioluettelo
Seuraavassa keksintöä ja sen edullisia toteutustapoja kuvataan tar-25 kemmin viitaten oheisten piirustusten mukaisiin esimerkkeihin, joissa kuvio 1 havainnollistaa yksiulotteisen digitaalisen trie-rakenteen käyttöä puhelinkeskuksen tilaajatietojen ylläpitämisessä, kuvio 2 esittää erästä moniulotteista trie-rakennetta, kuvio 3 esittää erästä kolmiulotteista muistirakennetta, 30 kuvio 4 havainnollistaa keksinnön mukaista muistirakennetta, kuvio 5 havainnollistaa osoitelaskennan toteuttamista keksinnön mukaisessa muistissa, kuviot 6a ja 6b havainnollistavat nelisolmuketjun korvausta kompressoidulla solmulla, 35 kuviot 7a ja 7b esittävät kompressoidun solmun muodostamisperiaa- 5 102425 tetta,
Kuviot 8a ja 8b esittävät erästä esimerkkiä muistirakenteen ylläpidosta, kuvio 9 havainnollistaa muistissa käytettävän kompressoidun solmun 5 rakennetta, kuvio 10a havainnollistaa käytetyn sananpituuden aiheuttamaa rajoitusta solmujen yhdistämiselle, kuvio 10b esittää kuvion 10a solmuketjusta muodostettavan kokoavan solmun rakennetta, ja 10 kuvio 11 esittää keksinnön mukaista muistijärjestelyä lohkokaaviota- solla.
Keksinnön yksityiskohtainen kuvaus
Kuten edellä mainittiin, toteutetaan trie-rakenne esillä olevassa kek-15 sinnössä moniulotteisena (yleisesti ottaen n-ulotteisena). Tällainen moniulotteinen rakenne on muutoin aivan samanlainen kuin alussa kuvattu yksiulotteinen rakenne, mutta trie-solmun sisältämä alkiotaulukko on moniulotteinen. Kuviossa 2 on esitetty esimerkkinä kaksiulotteinen 22*21-rakenne, jossa alkiotau-lukossa on toisessa dimensiossa neljä alkiota ja toisessa dimensiossa kaksi al-20 kiota. Trie-solmun alkioista osoitettuja sankoja on kuviossa merkitty ympyröillä.
Osoitelaskenta tapahtuu moniulotteisessa tapauksessa samalla periaatteella kuin yksiulotteisessa tapauksessa. Peruserona on kuitenkin se, että yhden alkiotaulukkoindeksin sijaan lasketaankin indeksi jokaiselle alkiotaulu-kon dimensiolle (n kappaletta). Kullakin dimensiolla on tällöin oma haku-25 avainavaruutensa {0, 1,..., 2v'-1}(vj on hakuavaimen pituus bitteinä kussakin dimensiossa ja i e {1,...n}).
Trie-solmun koko kunkin dimension suunnassa on 2“· alkiota ja trie-solmun alkioiden kokonaislukumäärä S on myös kakkosen potenssi: : S = U2k‘ = 2klx2klx2k,x..=2N (1) 30 Trie-solmun, jolla on n kappaletta dimensioita, kaikki alkiot voidaan siten osoittaa n kappaleella kokonaislukuja (n>2), joista kukin voi saada arvon, joka on välillä {0,1...2^-1}. Etukäteen kiinteäksi määrätty parametri on siis hakuavaimen kokonaispituus kussakin dimensiossa. Mikäli esim. hakuavaimen yhdessä dimensiossa on korkeintaan 256 attribuuttia (esim. etunimeä), on 35 hakuavaimen kokonaispituus 8 bittiä.
β 102425
Kuviossa 3 on esitetty esimerkkinä muistin hakemistorakenteessa käytettävää solmua N10, kun käytettävä hakuavain on kolmiulotteinen. Ensimmäisen dimension (x) suunnassa trie-solmussa on 22=4 alkiota, toisen dimension (y) suunnassa 21=2 alkiota ja kolmannen dimension (z) suunnassa 5 23=8 alkiota, jolloin trie-solmussa on yhteensä 26=64 alkioita, jotka on nume roitu välillä 0...63.
Koska käytännön laitteiden (esim. tietokonelaitteiden) muistiavaruus on yksiulotteinen, moniulotteinen taulukko linearisoidaan eli muunnetaan yksiulotteiseksi osoitelaskentaprosessissa (eli edettäessä hakemistopuussa). Li-10 nearisointi on aritmeettinen operaatio, jonka voi tehdä kaikenkokoisille taulukoille. Näin ollen ei ole väliä, katsotaanko trie-solmujen alkiotaulukot yksi- vai moniulotteisiksi, koska moniulotteiset taulukot linearisoidaan joka tapauksessa yksiulotteisiksi.
Linearisoinnissa taulukon alkiot numeroidaan nollasta alkaen (aivan 15 kuin on esitetty kuviossa 3), jolloin viimeisen alkion numero on yhtä pienempi kuin kaikkien ulottuvuuksien kokojen tulo. Alkion numero on summa jokaisen koordinaatin (esim. kolmiulotteisessa tapauksessa x-, y- ja z-koordinaatit) ja sitä edeltävien dimensioiden kokojen tuloista. Näin laskettua numeroa käytetään suoraan yksiulotteisen taulukon indeksinä.
20 Kuviossa 3 esitetyn trie-solmun tapauksessa lasketaan alkion nume ro VAn edellä esitetyn mukaisesti kaavalla: VAn= x+yx4+zx4x2 (2) missä xe{0,1,2,3}, ye{0,1} ja ze{0,1,2,3,4,5,6,7}. Esim. alkiolle 54 saadaan näin sen koordinaateista (2,1,6): 2+1x4+6x4x2=2+4+48=54.
25 Linearisoitaessa n-ulotteisen trie-rakenteen trie-solmun (n-ulotteista) alkiotaulukkoa jokaisen dimension koko on edellä esitetyn mukaisesti 2k|, missä kj on ko. dimension kerralla tutkittavien bittien lukumäärä. Jos viitemer-killä a, merkitään dimension mukaista koordinaattia (je{0,1,2...n)), linearisointi voidaan kirjoittaa muotoon: n j-1 30 Π 2 elo,1,2,...,2^-ι}λΛ0= 0 (3) j=\ /»o
Linearisointi voidaan toteuttaa suorittamalla kaavan (3) mukainen kertolasku, mutta on kuitenkin edullista suorittaa linearisointi muodostamalla hakuavainbiteistä jollakin sinänsä tunnetulla tavalla bittijono, jota vastaava luku 7 102425 ilmoittaa sen alkion, jonka sisällön perusteella hakemistopuussa edetään. Tällaista linearisointitapaa kutsutaan bittilimitykseksi.
Kuten edellä mainittiin, käytännössä on havaittu, että alussa mainitussa kansainvälisessä patenttihakemuksessa kuvatulla ratkaisulla ei kaikissa 5 olosuhteissa (kaikilla avainjakaumilla) pystytäkään saavuttamaan optimaalista muistinkulutusta. Kun asiaa tutkitaan matemaattisesti, voidaan osoittaa, että n-haarautuvan trie-rakenteen (n-ary trie) keskimääräinen trie-solmujen muistitilan tarve E tasaisilla avainjakaumilla on kaavan (4) mukaisesti: n loge n E = ——v--- (4) m log n rt -1 10 missä n on trie-solmun taulukon koko, m on osoittimien maksimilukumäärä sangossa, v on tietueiden lukumäärä koko rakenteessa ja e on Neperin luku. Kaava (4) voidaan johtaa artikkelissa C. H. Ang and H. Samet: Approximate average Storage utilization of bucket methods with arbitrary fanout, Nordic Journal of Computing 3, (1996), ss. 280-291 (myös Computer Science TR 15 3618) esitettyjen kaavojen avulla.
Kaavassa (4) on keksinnön kannalta oleellista se, että sillä on minimit parametrin n arvoilla 2 ja 4. Näin ollen muistinkulutus on minimissään arvoilla 2 ja 4. Näistä valitaan keksinnön mukaisen muistin käyttöön arvo 4, koska tällä tavoin saadaan rakenteen syvyys pienemmäksi ja muisti tehokkaammaksi 20 (nopeammaksi). Trie-rakenne toteutetaan siis esillä olevassa keksinnössä ulotteisuusriippumattomana nelihaarautuvana rakenteena. Tämä tarkoittaa sitä, että edellä kuvattujen dimensioiden lukumäärä n voi olla mikä tahansa, mutta trie-solmuissa tutkittavien bittien lukumäärä on kuitenkin kiinteästi kaksi (lukuunottamatta kompressoituja solmuja, joita kuvataan jäljempänä). Toisin 25 sanoen, rakenteen kaikkien tavallisten trie-solmujen kooksi valitaan kiinteästi neljä, riippumatta siitä, mikä on käytettävien dimensioiden lukumäärä. Näitä trie-solmuja kutsutaan jatkossa myös nelisolmuiksi.
Erästä tällaista rakennetta on havainnollistettu kuviossa 4. Kuviossa on esitetty viisi tavallista nelisolmua N41...N45, joissa on yhteensä kuusi 30 osoitinta sankoihin (L1...L6). Nelisolmujen ja sankojen lisäksi rakenteessa voi olla kompressoituja solmuja, joita kuvataan tarkemmin jäljempänä.
Kuviossa 5 on havainnollistettu erästä esimerkkiä keksinnön mukaisen muistin trie-solmuissa suoritettavasta osoitelaskennasta. Kuviossa on oletettu, että avaruuden ulotteisuus on 3 (dimensiot x, y ja z), mutta kuten 8 102425 edellä mainittiin avaruuden ulotteisuus voi olla mielivaltainen. Lisäksi on oletettu, että hakuavain ax dimension x suunnassa on ax = 011011, hakuavain ay dimension y suunnassa a, = 110100 ja hakuavain az dimension z suunnassa on az = 101010. Hakuavaimet on merkitty kuvioon allekkain.
5 Trie-rakenteen solmuissa yksiulotteisen alkiotaulukon indeksin muodostavat bitit on esitetty yhtenäisillä viivoilla esitetyissä kehyksissä. Nämä kehykset kuvaavat siis sitä, kuinka globaali hakuavain jaetaan paikallisiksi hakuavaimiksi, joista kutakin käytetään trie-rakenteen yhdessä solmussa. Rakenteen solmuja on merkitty etenemisjärjestyksessä viitemerkeillä N1...N9. 10 Jokaisessa solmussa tutkitaan kaksi bittiä, joten ensimmäisessä solmussa käytetään hakuavaimen ax vasemmanpuoleisin bitti ja hakuavaimen a, vasemmanpuoleisin bitti. Tämän jälkeen siirrytään nuolen mukaisesti seuraavaan solmuun (N2), jossa alkiotaulukkoindeksin muodostavat kaksi seuraavaa bittiä. Nämä ovat hakuavaimen az vasemmanpuoleisin bitti ja hakuavaimen ax va-15 semmaita lukien toinen bitti. Tällä tavoin edeten saadaan seuraavat solmu-kohtaiset alkiotaulukkoindeksit: 01 (solmu N1), 11 (solmu N2), 10 (solmu N3), 10 (solmu N4), 10 (solmu N5), 10 (solmu N6), 10 (solmu N7), 11 (solmun N8) ja 00 (solmu N9).
Koska kussakin trie-solmussa tutkittavien bittien lukumäärä on kiin-20 teästi kaksi, ei solmuun tarvitse tallettaa tutkittavien bittien lukumäärää. Mini-mikokoonpanossaan solmu käsittää siis ainoastaan alkiotaulukon, jossa on neljä alkiota. Hakemistopuussa etenemiseksi on lisäksi tiedettävä kunkin solmun tyyppi. Tämä tieto voidaan tallettaa hakemistorakenteessa esim. kuhunkin solmuun tai solmun isäsolmun osoittimeen. Osoittimen kahdella 25 “ylimääräisellä” bitillä voidaan koodata osoittimeen tieto siitä, onko kysymyksessä nollaosoitin (tyhjä alkio) vai osoittaako osoitin tavalliseen trie-solmuun, sankoon vai kompressoituun trie-solmuun (jota kuvataan jäljempänä). San-gottoman rakenteen tapauksessa talletetaan muistiin tieto siitä, osoittaako osoitin kompressoimattomaan solmuun, kompressoituun solmuun vai tietoyk-30 sikköön.
Koska osoitelaskenta suoritetaan käyttäen sinänsä tunnettua bittili-mitystä, ei osoitelaskentaa kuvata tässä yhteydessä tarkemmin.
Muistitilan minimoimiseksi edelleen muodostetaan nelisolmuista tietyissä tapauksissa kompressoituja solmuja. Mikäli tavallisella nelisolmulla on 35 vain yksi lapsi, tarkoittaa tämä sitä, että ko. nelisolmun kautta kulkee vain yksi 9 102425 polku “alaspäin” puussa. Sellainen nelisolmu, joka sisältää vain yhden osoitti-men (polun alaspäin) on muistitilan optimoimiseksi edullista korvata kompressoidulla solmulla, jossa kerrotaan kyseisellä polulla tutkittujen bittien lukumäärä ja laskettu taulukkoindeksin arvo. Koska tarvittavan muistitilan kannalta on 5 edullista muodostaa yhden lapsen nelisolmuista kompressoituja solmuja koko muistirakenteessa, tarkoittaa kompressointi myös sitä, että muistirakenteen tavallisilla (ei-kompressoiduilla) nelisolmuilla ylläpidetään aina vähintään kaksi lasta, eli yksittäisestä (tavallisesta) nelisolmusta on osoittimet ainakin kahteen eri alemman tason solmuun (lapsisolmuun). Kompressoitu solmu korvaa 10 yhden tai useamman peräkkäisen sisäsolmun, joilla kaikilla on yksi lapsi, joten edellä mainittu yksi lapsi ei voi olla sanko (eikä lehti rakenteessa, jossa sankoja ei ole). Lapsisolmun on siis oltava tavallinen nelisolmu, jotta kompressointi voidaan tehdä. Muistitilan optimoinnin kannalta on siis edullista ylläpitää myös sankoa edeltävillä nelisolmuilla aina vähintään kaksi lasta.
15 Kompressoitujen nelisolmujen muodostamisperiaatetta on havain nollistettu kuviossa 6a ja 6b. Jos rakenteeseen syntyy kuvion 6a mukainen tilanne, jossa yhden tai usean peräkkäisen nelisolmun QN läpi kulkee vain yksi polku, voidaan kyseisellä polulla olevat nelisolmut korvata yhdellä kompressoidulla solmulla CN (kuvio 6b), joka käsittää tiedon tutkittavien bittien lukumää-20 rästä B, alkiotaulukkoindeksin i ja osoittimen lapsisolmuun. Tämä lapsisolmu on aina tavallinen nelisolmu. Toisin sanoen, kompressoitu solmu ei osoita sankoon. Jos kyseisellä polulla tutkittavien hakuavainbittien lukumäärä on suurempi kuin käytetyn tietokoneen käyttämä sananpituus, tarvitaan useampia kuin yksi kompressoitu solmu korvaamaan ko. polulla olevat nelisolmut.
25 Keksinnön mukaisessa muistissa on siis kahdenlaisia trie-solmuja: tavallisia nelisolmuja, jotka sisältävät kuvion 5 mukaisesti alkiotaulukon ja kompressoituja solmuja, joita kuvataan seuraavassa.
Kuvioissa 7a ja 7b orv havainnollistettu kompressoidun nelisolmun : muodostamista. Kuviossa 7a on esitetty kolmesta nelisolmusta muodostuva 30 paikallinen trie-rakenne, jossa on kahden ylimmän solmun osalta vain yksi polku. Nämä kaksi solmua voidaan korvata yhdellä alkiotaulukolla, joka on esitetty kuviossa 7b. Koska rakenteessa on ko. solmujen osalta vain yksi polku, on taulukosta käytössä vain yksi alkio, joka on tässä esimerkkitapauksessa alkio 14, joka on ympyröity kuviossa (14=1011, kun bitit otetaan rivijär-35 jestyksessä, eli ensin x-bitit ja sen jälkeen y-bitit). Näin ollen kuvion 7a the- 10 102425 rakenne voidaan kahden ylimmäisen solmun osalta korvata kompressoidulla nelisolmulla, johon on talletettu tutkittavien bittien lukumäärä (4) ja taulukkoin-deksin arvo (14).
Kuvioissa 8a ja 8b on esitetty edellistä kuviota vastaava ylläpitoesi-5 merkki, kun tietoyksikköjä ja niitä vastaavia avaimia poistetaan tietokannasta. Kuviossa 8a on esitetty alkutilanne, jossa muistirakenne käsittää trie-solmut N81...N83 ja sangot L2...L4. Tämän jälkeen muistista poistetaan sanko L2 ja sen sisältämä osoitin/tietue, jolloin solmut N81 ja N82 voidaan korvata kompressoidulla solmulla CN, jossa kerrotaan solmun sisältämän osoittimien indeksi 10 ja niiden bittien lukumäärä, jotka on tutkittu sillä polulla, jonka kompressoitu solmu korvaa.
Kompressoitu solmu on siis periaatteessa samanlainen kuin tavallinen nelisolmu, mutta sen sijaan, että talletettaisiin alkiotaulukko, jossa on vain yksi osoitin, talletetaanko kyseisen osoittimen indeksi ja polulla tutkittavien 15 bittien lukumäärä. Kompressoidussa solmussa on siis virtuaalinen taulukko, joka korvaa polulla olleen, yhden tai useamman solmutaulukon sisältämän informaation. Mikäli kompressoitu solmu korvaa useita tavallisia nelisolmuja, on kompressoidussa solmussa ilmoitettava tutkittavien bittien lukumäärä yhtä suuri kuin korvatuissa solmuissa tutkittavien bittien lukumäärien summa.
20 Kuviossa 9 on havainnollistettu kompressoidun solmun rakennetta.
Solmun minimikokoonpanoon kuuluu 3 osaa: kenttä 90, joka kertoo tutkittavien bittien lukumäärän, kenttä 91, johon on talletettu taulukkoindeksin arvo ja kenttä 92, johon on talletettu osoitin lapsisolmuun. Kompressoidussa solmussa tarvitaan em. tiedot siksi, että haku voisi jatkua myös kompressoidun solmun 25 kohdalla oikealla arvolla ja että solmun uudelleenmuokkaus onnistuisi rakenteen muutosten yhteydessä. (Ilman tietoa tutkittavien bittien lukumäärästä ei hakuavaimesta voida laskea taulukkoindeksin arvoa ja toisaalta ilman taulukkoindeksin arvoa ei laskettua arvoa voitaisi verrata solmuun talletettuun ar-: voon.) 30 Mikäli kompressoidussa solmussa tapahtuu lisäyksen yhteydessä yhteentörmäys eli kompressoituun solmuun tuleekin uusi osoitin, tutkitaan, kuinka mones bitti erottaa alkuperäisen osoittimen indeksin ja uuden osoittimen indeksin. Tämän mukaan luodaan alkuperäisen kompressoidun solmun korvaava rakenne, jossa uusi kompressoitu solmu sisältää indeksin bittien 35 lukumäärän siltä osin kuin yhteisiä bittejä on. Lisäksi rakenteeseen syntyy yksi 11 102425 tai useampi trie-solmu niitä bittejä vastaaville kohdille, joiden osalta indeksit eroavat toisistaan.
Mikäli kompressoitua solmua edeltää yksi tai useampi kompressoitu solmu tai trie-solmuketju, joka muodostaa vain yhden polun, on muistitilan 5 tarpeen ja muistin tehokkuuden kannalta edelleen edullista yhdistää kyseisiä solmuja. Muistin tehokkuuden kannalta on edelleen edullista suorittaa solmujen yhdistäminen niin, että vain ketjun viimeisenä (alimpana) olevassa kompressoidussa solmussa tutkittavien bittien lukumäärä on pienempi kuin käytetyn tietokoneen käyttämä sananpituus. Toisin sanoen, solmuja yhdistetään niin, 10 että tutkittavien bittien lukumäärä saadaan kussakin kompressoidussa solmussa mahdollisimman suureksi. Esim. kolme peräkkäistä kompressoitua solmua, joissa tutkittavien bittien lukumäärät ovat 5, 10 ja 15 voidaan yhdistää yhdeksi kompressoiduksi solmuksi, jossa tutkittavien bittien lukumäärä on 30. Vastaavasti esim. kolme peräkkäistä kompressoitua solmua (tai kolme peräk-15 käistä tavallista trie-solmua, jotka virittävät vain yhden polun), joissa tutkittavien bittien lukumäärät ovat 10, 10 ja 15 voidaan yhdistää kahdeksi kompressoiduksi solmuksi, joissa tutkittavien bittien lukumäärät ovat 32 ja 3, kun käytetty sananpituus on 32. Mahdollisimman moneen kompressoituun solmuun pyritään siis saamaan tietokoneen sananpituutta vastaava määrä tutkittavia 20 bittejä, ja mahdolliset “ylimääräiset” bitit jätetään hierarkiassa alimpana olevaan kompressoituun solmuun.
Kompressoituja solmuja ei kuitenkaan voida yhdistää niin, että yhdessä solmussa tutkittavien bittien lukumäärä olisi suurempi kuin käytetyn tietokoneen sananpituus. Erityisesti useampiulotteisissa (n>3) tapauksissa on taval-25 lista, että peräkkäisiä yhden lapsen sisältäviä solmuja on niin monta, että polkua ei voida esittää yhdellä kompressoidulla solmulla. Niinpä hakupolku tai sen osa korvautuu usean peräkkäisen kompressoidun solmun muodostamalla ketjulla, jossa muissa paitsi viimeisessä solmussa on tutkittavien bittien luku-: määrä sama kuin bittien lukumäärä sanassa, esim. Intel-arkkitehtuurissa 32, ja 30 viimeisessä solmussa pienempi tai yhtä suuri kuin bittien lukumäärä sanassa.
Tällaista tilannetta on havainnollistettu kuviossa 10a, jossa on esitetty kolme peräkkäistä kompressoitua solmua CN1...CN3. Solmuissa tutkittavien bittien lukumääriä on merkitty viitemerkeillä b, b’ ja b” ja solmujen sisältämien taulukkoindeksien arvoja vastaavasti viitemerkeillä i, i’ ja i". Kahdessa ylim-35 mässä solmussa on tutkittavien bittien lukumäärällä maksimiarvonsa (olettaen, 12 102425 että käytetään 32-bittistä tietokonearkkitehtuuria).
Rajoitetun sananpituuden aiheuttamasta, useiden peräkkäisten kompressoitujen solmujen muodostamasta ketjusta on edullista muodostaa yksi ko. kompressoidut solmut kokoava solmu. Tämä kokoava solmu muodostetaan 5 siten, että kokoavan solmun osoitin asetetaan osoittamaan ko. ketjussa viimeisenä olevan kompressoidun solmun lapseen, kokoavan solmun tutkittavien bittien lukumääräksi B asetetaan ketjussa olevien kompressoitujen solmujen tutkittavien bittien lukumäärien summa ja bittiiimityksellä tuotetut taulukkoin-deksit (eli hakusanat) asetetaan solmussa sijaitsevaan listaan tai taulukkoon T 10 siinä järjestyksessä, missä ne esiintyvät peräkkäisissä kompressoiduissa solmuissa. Kokoavasta solmusta tulee näin ollen kuvion 10b mukainen solmu CN4, jossa on kolme osaa: kenttä 130, joka sisältää osoittimen mainittuun alemman tason solmuun, kenttä 131, joka sisältää tutkittavien bittien lukumäärän B (em. summan) ja lista tai taulukko T, joka sisältää peräkkäin bittilimityk-15 sellä tuotetut taulukkoindeksit. Tämä kolmas osa on siis kooltaan muuttuva. Kuvion esimerkissä indeksien lukumäärä on kolme, koska kuvion 10a esimerkissä on peräkkäin kolme solmua.
Taulukon T alkioiden (eli indeksien) lukumäärä NE saadaan selville tutkittavien bittien lukumäärästä B seuraavasti:
, BIW, jos B MOD W = 0 on \rc — / J
l [β I W\+\, jos B MODW
missä L J on floor-funktio, joka poistaa luvusta desimaalit, W on käytetyn sanan pituus, esim. 32 ja MOD viittaa modulo-aritmetiikkaan. Kokoavaan solmuun ei siis tarvitse tallettaa indeksien lukumäärää erillisenä tietona, vaan se saadaan selville tutkittavien bittien lukumäärän perusteella.
25 Taulukossa viimeisenä olevan indeksin laskennassa tarvittava bittien lukumäärä B’ (jota on kuviossa merkitty viitemerkillä b”), joka ei välttämättä ole ' yhtä suuri kuin sanan pituus, saadaan seuraavasti: , W, jos B MODW = 0 B = 'B MODW, jos B MODW* 0
Muodostamalla useasta peräkkäisestä kompressoidusta solmusta ko-30 koava solmu saadaan muistiviittauksien (osoittimien) lukumäärä entistä pienemmäksi. Nykyisessä tietokonearkkitehtuurissa, jossa on useampitasoisia cache-muisteja, vaativat muistiviittaukset suhteellisen paljon laskenta-aikaa, 13 102425 joten laskenta-aika saadaan näin ollen pienemmäksi. Samalla poistuu muistitilan tarve osoittimien osalta.
Kompressoitujen solmujen avulla pystytään muistintarvetta minimoimaan tehokkaasti erityisesti epätasaisten avainjakaumien yhteydessä, koska 5 kompression avulla pystytään rakenteen syvyyttä kasvattamaan paikallisesti mielivaltaisen suureksi ilman, että tilantarve kasvaa.
Kuten edellä jo epäsuorasti mainittiin, keksinnön mukaisessa muistissa sankoa ei voi edeltää kompressoitu solmu vaan isäsolmuna on aina joko tavallinen nelisolmu tai tyhjä alkio. Kompressoitu solmu ei siis voi osoittaa 10 sankoon, vaan se osoittaa aina joko toiseen kompressoituun solmuun tai tavalliseen nelisolmuun. Tyhjällä alkiolla tarkoitetaan sitä, että jos tietueiden kokonaislukumäärä on pienempi kuin sankoon mahtuvien osoittimi-en/tietueiden lukumäärä, ei puumaista rakennetta vielä tarvita, vaan rakenteessa tullaan toimeen yhdellä sangolla (jolloin ko. solmua edeltää käsitteelli-15 sesti tyhjä alkio). Tällä tavoin on edullista menetellä muistin käyttöönoton alkuvaiheessa. Puumaista rakennetta kannattaa siis lähteä kasvattamaan vasta sitten, kun se on välttämätöntä.
Muistissa suoritettavat haut, lisäykset ja poistot suoritetaan muissa suhteissa sinänsä tunnetulla tavalla. Tämän suhteen viitataan esim. alussa 20 mainittuun kansainväliseen patenttihakemukseen, jossa kuvataan esim. lisäysten yhteydessä tapahtuvia törmäystilanteita tarkemmin. Tavanomaisten tuhoavien päivitysten asemesta rakenteessa voidaan käyttää myös tunnettuja funktionaalisia päivityksiä, jotka toteutetaan tunnetulla tekniikalla kopioimalla polku juuresta sankoihin.
25 Kuten alussa jo mainittiin, edellä kuvatut periaatteet koskevat myös sangotonta trie-rakennetta. Tällöin sankoa vastaa tietoyksikkö (johon sangot-toman rakenteen lehtisolmu osoittaa). Sangottomassa vaihtoehdossa tulee ongelmaksi se, millainen juurisolmun on oltava, kun rakenteessa on vain yksi : tietoyksikkö (johon juurisolmusta osoitetaan). Periaatteessa juurisolmun to- 30 teutukseen on kaksi vaihtoehtoa. Ensimmäisen vaihtoehdon mukaan juuressa voi tässä tapauksessa olla nelisolmu, jossa on vain yksi osoitin. Toisen, edullisemman vaihtoehdon mukaan juurisolmuna on kompressoitu solmu, joka viittaa suoraan ko. tietoyksikköön. Yhden tietoyksikön tapauksessa on siis sangottomassa vaihtoehdossa oltava em. poikkeus edellä kuvattuihin sääntöi-35 hin.
14 102425
Kuviossa 11 on esitetty keksinnön mukaista muistia lohkokaaviota-solla. Kutakin dimensiota varten on oma tulorekisteri, joten tulorekisterejä on siis yhteensä n kappaletta. Näihin tulorekistereihin, joita on merkitty vii-temerkeillä R^.R,,, talletetaan kunkin dimension hakuavain, kukin omaan 5 rekisteriinsä. Tulorekisterit on kytketty rekisteriin TR, johon muodostetaan edellä kuvattu hakusana edellä kuvatun bittilimitysmenetelmän mukaisesti. Rekisteri TR on kytketty summaimen S kautta muistin MEM osoitesisäänmenoon. Muistin ulostulo on puolestaan kytketty osoiterekisterille AR, jonka ulostulo on puolestaan kytketty summaimelle S. Aluksi luetaan jokaisesta rekisteristä vali-10 tut bitit oikeaan jäijestykseen yhteisrekisteriin TR. Kussakin tavallisessa ne-lisolmussa valitaan rekistereistä kaksi bittiä, mutta kompressoidun solmun kohdalla vaihtelee valittavien bittien lukumäärä sen mukaan, mikä on ko. solmussa tutkittavien bittien lukumäärä. Osoiterekisteriin AR on aluksi talletettu ensimmäisen trie-solmun aloitusosoite, jolloin tähän osoitteeseen summataan 15 summaimessa S se osoite, joka saadaan offset-osoitteena rekisteriltä TR. Tämä osoite syötetään muistin MEM osoitesisäänmenoon, jolloin muistin da-taulostulosta saadaan seuraavan trie-solmun aloitusosoite, joka kirjoitetaan osoiterekisteriin AR siellä olleen edellisen osoitteen päälle. Tämän jälkeen ladataan tulorekistereistä jälleen seuraavaksi valittavat bitit oikeaan järjestyk-20 seen yhteisrekisteriin TR ja näin saatu taulukko-osoite summataan ko. taulukon (eli trie-solmun) aloitusosoitteeseen, joka saadaan osoiterekisteristä AR. Tämä osoite syötetään jälleen muistin MEM osoitesisäänmenoon, jolloin • muistin dataulostulosta saadaan seuraavan solmun aloitusosoite. Edellä kuvattuja menettelyä toistetaan kunnes on edetty haluttuun pisteeseen asti ja 25 voidaan suorittaa talletus tai lukea haluttu tietue.
Ohjauslogiikka CL huolehtii muistirakenteen ylläpidosta sekä siitä, että kussakin kompressoidussa solmussa otetaan rekistereistä oikea määrä bittejä.
Osoitelaskennan nopeuteen voidaan vaikuttaa sillä, minkälainen . laitetoteutus valitaan. Koska eteneminen tapahtuu edellä esitettyjen bitti- 30 manipulaatioiden avulla, voidaan osoitelaskentaa nopeuttaa siirtymällä yhden prosessorin käytöstä moniprosessoriympäristöön, jossa suoritetaan rinnakkaista prosessointia. Moniprosessoriympäristölle vaihtoehtoinen toteutustapa on ASIC-piiri.
Vaikka keksintöä on edellä selostettu viitaten oheisten piirus-35 tusten mukaisiin esimerkkeihin, on selvää, ettei keksintö ole rajoittunut siihen, 15 102425 vaan sitä voidaan muunnella oheisissa patenttivaatimuksissa esitetyn keksinnöllisen ajatuksen puitteissa. Osoitelaskenta voi myös jatkua vielä sangossakin, edellyttäen, että bittejä on vielä tutkimatta. Rakenne voidaan toteuttaa myös vaihtuvan mittaisille avaimille. Osoitelaskenta voi myös jatkua vielä 5 sangossakin, edellyttäen, että bittejä on vielä tutkimatta. Alussa esitettyä sangon määritelmää onkin laajennettava siten, että sanko on tietorakenne, joka voi sisältää myös toisen trie-rakenteen. Useita keksinnön mukaisia hake-mistorakenteita voidaan siis linkittää peräkkäin siten, että sankoon on talletettu toinen hakemistorakenne (eli toinen trie-rakenne) tai sangon tai lehden sisäl-10 tämä osoitin osoittaa toiseen hakemistorakenteeseen. Viittaus sangosta tai lehdestä tapahtuu suoraan seuraavan hakemistorakenteen juurisolmuun. Yleisesti ottaen voidaan todeta, että sanko sisältää ainakin yhden elementin siten, että yksittäisen elementin tyyppi on valittu joukosta, joka käsittää tietoyksikön, osoittimen talletettuun tietoyksikköön, osoittimen toiseen hakemistora-15 kenteeseen ja toisen hakemistorakenteen. Sankojen tarkempi toteutus riippuu sovelluksesta. Useissa tapauksissa kaikki sangoissa olevat elementit voivat esim. olla samaa tyyppiä, joka on joko tietoyksikkö tai osoitin tietoyksikköön. Sen sijaan esim. sovelluksessa, jossa muistiin talletetaan merkkijonoja sangossa voi olla elementtipareja siten, että sangon kaikki parit ovat joko osoitin 20 tietoyksikköön/osoitin hakemistorakenteeseen -pareja tai tietoyksikkö/osoitin hakemistorakenteeseen -pareja tai tietoyksikkö/hakemistorakenne -pareja. Tällöin voidaan esim. merkkijonon etuosa (prefix) tallettaa tietoyksikköön ja jatkaa hakua tietoyksikköä vastaavaan pariin kuuluvasta hakemistoraken-teesta.
25 t «

Claims (14)

16 102425
1. Menetelmä muistin toteuttamiseksi, johon muistiin tieto talletetaan tietoyksikköinä, joista jokaiselle varataan muistissa oma muistitilansa, jonka 5 menetelmän mukaisesti - muisti toteutetaan hakemistorakenteena, joka muodostuu puumaisesta hierarkiasta, jossa on useilla eri tasoilla olevia solmuja, jolloin yksittäinen solmu voi olla (i) trie-solmu, joka käsittää taulukon, jonka yksittäinen alkio voi sisältää puumaisessa hierarkiassa alempana olevan solmun osoitteen ja jonka 10 yksittäinen alkio voi myös olla tyhjä, tai (ii) sanko, joka sisältää ainakin yhden elementin siten, että sangon yksittäisen elementin tyyppi on valittu joukosta, joka käsittää tietoyksikön, osoittimen talletettuun tietoyksikköön, osoittimien toiseen hakemistorakenteeseen ja toisen hakemistorakenteen, - hakemistorakenteessa suoritetaan osoitelaskentaa siten, että 15 -(a) valitaan puumaisessa hierarkiassa ylimmällä tasolla olevas sa solmussa ennalta määrätty lukumäärä bittejä käytettyjen hakuavaimien muodostamasta bittijonosta, muodostetaan valituista biteistä hakusana, jonka perusteella haetaan kyseisessä solmussa seuraavan solmun osoite ja edetään mainittuun solmuun, 20 - (b) valitaan käytettyjen hakuavaimien muodostaman bittijonon vielä valitsematta olevien bittien joukosta ennalta määrätty lukumäärä bittejä ja muodostetaan valituista biteistä hakusana, jonka avulla haetaan jälleen uuden, alemmalla tasolla olevan solmun osoite sen solmun taulukosta, johon on edetty. 25. toistetaan askelta (b) kunnes päästään tyhjään alkioon tai kun nes uuden, alemmalla tasolla olevan solmun osoite on sangon osoite, tunnettu siitä, että trie-solmujen taulukot toteutetaan kiinteästi neljän alkion kokoisina : nelisolmuina ja ainakin osassa hakemistorakennetta korvataan keskenään 30 peräkkäisten nelisolmujen joukkoja kompressoiduilla solmuilla siten, että yksittäinen joukko, joka muodostuu keskenään peräkkäisistä nelisolmuista, joista jokaisesta on ainoastaan yksi osoite alemman tason nelisolmuun, korvataan kompressoidulla solmulla (CN), johon talletetaan osoite siihen nelisolmuun, johon korvattavassa joukossa alimpana oleva solmu osoittaa, tieto sen 35 hakusanan arvosta, jolla mainittu osoite löytyy sekä tieto niiden bittien koko 17 102425 naislukumäärästä, joista korvattavassa joukossa muodostetaan hakusanat.
2. Patenttivaatimuksen 1 mukainen menetelmä, tunnettu siitä, että korvausta suoritetaan koko hakemistorakenteessa siten, että kaikki mainitut joukot korvataan kompressoiduilla solmuilla.
3. Patenttivaatimuksen 1 mukainen menetelmä, tunnettu siitä, että korvaus suoritetaan myös joukolle, johon kuuluu vain yksi nelisolmu, jolloin talletettava bittien kokonaislukumäärä vastaa niiden bittien lukumäärää, joista mainitussa nelisolmussa muodostetaan hakusana.
4. Patenttivaatimuksen 1 mukainen menetelmä, tunnettu siitä, 10 että hakemistorakenteeseen muodostetaan useita peräkkäisiä kompressoituja solmuja siten, että ainakin ylimmällä tasolla olevaan kompressoituun solmuun kerätään käytettyä sanan pituutta vastaava lukumäärä tutkittavia hakuavain-bittejä.
5. Patenttivaatimuksen 1 mukainen menetelmä, tunnettu siitä, 15 että useita peräkkäisiä kompressoituja solmuja yhdistetään yhdeksi uudeksi kompressoiduksi solmuksi, jolloin uuteen solmuun talletetaan bittien lukumääräksi yhdistettävistä solmuista saatujen lukumäärien summa.
6. Patenttivaatimuksen 4 mukainen menetelmä, tunnettu siitä, että sellaisten peräkkäisten kompressoitujen solmujen muodostama ketju, 20 jossa ainakin kahdessa ylimmäisessä solmussa tutkittavien bittien lukumäärä vastaa käytettyä sanan pituutta korvataan yhdellä kokoavalla solmulla (CN4), joka sisältää: - osoitteen siihen solmuun, johon ketjussa alimpana ollut solmu sisälsi osoitteen, 25. ketjun solmuista saadun tutkittavien bittien lukumäärän summan, ja - peräkkäisjärjestyksessä ketjun solmujen sisältämät hakusana-arvot.
7. Patenttivaatimuksen 1 mukainen menetelmä, tunnettu siitä, että muistin kaikissa kompressoimattomissa nelisolmuissa ylläpidetään vähintään kaksi osoitetta alemman tason solmuun.
8. Menetelmä muistin toteuttamiseksi, johon muistiin tieto talletetaan tietoyksikköinä, joista jokaiselle varataan muistissa oma muistitilansa, jonka menetelmän mukaisesti - muisti toteutetaan hakemistorakenteena, joka muodostuu puumaisesta hierarkiasta, jossa on useilla eri tasoilla olevia solmuja, jolloin yksittäinen 35 solmu voi olla (i) sisäsolmu, joka käsittää taulukon, jonka yksittäinen alkio voi 18 102425 sisältää puumaisessa hierarkiassa alempana olevan solmun osoitteen ja jonka yksittäinen alkio voi myös olla tyhjä, tai (ii) lehti, joka sisältää ainakin yhden elementin, jonka tyyppi on yksi joukosta, joka käsittää osoittimen talletettuun tietoyksikköön ja osoittimen toisen hakemistorakenteen solmuun, 5. hakemistorakenteessa suoritetaan osoitelaskentaa siten, että - (a) valitaan puumaisessa hierarkiassa ylimmällä tasolla olevassa solmussa ennalta määrätty lukumäärä bittejä käytettyjen hakuavaimien muodostamasta bittijonosta, muodostetaan valituista biteistä hakusana, jonka perusteella haetaan kyseisessä solmussa seuraavan solmun osoite ja edetään 10 mainittuun solmuun, - (b) valitaan käytettyjen hakuavaimien muodostaman bittijonon vielä valitsematta olevien bittien joukosta ennalta määrätty lukumäärä bittejä ja muodostetaan valituista biteistä hakusana, jonka avulla haetaan jälleen uuden, alemmalla tasolla olevan solmun osoite sen solmun taulukosta, johon on edet- 15 ty, - toistetaan askelta (b) kunnes päästään tyhjään alkioon tai kunnes uuden, alemmalla tasolla olevan solmun osoite on lehden osoite, tunnettu siitä, että sisäsolmujen taulukot toteutetaan kiinteästi neljän alkion kokoisina 20 nelisolmuina ja ainakin osassa hakemistorakennetta korvataan keskenään peräkkäisten nelisolmujen joukkoja kompressoiduilla solmuilla siten, että yksittäinen joukko, joka muodostuu keskenään peräkkäisistä nelisolmuista, joista jokaisesta on ainoastaan yksi osoite alemman tason nelisolmuun, korvataan kompressoidulla solmulla (CN), johon talletetaan osoite siihen nelisol- 25 muun, johon korvattavassa joukossa alimpana oleva solmu osoittaa, tieto sen hakusanan arvosta, jolla mainittu osoite löytyy sekä tieto niiden bittien kokonaislukumäärästä, joista korvattavassa joukossa muodostetaan hakusanat.
9. Patenttivaatimuksen, 8 mukainen menetelmä, tunnettu siitä, *: että korvausta suoritetaan koko hakemistorakenteessa siten, että kaikki mai- 30 nitut joukot korvataan kompressoiduilla solmuilla.
10. Patenttivaatimuksen 8 mukainen menetelmä, tunnettu siitä, että korvaus suoritetaan myös joukolle, johon kuuluu vain yksi nelisolmu, jolloin talletettava bittien kokonaislukumäärä vastaa niiden bittien lukumäärää, joista mainitussa nelisolmussa muodostetaan hakusana.
11. Patenttivaatimuksen 8 mukainen menetelmä, tunnettu siitä, 19 102425 että hakemistorakenteeseen muodostetaan useita peräkkäisiä kompressoituja solmuja siten, että ainakin ylimmällä tasolla olevaan kompressoituun solmuun kerätään käytettyä sanan pituutta vastaava lukumäärä tutkittavia hakuavain-bittejä.
12. Patenttivaatimuksen 8 mukainen menetelmä, tunnettu siitä, että useita peräkkäisiä kompressoituja solmuja yhdistetään yhdeksi uudeksi kompressoiduksi solmuksi, jolloin uuteen solmuun talletetaan bittien lukumääräksi yhdistettävistä solmuista saatujen lukumäärien summa.
13. Patenttivaatimuksen 11 mukainen menetelmä, tunnettu siitä, 10 että sellaisten peräkkäisten kompressoitujen solmujen muodostama ketju, jossa ainakin kahdessa ylimmäisessä solmussa tutkittavien bittien lukumäärä vastaa käytettyä sanan pituutta korvataan yhdellä kokoavalla solmulla (CN4), joka sisältää: - osoitteen siihen solmuun, johon ketjussa alimpana ollut solmu sisälsi 15 osoitteen, - ketjun solmuista saadun tutkittavien bittien lukumäärän summan, ja - peräkkäisjärjestyksessä ketjun solmujen sisältämät hakusana-arvot.
14. Patenttivaatimuksen 8 mukainen menetelmä, tunnettu siitä, että muistin kaikissa kompressoimattomissa nelisolmuissa ylläpidetään vähin- 20 tään kaksi osoitetta alemman tason solmuun. 20 102425
FI971066A 1997-03-14 1997-03-14 Menetelmä muistin toteuttamiseksi FI102425B (fi)

Priority Applications (5)

Application Number Priority Date Filing Date Title
FI971066A FI102425B (fi) 1997-03-14 1997-03-14 Menetelmä muistin toteuttamiseksi
EP98908122A EP0970430A1 (en) 1997-03-14 1998-03-04 Method for implementing an associative memory based on a digital trie structure
PCT/FI1998/000191 WO1998041932A1 (en) 1997-03-14 1998-03-04 Method for implementing an associative memory based on a digital trie structure
AU66239/98A AU6623998A (en) 1997-03-14 1998-03-04 Method for implementing an associative memory based on a digital trie structure
US09/389,498 US6115716A (en) 1997-03-14 1999-09-03 Method for implementing an associative memory based on a digital trie structure

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
FI971066 1997-03-14
FI971066A FI102425B (fi) 1997-03-14 1997-03-14 Menetelmä muistin toteuttamiseksi

Publications (4)

Publication Number Publication Date
FI971066A0 FI971066A0 (fi) 1997-03-14
FI971066A FI971066A (fi) 1998-09-15
FI102425B1 FI102425B1 (fi) 1998-11-30
FI102425B true FI102425B (fi) 1998-11-30

Family

ID=8548388

Family Applications (1)

Application Number Title Priority Date Filing Date
FI971066A FI102425B (fi) 1997-03-14 1997-03-14 Menetelmä muistin toteuttamiseksi

Country Status (4)

Country Link
EP (1) EP0970430A1 (fi)
AU (1) AU6623998A (fi)
FI (1) FI102425B (fi)
WO (1) WO1998041932A1 (fi)

Families Citing this family (28)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
FI982095A (fi) 1998-09-29 2000-03-30 Nokia Networks Oy Menetelmä muistin toteuttamiseksi ja muistijärjestely
FI991261A (fi) 1999-06-02 2000-12-03 Nokia Networks Oy Trie-rakenteeseen perustuva funktionaalinen muisti
FI991262A (fi) 1999-06-02 2000-12-03 Nokia Networks Oy Digitaaliseen trie-rakenteeseen perustuva muisti
GB2367917A (en) 2000-10-12 2002-04-17 Qas Systems Ltd Retrieving data representing a postal address from a database of postal addresses using a trie structure
US7908242B1 (en) 2005-04-11 2011-03-15 Experian Information Solutions, Inc. Systems and methods for optimizing database queries
US8005759B2 (en) 2006-08-17 2011-08-23 Experian Information Solutions, Inc. System and method for providing a score for a used vehicle
US7912865B2 (en) 2006-09-26 2011-03-22 Experian Marketing Solutions, Inc. System and method for linking multiple entities in a business database
US8036979B1 (en) 2006-10-05 2011-10-11 Experian Information Solutions, Inc. System and method for generating a finance attribute from tradeline data
US8606666B1 (en) 2007-01-31 2013-12-10 Experian Information Solutions, Inc. System and method for providing an aggregation tool
US8285656B1 (en) 2007-03-30 2012-10-09 Consumerinfo.Com, Inc. Systems and methods for data verification
WO2008147918A2 (en) 2007-05-25 2008-12-04 Experian Information Solutions, Inc. System and method for automated detection of never-pay data sets
US9690820B1 (en) 2007-09-27 2017-06-27 Experian Information Solutions, Inc. Database system for triggering event notifications based on updates to database records
US8312033B1 (en) 2008-06-26 2012-11-13 Experian Marketing Solutions, Inc. Systems and methods for providing an integrated identifier
US9152727B1 (en) 2010-08-23 2015-10-06 Experian Marketing Solutions, Inc. Systems and methods for processing consumer information for targeted marketing applications
US9147042B1 (en) 2010-11-22 2015-09-29 Experian Information Solutions, Inc. Systems and methods for data verification
US9483606B1 (en) 2011-07-08 2016-11-01 Consumerinfo.Com, Inc. Lifescore
US9853959B1 (en) 2012-05-07 2017-12-26 Consumerinfo.Com, Inc. Storage and maintenance of personal data
US9697263B1 (en) 2013-03-04 2017-07-04 Experian Information Solutions, Inc. Consumer data request fulfillment system
US10102536B1 (en) 2013-11-15 2018-10-16 Experian Information Solutions, Inc. Micro-geographic aggregation system
US9529851B1 (en) 2013-12-02 2016-12-27 Experian Information Solutions, Inc. Server architecture for electronic data quality processing
US10262362B1 (en) 2014-02-14 2019-04-16 Experian Information Solutions, Inc. Automatic generation of code for attributes
US9576030B1 (en) 2014-05-07 2017-02-21 Consumerinfo.Com, Inc. Keeping up with the joneses
US10445152B1 (en) 2014-12-19 2019-10-15 Experian Information Solutions, Inc. Systems and methods for dynamic report generation based on automatic modeling of complex data structures
US10678894B2 (en) 2016-08-24 2020-06-09 Experian Information Solutions, Inc. Disambiguation and authentication of device users
US11227001B2 (en) 2017-01-31 2022-01-18 Experian Information Solutions, Inc. Massive scale heterogeneous data ingestion and user resolution
US10963434B1 (en) 2018-09-07 2021-03-30 Experian Information Solutions, Inc. Data architecture for supporting multiple search models
US11941065B1 (en) 2019-09-13 2024-03-26 Experian Information Solutions, Inc. Single identifier platform for storing entity data
US11880377B1 (en) 2021-03-26 2024-01-23 Experian Information Solutions, Inc. Systems and methods for entity resolution

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5276868A (en) * 1990-05-23 1994-01-04 Digital Equipment Corp. Method and apparatus for pointer compression in structured databases
CA2117846C (en) * 1993-10-20 2001-02-20 Allen Reiter Computer method and storage structure for storing and accessing multidimensional data
US5848416A (en) * 1994-06-06 1998-12-08 Nokia Telecommunications Oy Method and apparatus for storing and retrieving data and a memory arrangement
DE69422935T2 (de) * 1994-06-30 2000-08-17 Ibm Verfahren und vorrichtung zum vergleichen von datensequenzen variabler länge
JP3152868B2 (ja) * 1994-11-16 2001-04-03 富士通株式会社 検索装置および辞書/テキスト検索方法

Also Published As

Publication number Publication date
FI971066A (fi) 1998-09-15
WO1998041932A1 (en) 1998-09-24
FI102425B1 (fi) 1998-11-30
AU6623998A (en) 1998-10-12
WO1998041932A8 (en) 1999-06-03
FI971066A0 (fi) 1997-03-14
EP0970430A1 (en) 2000-01-12

Similar Documents

Publication Publication Date Title
FI102425B (fi) Menetelmä muistin toteuttamiseksi
FI102426B (fi) Menetelmä muistin toteuttamiseksi
FI102424B (fi) Menetelmä muistin toteuttamiseksi
US6115716A (en) Method for implementing an associative memory based on a digital trie structure
JP2512661B2 (ja) 非バイナリ・ハイパ―キュ―ブ形式のコンピュ―タ・システムおよびネットワ―クにおける複数ノ―ドの接続方法
CN107153647B (zh) 进行数据压缩的方法、装置、系统和计算机程序产品
JP4514771B2 (ja) カップルドノードツリーの最長一致/最短一致検索装置、検索方法及びプログラム
Andersson Sublogarithmic searching without multiplications
Abraham et al. On space-stretch trade-offs: Lower bounds
Mishra et al. PETCAM—A power efficient TCAM architecture for forwarding tables
Stojmenović Multiplicative circulant networks topological properties and communication algorithms
Hett et al. MORE: an alternative implementation of BDD packages by multi-operand synthesis
Han Improved fast integer sorting in linear space
Jansson et al. Linked dynamic tries with applications to LZ-compression in sublinear time and space
Chien et al. Geometric BWT: compressed text indexing via sparse suffixes and range searching
Chakraborty et al. Space-efficient algorithms for maximum cardinality search, its applications, and variants of BFS
Arroyuelo et al. Succinct dynamic cardinal trees
Hoyer A general technique for implementation of efficient priority queues
OLIVIE A study of balanced binary trees and balanced one-two trees
Park et al. An efficient IP address lookup algorithm based on a small balanced tree using entry reduction
Sumigawa et al. Storing partitions of integers in sublinear space
El-Hajj et al. Parallel association rule mining with minimum inter-processor communication
Franceschini et al. Optimal cache-oblivious implicit dictionaries
Feigenblat et al. A grouping approach for succinct dynamic dictionary matching
Geissmann et al. Cache oblivious minimum cut

Legal Events

Date Code Title Description
MA Patent expired