NO332645B1 - Database - Google Patents

Database

Info

Publication number
NO332645B1
NO332645B1 NO20051945A NO20051945A NO332645B1 NO 332645 B1 NO332645 B1 NO 332645B1 NO 20051945 A NO20051945 A NO 20051945A NO 20051945 A NO20051945 A NO 20051945A NO 332645 B1 NO332645 B1 NO 332645B1
Authority
NO
Norway
Prior art keywords
key
decision
index
node
keys
Prior art date
Application number
NO20051945A
Other languages
English (en)
Other versions
NO20051945L (no
Inventor
Duncan Gunther Pauly
Original Assignee
Bernard Consulting Ltd
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
Publication of NO20051945L publication Critical patent/NO20051945L/no
Application filed by Bernard Consulting Ltd filed Critical Bernard Consulting Ltd
Publication of NO332645B1 publication Critical patent/NO332645B1/no

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/22Indexing; Data structures therefor; Storage structures
    • G06F16/2228Indexing structures
    • G06F16/2255Hash tables
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/22Indexing; Data structures therefor; Storage structures
    • G06F16/2228Indexing structures
    • G06F16/2246Trees, e.g. B+trees
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/22Indexing; Data structures therefor; Storage structures
    • G06F16/2228Indexing structures
    • G06F16/2272Management thereof

Abstract

Det er tilveiebragt en database hvor en indeks (2) for databasen er anordnet som en hierarkisk struktur av knutepunkt som navigeres under et søk inntil en konklusjonsmengde nås, og strukturen er organisert slik at det trekkes slutninger om nøkkelinformasjon som er relatert til knutepunkter fra posisjonen av knutepunktet i strukturen.

Description

Den foreliggende oppfinnelsen vedrører en fremgangsmåte til indeksering, plassering av informasjon inn i, og forespørring av en database. Særlig muliggjør oppfinnelsen effektiv søking etter skalare data innenfor et datalagringssystem.
Skalare datatyper inkluderer f.eks. logiske data, tekststrenger, nummeriske data og data for dato-tidspunkt.
Selv om dataprosessorer er raske er det inneffektivt og tidkrevende å søke gjennom alle dataene som befinner seg i et lagringssystem for å finne et bestemt dataelement som har en spesifisert egenskap eller et utvalg av egenskaper. Videre er det nesten uunngåelig at dataene vil bli lagret i masselagringsmedier, og dette gir opphav til forsinkelser på grunn av diskaksesshastighet sammenlignet med CPU-hastighet og aksess til halvlederminne. Det er mer effektivt å opprette en indeks slik at dataelementer kan gjenfinnes ved bruk av en søkenøkkel.
Indeksmekanismer krever opprettelse og vedlikehold av en intern indeksstruktur. Navigasjon og vedlikehold av denne strukturen medfører i seg selv en prosesseringskostnad. Kostnaden kan variere som en funksjon av indekseringsmekanismen som brukes. Den kan også variere ettersom størrelsen av databasen endres, eller ettersom f.eks. dataene i databasen endres fra tid til annen.
Et enkelt eksempel er i en database som lagrer kronologisk informasjon, så som fødselsdatoer. Designeren kan f.eks. strukturere dataene slik at data som er relatert til personer som er født før 2000 e. kr. er segregert fra data som er relatert til dem som er født etter 2000 e. kr. Denne strategien kan virke en stund, men det ses at antallet personer født før 2000 e. kr. er en avgrenset mengde, mens antallet født etter denne datoen er uavgrenset. Ettersom tiden går kan indekseringsnøkkelen således bli overflødig ettersom andelen av innganger som er relatert til personer født etter 2000 e. kr. øker.
Effektiviteten ved indekseringsmetoden kan bedømmes mot et antall attributter, så som: Størrelsen av indeksen. Store indekser krever mer tid for å navigere. De kan også kreve et økt antall datavekslinger eller leseoperasjoner som involverer overføring fra masselagringsmedier, så som harddiskstasjoner, og raskere minne, så som halvlederminne.
Strukturelle begrensninger av indeksen. En sterkt avgrenset struktur kan initialt gi fordeler, men lider under økte beregningskostnader hvis det er påkrevet å sette sammen indeksen på ny når databasen vokser for å romme mere data.
Nøkkeldatarestriksjoner påtvunget av indeksen. Den maksimale størrelse av nøklene eller datatypene for nøklene eller verdimengdene eller områdene som er representert av nøklene kan således begynne å påvirke ytelsen av indeksen ettersom den vokser eller ettersom databasen blir oppfylt med data.
Nøkkelgjenfinningsrestriksjoner påtvunget av indeksen. Enkelte indekser tillater kun eksakt nøkkeloverensstemmelse, mens andre tillater overensstemmelse med området.
Vekstbegrensninger for indeksen. Indeksen kan være begrenset av en maksimumsstørrelse.
Samtidighetsbegrensninger. Indeksen kan enten tillate eller hindre samtidig innsetting og gjenfinning av nøkkeldata.
US-5,664,179 beskriver et system og en metode for organisering av en database, hvor metoden benytter nøkkel kompresjon og rask indeksering for gjenfinning av noder, og hvor systemet omfatter en modifisert hoppelistedatastruktur med komprimerte søkenøkler som gir mindre bruk av minnet.
Kjente systemer i henhold til teknikkens stand bruker imidlertid typisk tregrafer med knutepunkter som inneholder ett eller flere dataelementer av nøkkeldata. For å utspørre databasen navigeres trærne ved å sammenligne nøkkelverdier ved hvert knutepunkt som er besøkt med en påkrevet søkenøkkel. Det er iboende i en slik design at hvert knutepunkt inkluderer helheten av en nøkkel som er assosiert med opprettelsen av knutepunktet, og følgelig kan «størrelsen» av knutepunktet uttrykt ved datalagring bli ganske stor.
Effektiviteten til slike indekser kan være avhengig av nøkkelstørrelsen og i hvilken orden data tilføyes til indeksen.
Videre krever enkelte metoder at trærne til enhver tid er «balansert» hvis de skal operere korrekt. Disse metodene kan påføre betydelige vedlikeholdskostnader for innsetting og sletting av nøkler, hvilket gjør dem uegnet til systemer med høyt gjennomløp.
Navigasjon
Ifølge et første aspekt av den foreliggende oppfinnelse er det tilveiebragt en fremgangsmåte til organisering av en database som har en indeks og data, hvor indeksen forespørres ved bruk av en søkenøkkel som omfatter minst et symbol, idet det minste ene symbol er representert av en flerhet av biter, for å lokalisere data som stemmer overens med søkekriteriet,karakterisert vedat indeksen er en hierarkisk struktur av beslutningsknutepunkter, idet strukturen til knutepunktene navigeres under et søk inntil det nås en konklusjon, og strukturen organiseres slik at nøkkelsymbolene ikke lagres ved et knutepunkt i strukturen, og hvert knutepunkt har mindre enn tre utgangsveier.
Det er således mulig å tilveiebringe en effektiv indeks struktur som muliggjør effektiv søking og oppdatering av databasen. Indeksstrukturen er mye mindre enn kjente indekser, fordi knutepunktene ikke lagrer hele nøkkelen som er assosiert med knutepunktet. Et knutepunkt behøver faktisk ikke å lagre noen nøkkel som er assosiert med det. Videre lagrer ikke knutepunktene beslutningsregler som er relatert til utspørringen av et knutepunkt. Dette er fordi reglene er globale ved at de deles av alle knutepunktene istedenfor at de er knutepunktspesifikke.
Hvert beslutningsknutepunkt foretar en binær beslutning. Det vil si at hvert knutepunkt kun har et maksimum på to utgangsveier.
Beslutningen som anvendes ved hvert knutepunkt er fortrinnsvis en enkel forespørsel. Med dette menes det at forespørselen sammenligner nøkkelen eller en del av nøkkelen med beslutningskriteriet ved et knutepunkt, og at, binært uttrykt, testen typisk (dog ikke nødvendigvis utelukkende) er om nøkkelen, eller en del av denne som blir testet, er større enn eller mindre enn beslutningskriteriet. Dette fjerner behovet for å lagre særtrekk ved søkenøkkelen innenfor selve strukturen av indeksen.
Hver utgang fra et knutepunkt kan peke på ytterligere et beslutningsknutepunkt, en konklusjonsmengde eller et nullresultat.
Hvis en utgang fra et knutepunkt peker på et annet knutepunkt, så fortsetter søket. Hvis imidlertid utgangen fra et knutepunkt peker på en konklusjonsmengde så er navigasjonen av indeksen generelt fullført.
Det er mulig at ingen resultater vil stemme overens med søkeuttrykkene, i hvilket tilfelle søket avsluttes med et nullresultat.
Hver «post» i databasen tilhører en konklusjonsmengde. Konklusjonsmengden peker i seg selv til dataene som tilfredsstiller de spesifikke søkekriterier, eller kan i enkelte tilfelle lagre selve dataene.
Den hierarkiske struktur i beslutningsknutepunktene kan anses som en beslutningsgraf. Beslutningsgrafen kan være av enhver vilkårlig størrelse og innvendig struktur. Beslutningsgrafen er imidlertid generelt en liten entitet uttrykt ved sin størrelse i et minne i en prosessor.
Under bruk holdes fortrinnsvis beslutningsgrafen innenfor det elektroniske minnet i en dataprosessor. Ved å holde en relativt liten beslutningsgraf i RAM, kan dataprosessoren raskt finne resultatene av en forespørsel. Særlig siden analysen av beslutningsgrafen ikke krever aksess til magnetiske lagringsmedier eller andre fysiske lagringsmedier, er aksesstider som er forbundet med slike medier eliminert, hvilket øker ytelsen.
Hver konklusjonsmengde kan fortrinnsvis kun nås ved hjelp av én enkelt rute gjennom beslutningsgrafen. Dette sikrer at alle nøklene i en konklusjonsmengde er tilpasset til en delt unik mengde av beslutninger.
Dataindekser kan, og må faktisk, utvikle seg over tid, og dette kan føre til nedsatt ytelse ettersom databasen vokser. Det er derfor nødvendig å tillate innsetting og sletting av data i konklusjonsmengder, og også opprettelse av nye konklusj onsmengder.
Hver konklusjonsmengde har fortrinnsvis en maksimumstørreIse. Maksimumstørrelsen er en brukerstyrt eller designerstyrt parameter. Størrelsen kan imidlertid fortrinnsvis relateres til størrelsen av data eller adresseringsblokker som brukes av en lagringsinnretning, så som et magnetisk lager som kan omfatte én eller flere harddisker. Ethvert datalager for direkte tilgang kan imidlertid brukes, så som optiske lagringsinnretninger.
Når en konklusjonsmengde nærmer seg eller når en forhåndsbestemt størrelse, blir et nytt beslutningsknutepunkt innsatt i beslutningstreet, og dataene som var i konklusjonsmengden blir på ny indeksert i nye konklusjonsmengder som er nådd via utgangsveiene fra det nye beslutningsknutepunktet. Det nye beslutningsknutepunktet innsettes i utgangsveien fra et knutepunkt som hadde pekt til den beslutningsmengden som ble for stor for sin maksimumsstørrelse.
Konklusjonsmengdene er således konstruert slik at de skal være ordentlige.
Beslutningsgrafen inneholder i seg selv ingen søkenøkkeldata. Alle nøkkeldata er implisert eller dedusert fra strukturen til beslutningsgrafen. Dette holder beslutningsgrafen kompakt. Dette betyr også at størrelsen av beslutningsgrafen er uavhengig av nøkkelstørrelsen.
En ytterligere fordel ved den foreliggende oppfinnelse er at det kan gjøres endringer i strukturen til beslutningsgrafen, og at disse endringene er lokale. Det vil si at kun ett eller noen få beslutningsknutepunkt påvirkes av endringen. Dette betyr at strukturell reorganisering ikke medfører en betydelig beregningsmessig kostnad.
Beslutningsknutepunktene er fortrinnsvis relatert til partier, og mer foretrukket relativt små partier, av nøkkelen. Dette har den konsekvens at beslutningsgrafen overveiende er uavhengig av nøkkelens struktur. Dette medfører også den fordel at beslutningsgrafen plasserer få, om noen, restriksjoner på nøkkelens struktur. Videre behøver det parti av nøkkelen som et knutepunkt er relatert til ikke å følge en strukturert orden når beslutningsgrafen navigeres. Partiet av den aktuelle nøkkelen behøver således ikke å gå fremover langs nøkkelen på en monoton måte ettersom grafen navigeres.
Beslutningsgrafen er fortrinnsvis strukturert slik at den semantiske orden av nøkkelsekvenser er bevart. Beslutningsgrafen kan således f.eks. struktureres slik at et første knutepunkt eller en mengde av knutepunkt tester en første bit eller en første gruppe av biter i en søkenøkkel, og at, ettersom beslutningsgrafen navigeres mot et konklusjonsmengde, bitene i nøkkelen som testes ved etterfølgende knutepunkt blir stadig mindre betydningsfulle. Beslutningsgrafen kan således navigeres for å lokalisere nøkler enten ved eksakt overensstemmelse eller ved områdeoverensstemmelse. Området kan være partielt eller fullstendig avgrenset under søket.
Strukturen til en beslutningsgraf, og særlig den kjensgjerning at endringer i strukturen er lokale, ved at de kun påvirker et knutepunkt eller to, istedenfor at de er globale, betyr at den beregningsmessige oppgave med å opprettholde beslutningsgrafen er generelt liten. Den lokale karakter av reorganiseringen gjør det lettere å sette inn, slette og gjenfinne data ved bruk av indeksen. Faktisk kan to eller flere av disse hendelsene forekomme samtidig.
Det er fortrinnsvis ingen funksjonell begrensning på størrelsen av beslutningsgrafen. Strukturen til indeksen gir opphav til en ordentlig økning i søketid ettersom beslutningsgrafen vokser for å gi plass til økte mengder data.
Ifølge et annet aspekt av den foreliggende oppfinnelsen er det tilveiebragt en database som har en indeks, og som er arrangert til å inneholde data og å gjøre det mulig å lokalisere dataene ved å utspørre indeksen ved bruk av en søkenøkkel, idet nøkkelen omfatter minst et symbol, idet symbolet eller hvert symbol er representert av en flerhet av biter, hvor indeksen er en hierarkisk struktur av beslutningsknutepunkter, idet strukturen til knutepunktene navigeres under et søk inntil en konklusjon nås, idet søkekriteriet for hvert knutepunkt er kodet ved posisjonen til knutepunktet inne i indeksen, og hvert knutepunkt har opptil to utgangsveier.
De lokale strukturelle endringer i indeksen letter samtidige hendelser med innsetting, sletting og gjenfinning innenfor indeksen.
Hvert dataelement inne i databasen kan fortrinnsvis tilhøre kun én beslutningsmengde.
Deling av beslutningsgrafer
Til tross for den sterke preferanse om at beslutningsgrafen bør befinne seg fullstendig innenfor halvlederminnet, kan det være at dette ikke alltid er mulig. Dette kan være fordi indeksen blir for stor, eller det kan være fordi vertsdataprosessoren implementerer en «virtuell maskin» omgivelse for databasen, slik at vertsdatamaskinen kan utføre flere oppgaver, og operasjonssystemet ikke allokerer tilstrekkelige minneressurser til databasen.
Under slike omstendigheter kan beslutningsgrafen holdes inne i minneblokkene på masselagringsinnretningen i datamaskinsystemet. Diskkontrollen administrerer disken med hensyn på diskrete blokker av data. Således, f.eks., hvis den minimale blokkstørrelse som brukes av diskkontrolleren er 64 Kbyte, så opptar en 40K indeks og en 60K indeks begge den samme lagringsplass på disken, nemlig en blokk, og tilsvarende opptar en 65K indeks og en 130K indeks også den samme lagringsplass, nemlig to blokker.
For å tilpasse seg til og arbeide med disse systemrestriksjonene må modifikasjonen av indeksen styres, siden størrelsen av indeksen vil øke ettersom nøkkelpopulasjonen inne i indeksen øker. For at indeksen skal kunne vokse er det således nødvendig med flere minneblokker.
I et første system for å la indeksen vokse når det er nødvendig å sette inn et nytt beslutningsknutepunkt og blokken er full, opprettes det en ny blokk, og det nye knutepunktet plasseres i den nye blokken. Beslutningsgrafen endres slik at det knutepunktet som peker til det nye knutepunktet også bevirker at den nye blokken blir hentet frem fra magnetlageret hvis denne blokken ikke allerede er resident i halvlederminnet. Navigasjonen fortsetter deretter fra det nye knutepunktet.
Denne fremgangsmåten er enkel, men inneffektiv, ettersom den sannsynligvis vil føre til opprettelsen av mange, muligens hundrevis, av tilnærmet tomme minneblokker fra hver fulle utgangsblokk. Det kan være at dette ikke anses som et problem med hensyn på plass, ettersom diskstasjoner kan inneholde fenomenale mengder data, men det kan bringe indeksens ytelse i fare ettersom flere I/O-operasjoner på disken er påkrevet for å navigere indeksen.
En foretrukket løsningsmåte er å opprette en ny blokk og deretter dele utgangsblokken (dvs. den fulle blokken) hovedsakelig likt mellom de to blokkene. Denne løsningsmåten krever at den opprinnelige blokken bli utspurt for å finne det knutepunktet som best deler blokken i to. Dette kan gjøres med en analyse fra begynnelsen av knutepunktene i blokken, eller ved løsningsmåter som er mer statistiske i sin natur. Således kan det f.eks. brukes en rekursiv algoritme som gjentatte ganger velger et testknutepunkt for delingen, beregner delingen av indeksen som er et resultat av valget av knutepunkt, og på basis av resultatet modifiserer valget av testknutepunkt inntil det er oppnådd en tilnærmet jevn fordeling.
Den annen løsningsmåte har den fordel at hver indeksblokk inneholder en betydelig populasjon av knutepunkter. Dette fører til en vesentlig mer effektiv bruk av minnet.
Mønsteriamføring
Som tidligere angitt lagrer kjente systemer helheten av en søkenøkkel som er assosiert med en gitt modus.
Det første og annet aspekt av den foreliggende oppfinnelse beskrev en trestruktur hvor knutepunktene ikke lagrer søkenøkkelen, men hvor nøkkeldataene er iboende i treets struktur.
Ifølge et tredje aspekt av den foreliggende oppfinnelse er det tilveiebragt en fremgangsmåte til utspørring av en database som har en indeks og data, og hvor indeksen forespørres ved bruk av en søkenøkkel for å lokalisere data som stemmer overens med søkekriteriene,karakterisert vedat indeksen er en hierarkisk struktur av beslutningsknutepunkter, idet strukturen navigeres inntil en konklusjonsmengde nås og hvor et knutepunkt kan inneholde en delsekvens av en nøkkel, mot hvilken en kandidatnøkkel kan sammenlignes for å bestemme en handling som skal foretas, og hvor det parti av nøkkelen som er lagret ved et knutepunkt i et (N+l)-te lag av indeksen er urelatert til det parti som er lagret i det foregående knutepunkt i det N-te lag.
Som her brukt er det parti av nøkkelen som er ved et (N+l)-te knutepunkt urelatert til det som er ved det N-te knutepunkt i den betydning at nøkkelpartiet ikke
beregnes ved valg av suksessive deler av nøkkelen på en nominelt varierende måte.
Det er således mulig å tilveiebringe en database hvor beslutningsknutepunktene kan opprettholdes relativt «små», siden hvert knutepunkt kun lager en delsekvens av en nøkkel istedenfor en hel nøkkel. Denne strukturen letter databasenavigasjon,
innsetting og gjenfinning ved mønsterjamføring.
Ifølge et fjerde aspekt av den foreliggende oppfinnelse er det tilveiebragt en database som har en indeks og data, og hvor indeksen forespørres ved bruk av en søkenøkkel for å lokalisere data som stemmer overens med søkenøkkelen,karakterisert vedat indeksen er en hierarkisk struktur av beslutningsknutepunkter, idet strukturen navigeres inntil en konklusjonsmengde nås, og hvor et knutepunkt kan inneholde en delsekvens av en nøkkel, mot hvilken en kandidatnøkkel kan sammenlignes for å bestemme en handling som skal foretas.
Forbedret mønsterjamføring
Innen prosessen med mønsterjamføring er det åpenbart at den beregningsmessige belastning ved mønsterjamføring er en funksjon av lengden av mønsteret som skal jamføres, og særlig at testing av overensstemmelsen for en kort tegnstreng eller symbolstreng er mindre beregningsmessig kostbar enn jamføring av en lang streng.
Videre avhenger databasens/indeksens effektivitet også av hvor godt nøkkelens populasjon er delt ved hvert knutepunkt, og hvor sannsynlig det er at en sekvens vil opptre innenfor en forespørsel.
Dette vises best ved å betrakte to nokså ekstreme eksempler. Anta at indeksen er organisert med navn på klienter og andre entiteter som et foretak kan ønske å korrespondere med.
En mønsterjamføringssekvens som opptrer ofte vil ikke tilstrekkelig redusere populasjonen av nøkler som skannes under en indeksforespørsel. Hvis f.eks. sekvensen som brukes ved mønsterjamføringen er «E», gitt at det er sannsynlig at denne opptrer i de fleste nøkler, gir dette således liten hjelp ved deling av nøkkelpopulasjonen.
Som et ytterligere ekstremt eksempel vil en sekvens som opptrer sjelden heller ikke redusere populasjonen av nøkler som må skannes i de fleste forespørsler. Det er således f.eks. usannsynlig at «ZZ» opptrer i en forespørsel, og dette er således ikke en god kandidat til en mønsterjamføringsforespørsel.
Som angitt ovenfor, jo flere tegn som er involvert i en sekvens, jo mindre sannsynlig er det at sekvensen vil opptre i en nøkkel. Et enkelt tegn vil således sannsynligvis opptre i en nøkkel med mange tegn, mens det er mye mindre sannsynlig at en spesifikk sekvens på fire tegn vil opptre.
I et ideelt tilfelle vil forespørselsstrengen dele populasjonen av nøkler som nås fra et knutepunkt hovedsakelig jevnt.
Et problem med ASCII-tegnsettet er at det ofte er vanskelig å finne en egnet sekvens som bruker alle 255 tegn i settet, ettersom det er mange tegn, men sannsynligheten for at enkelte tegn opptrer er mye større enn for mange andre tegn.
Kombinasjoner av doble tegn kan imidlertid være sjeldne.
Ifølge et femte aspekt av den foreliggende oppfinnelse er det tilveiebragt en fremgangsmåte til lagring av en nøkkel eller en del av denne i en indeks i en database, hvor elementene i nøkkelen avbildes fra en første mengde som utgjør en liste over i det minste enkelte av de verdier som elementene kan anta til en annen mengde som er mindre enn den første mengde.
Antallet forskjellige tegn som kan opptre i nøkkelen er således redusert. Avbildningen er ikke unik, men hvis avbildningen velges formålstjenelig kan sannsynligheten for at et enkelt tegn i den annen mengde forekommer være temmelig høy, og kombinasjoner av to eller flere tegn kan brukes til sekvenser.
Avbildningen anvendes fortrinnsvis på nøkkelen før navigering av beslutningsgrafen for operasjoner med innsetting, fjerning eller forespørsel.
Det er fordelaktig at enten den opprinnelige nøkkelverdien eller den konverterte nøkkelverdien (som er mindre med hensyn på plass som er nødvendig for å lagre den) kan lagres i konklusjonsmengden.
Ifølge et sjette aspekt av den foreliggende oppfinnelse er det tilveiebragt en database hvor nøklene avbildes på et redusert område av verdier før indeksnavigasjon.
Nøkkelkompre sjon
Som angitt ovenfor, enkelte databaser ifølge teknikkens stand lagrer hele beslutnings-/søkenøkkelen ved hvert beslutningsknutepunkt. Dette kan danne en relativt stor indeksstruktur, gitt at nøklene i seg selv kan bli store. Det har også blitt bemerket at i en database som utgjør en utførelse av den foreliggende oppfinnelse, så behøver ikke søkenøklene å lagres ved hvert beslutningsknutepunkt, selv om det kan være ønskelig å lagre ett parti av søkenøkkelen ved et beslutningsknutepunkt. Valgmuligheten med å lagre partier av søkenøkkelen resulterer likevel i et relativt kompakt databasebeslutningstre som kan navigeres raskt. Oppfinneren har imidlertid innsett at nøkkelen ikke behøver å lagres i indeksen i sin egentlige form. Nøkkelen kan således kodes til en form som opptar redusert plass.
Ifølge et syvende aspekt av den foreliggende oppfinnelse er det tilveiebragt en fremgangsmåte til koding av nøkler i en database, hvor nøkkeldata lagres i minst én konklusjonsmengde i en kodet form for å redusere behovet for lagringsplass i nøklene.
Det er således mulig å tilveiebringe en mer kompakt konklusjonsmengde. Databasen støtter eksakt overensstemmelse.
Det er viktig at avbildningsfunksjonen er ordentlig, dvs. at når avbildningsfunksjonen anvendes på en bestemt nøkkel, returnerer den alltid samme resultat.
Det er imidlertid ikke nødvendig at avbildningen er unik. Der hvor avbildningsalgoritmen gir en høy grad av kompresjon blir det faktisk svært usannsynlig at avbildningen vil være unik.
Det er fordelaktig at det brukes minst to forskjellige avbildningsalgoritmer. Bruken av forskjellig avbildning kan begrenses til bruk i konklusjonsmengdene.
Kjente og publiserte avbildningsalgoritmer, så som f.eks. CFC32 og Adler 32, kan brukes for å implementere avbildningsfunksjonene.
Avbildningsfunksjonen er fortrinnsvis anordnet til å returnere en verdi fra et område av positive heltall (inkludert null) med en størrelse som minst er så stor som populasjonen av distinkte nøkler som befinner seg i indeksen. Således har hver nøkkel muligheten for å bli avbildet av algoritmen til en annen verdi, og ingen nøkler er for lange.
Avbildningen kan f.eks. beregnes fra en skalar av lengde N byte ved bruk av følgende funksjon:
[(K° x 31<A>(N-1)) + (K<1>x 31<A>(N-2))... + K^Jmodulo R
hvor KN er den n-te byteverdi (0..255) for nøkkelen K.
R er den minste potensen av 2 som er større enn størrelsen av populasjonen av distinkte nøkler som befinner seg i indeksen.
Foreslåtte verdier for R er
21<6>for indekser som inneholder mindre enn 65000 nøkler.
2<32>for indekser som inneholder mindre enn 4 x IO<9>nøkler.
2 for indekser som inneholder mindre enn 1,8 x IO<19>nøkler.
Nøkkelinformasjonen som lagres ved en beslutningsmengde kan med fordel være den konvensjonelle nøkkel som er lagret i et kjent system, eller er fortrinnsvis en ytterligere kodet versjon av nøkkelen hvor den avbildningsfunksjonen som anvendes er forskjellig fra den funksjonen som brukes til å kode nøkler i beslutningsgrafen.
Kvalifikator
En indeksforespørsel kan føre til mange nøkkeltreff. Hvert resultat som returneres fra forespørselen kan resultere i en gjenfinning av de assosierte data fra en massedatalagringsinnretning. Siden dette typisk er en harddisk, så kan en disk I/O-operasjon være påkrevet for hvert resultat som returneres fra forespørselen.
Det kan være at ikke alle dataene som hentes frem er nødvendige.
Betrakt f.eks. tilfellet med en multinasjonal organisasjon som ønsker å forespørre sin personelldatabase for å finne antallet ansatte som er basert i London og som er innenfor et spesifikt lønnsområde. En indeks som kun er basert på lokalisering eller på lønn kan returnere mange ansatte ved en gitt forespørsel. Det er kun resultatet fra en OG-forespørsel som reduserer forespørselens størrelse.
Det er kjent å modifisere databaseindekser for denne type forespørsel ved å lagre flere enn én nøkkel i indeksen. Nøkkelen kan således anses som en sammensatt nøkkel eller komposittnøkkel. Sjansene for at en kandidat (dvs. en inngang i databasen) stemmer overens med to nøkler er sterkt redusert sammenlignet med sjansene for at en kandidat stemmer overens med én nøkkel, og dermed reduseres antallet treff som returneres ved forespørselen, og færre disk I/O-operasjoner er nødvendige.
Det er kjent å frembringe disse komposittnøklene ved å kjede sammen nøkler. Det annet søkekriterium tilføyes simpelthen til det første ved tidspunktet for opprettelse av indeksen. De individuelle nøkler kan imidlertid være ganske lange, og frembringelse av en indeks ved sammenkjedede nøkler kan resultere i at indeksen faktisk blir meget stor.
Søkeren har innsett at nøkkeldata ikke behøver å lagres i sin opprinnelige form, men kan faktisk kodes eller representeres av et ord eller en bitsekvens med betydelig redusert lengde. Den første nøkkelen i indeksen, og hver etterfølgende nøkkel i en sammenkjedet nøkkel, kan representeres i en slik modifisert form.
Ifølge et åttende aspekt av den foreliggende oppfinnelse er det tilveiebragt en fremgangsmåte til organisering av en database, hvor indeksnøkkelen er en komposittnøkkel som inneholder minst én nøkkel, og hvor én eller flere nøkler er representert i en komprimert form.
Fortrinnsvis er en flerhet av nøkler tilveiebragt i komprimert form.
Nøklene komprimeres fortrinnsvis ved å avbilde dem fra en ukomprimert form til en komprimert form. Avbildningen behøver ikke å være unik, men må være ordentlig. Egnet avbildning kan utføres ved bruk av hashing-algoritmer.
Det er således på grunn av den kjensgjerning at forskjellige nøkler kan representeres med den samme reduserte representasjon, en fare for at en forespørsel vil returnere både resultater som stemmer overens med forespørselen og enkelte resultater som ikke stemmer overens med forespørselen. Imidlertid, under antagelse av at det brukes en god randomiserende hash-koding, er sannsynligheten for en feilaktig overensstemmelse for én nøkkel 1/255, men for N kvalifikatorer er sannsynligheten for en feilaktig overensstemmelse (1/255)N.
Feilfrekvensen er således generelt liten.
Det er fordelaktig at alle treff som returneres inspiseres for å validere dataene og fjerne eventuelle feilaktig returnerte resultater.
Ved utførelse av innsetting, fjerning eller gjenfinning, må den nye nøkkelen komprimeres ved bruk av den samme nøkkelomformingsprosess som ble brukt til å bygge opp indeksen.
Det er foretrukket at hvert ytterligere element etter det første element i en sammenkjedet nøkkel kan representeres som en «kvalifikator». Hver kvalifikator er fortrinnsvis kun 1 byte lang.
Således, ved å sammenligne den foreliggende oppfinnelse med kjent teknikk, opptar en kjent sammenkjedet nøkkel som inneholder åtte nøkkelelementer, hvert på 8 byte, 64 byte. Ved den foreliggende oppfinnelse kan hovednøkkelen representeres i et ukomprimert format, hvilket opptar 8 byte, mens de syv ytterligere nøklene respektivt kan representeres av en kvalifikator på 1 byte. Den samlede nøkkellengden blir således nå kun 15 byte.
Kvalifikatornøklene er valgfrie, og ingen, noen eller alle nøklene kan anvendes under en indeksforespørsel, fordi de ikke påvirker navigasjonen i indeksstrukturen. Testingen av hit mot kvalifikatornøklene utføres ved skanning av konklusj onsmengdene.
Det vil derfor forstås at dette aspekt av oppfinnelsen kan brukes sammen med konvensjonelle databasestrukturer, så som et B-tre, eller med de strukturer som er beskrevet et annet sted i denne søknaden.
I tillegg kan kvalifikatorer brukes sammen med en indeks hvor det er trukket slutning om informasjonen som er relatert til et knutepunkt fra posisjonen til et knutepunkt istedenfor at informasjonen er eksplisitt definert av eller befinner seg i selve knutepunktet (så som en indeks som utgjør en utførelse av det første aspekt av den foreliggende oppfinnelse).
Ifølge et niende aspekt av den foreliggende oppfinnelse er det tilveiebragt en database hvor indeksen inneholder minst én nøkkel, og hvor én eller flere nøkler er representert i en komprimert form.
Avgrenset nøkkel
Som her tidligere angitt kan effektiviteten til databaseindekser være svært avhengig av de nøkkelkarakteristika som brukes sammen med dem, hvilket potensielt fører til inneffektive indekseringssystemer hvor nøkkelverdien er kontinuerlig økende eller minkende. Et eksempel på en slik uavgrenset nøkkel er dato/tidspunkt-nøkkelen som konstant øker med den inneværende tid. Ettersom disse nøklene tilføyes til indeksen forårsaker de at det opprettes nye områder i indeksen, og ettersom de gamle nøklene slettes fra indeksen, kan de forårsake fragmentering hvor foreldede områder av indeksen ikke kan brukes på nytt for nye nøkkelverdier. Det ville være svært fordelaktig om indeksstrukturen kunne organiseres på en slik måte at bruken av en uavgrenset nøkkel ikke forårsaket at indeksen ble ubalansert.
Ifølge et tiende aspekt av den foreliggende oppfinnelse er det tilveiebragt en fremgangsmåte til navigering av en database med et område eller en verdimengde av nøkler mellom en første nøkkel og en annen nøkkel som representerer grenser for området, og hvor nøklene er avbildet til et redusert område, og hvis nøklenes orden ikke er bevart under avbildningen, gjøres det et søk i det avbildede rommet som er større enn den største av nøklene og mindre enn den minste av nøklene.
Det er fordelaktig at nøkkelen opereres ved hjelp av en hashing-funksjon eller en modulofunksjon slik at nøklene fordeles hovedsakelig likt gjennom databasen. Således blir f.eks. en uavgrenset dato/tidspunkt (K) (som f.eks. kan være antallet millisekunder siden 1. januar 1970) konvertert til (K modulo N) hvor N er den valgte modulo for indeksen. Konverteringsnøkkelverdien vil således alltid falle innenfor området 0 til (N-l).
Moduloverdien som anvendes på nøklene er fortrinnsvis større enn eller lik det maksimale antall av distingte nøkkelverdier som vil befinne seg innenfor indeksen. Det må imidlertid påpekes at denne tilstanden ikke er obligatorisk.
Konklusj onsmengdene (knutepunkter ved enden av treindeksen) inneholder fortrinnsvis nøkkelen i uavbildet form. Dette reduserer muligheten for feil, siden søkenøkkelen da kan sammenlignes med søkedata i konklusjonsmengden, begge i deres egentlige form, slik at avbildningsfeil kan unngås.
Oppfinnelsen kan anvendes på konvensjonelle B-trær eller andre indekser.
Ifølge et ellevte aspekt ved den foreliggende oppfinnelse er det en database som inkluderer en fremgangsmåte til koding av uavgrensede nøkler til bruk innenfor en database,karakterisert vedat hver nøkkel prosesseres av en operator som avbilder nøkkelen på et avgrenset område.
Transientnøkler
Det er enkelte ganger et behov for å håndtere data hvis validitet eller nytte er begrenset til et hvist tidsområde, eller andre verdiområder. I databaser ifølge kjent teknikk blir slike «transiente» data håndtert mye likt normale data, og som en følge av dette er det vanligvis nødvendig å eksplisitt slette foreldede transiente nøkkeldata eller å fjerne seksjoner av indeksen hvor det befinner seg slike foreldede nøkkeldata. Slike operasjoner kan være svært prosessorintensive, og kan medføre en betydelig ytelseskostnad inne i databasen, eller kan påtvinge designrestriksjoner. Ifølge et tolvte aspekt av den foreliggende oppfinnelse er det tilveiebragt en fremgangsmåte til administrasjon av nøkler innenfor en database,karakterisert vedat nøklene inkluderer et datafelt som angir en varighet for hvilken nøkkelen og dens assosierte data bør opprettholdes innenfor databasen.
Enkelte eller alle konklusjonsmengdene kan således modifiseres til å inkludere data som viser den varighet som en nøkkel og dens assosierte egenskaper kan anses som gyldig.
Utløpte nøkler blir fortrinnsvis ikke aktivt fjernet fra konklusj onsmengdene, men de blir tilgjengelige for overskriving med nye data så snart de har utløpt. Det er således ikke noe behov for eksplisitt å fjerne transiente nøkler, og følgelig er ingen utførelseskostnad involvert i en sletteprosess. Isteden, så snart markøren viser at dataene ikke lengre er gyldige, blir plassen som de opptar gjort tilgjengelig for gjenbruk.
Selv om det ville være mulig å tilveiebringe en eksplisitt dato- og tidsmarkør for de data som det ikke lenger ville bli detektert informasjon om innenfor konklusjonsmengden, kunne denne formen for koding oppta en uakseptabelt stor mengde plass. I en foretrukket utførelse av den foreliggende oppfinnelse er nøkkelen assosiert med en aldersenhet, som gir et mål på sin inneværende alder, og en aldersgrense som angir den alder hvor dataene og nøkkelen ikke lenger er gyldige og blir tilgjengelige for overskriving.
Aldersenheten er fortrinnsvis en variabel, hvis lengde representerer antallet sekunder i en enkelt aldersenhet. Aldersgrensen representerer antallet aldersenheter etter hvilken en nøkkel må fjernes fra indeksen.
Hver konklusjonsmengde inneholder fortrinnsvis en aldersbase som er et dato/tidspunkt-merke av den nyligst innsatte/oppdaterte inngangen i denne mengden. Når konklusjonsmengden aksesseres blir alderen til hver inngang beregnet, og resultatene av beregningene blir fortrinnsvis lagret i et inngangsaldersfelt. Det kan gjøres en sammenligning mellom inngangs alderen og aldersgrensen for å bestemme når inngangen kan skrives over.
Bestemmelse av duplisiteten til skalare data
Som her tidligere angitt blir kjente (B-tre) beslutningsgrafer navigert ned til løvblokker som inneholder nøkkelverdien og pekerinformasjonen. Navigering av beslutningsindeksen kan kreve én eller flere operasjoner med diskinngang/utgang for å finne en valgt nøkkel. Hvis indeksen brukes til å registrere eksistensen av unike nøkkelkombinasjoner, hvor duplikate kombinasjoner er hyppige, så kan diskstrukturen til indeksen være uhensiktsmessig for et system med høy ytelse.
Ifølge et trettende aspekt ved den foreliggende oppfinnelse er det tilveiebragt en fremgangsmåte til organisering av en database slik at den har en beslutningsindeks og en nøkkelindeks, hvor nøklene i nøkkelindeksen er lagret på en komprimert måte, og hvor det kan gjøres en sjekk av nøkkelindeksen for å se om nøkkelen eksisterer før utspørring av beslutningsindeksen ved bruk av nøkkelen.
Det er således mulig å tilveiebringe en effektiv minnebasemetode for bestemmelse av eksistensen av en nøkkel med en indeks, slik at behovet for å søke selve indeksen direkte etter nøkkelen kan unngås.
Oppfinnelsen kompletterer således effektivt en standard indeksstruktur ved at kodede nøkkelverdier befinner seg i et halvlederminne. Eksistensen av en nøkkel sjekkes mot minnet før søking av indeksen. Hvis en inngang som stemmer overens finnes i minnet, avvises nøkkelen som et duplikat, ellers gjøres det et forsøk på å sette inn inngangen i indeksen.
For å tilveiebringe en effektiv og kompakt struktur, bruker nøkkelindeksen en énveis avbildningsfunksjon, så som en hashfunksjon. Særtrekkene ved hashfunksjonen eller andre avbildningsfunksjoner er slik at: Uansett når avbildningsfunksjonen anropes for den samme nøkkelverdien mer enn én gang, må avbildningsfunksjonen konsistent returnere den samme verdien, forutsatt at ingen informasjon i nøkkelen har blitt modifisert;
Hvis to nøkler anses å være like, så må påkalling av avbildningsfunksjonen for hver av de to nøklene frembringe det samme resultat;
Det er ikke påkrevet at to ulike nøkler avbildes til forskjellige verdier, tilveiebringelse av distinkte resultater for ulike nøkler vil imidlertid forbedre effektiviteten for indeksen.
Publiserte hashkodealgoritmer, så som CFC 32 og Adler 32 kan brukes, ettersom de tilveiebringer egnet funksjonalitet.
I en implementering av nøkkelindeksen kan minnet anordnes som et homogent array av fire byte-elementer. Dette arrayet er kjent som identitetsarrayet. Antallet elementer i identitetsarrayet er fortrinnsvis 1,1 ganger eller mer antallet unike nøkkelelementer som befinner seg i indeks strukturen. Det følger imidlertid at det kun er tilstrekkelig for identitetsarrayet at det er minst så stort som indeksen. To hashfunksjoner, A og B, brukes sammen med arrayet. Funksjonene velges slik at: For hvilke som helst to ulike nøkler, K og L, hvor A(K) = A(L), det er usannsynlig at B(K) = B(L).
For hvilke som helst to ulike nøkler, K og L, hvor B(K) = B(L), det er usannsynlig at A(K) = A(L).
Hashfunksjonen A brukes til å beregne offsettelementet (0..N) i identitetsarrayet for nøkkelen K ved bruk av følgende ligning:
Elementantall = ABS(A(K))modulo N
Hvor ABS(..) returnerer størrelsen uten fortegn av et tall og N er antallet elementer i identitetsarrayet.
Denne funksjonen er kjent som elementfunksjonen E(K).
Hvert element i identitetsarrayet lagrer B(K), hvor elementets offsett er gitt av E(K). En nøkkel (K) anses å være duplikat hvis elementet ved offsett E(K) inneholder E(K). Hvis elementet inneholder en hvilken som helst annen verdi, så må indeksstrukturen søkes for å bestemme dens duplisitet.
Ved et forsøk på å sette inn en nøkkel K i indeksen skjer følgende sekvens av hendelser. Først beregnes E(K). Deretter beregnes B(K). Hvis elementet ved E(K) i identitetsarrayet inneholder B(K), så avvises innsettingen som en duplikat K. Hvis elementet ved E(K) i identitetsarrayet ikke inneholder B(K), så overskrives imidlertid elementet med B(K), og det gjøres et søk av indeksen for å bestemme om nøkkelen er en duplikat.
Bruken av et identitetsarray reduserer betydelig det lagringsområdet som er nødvendig for å inneholde listen av nøkler. Hvis en database hadde 1 million innganger, og hver nøkkel var 32 byte lang, så ville det kreve over 32 Mb med minne for å lagre indeksen i minnet. Det ekvivalente identitetsarrayet ville imidlertid kun oppta 4,4 Mb med minne.
Hierarkisk organisering av indekser
Som her angitt bruker indekser ifølge kjent teknikk typisk tregrafer med knutepunkter som inneholder ett eller flere dataelementer med fire nøkkeldata. Tregrafene (beslutningsgrafene) navigeres ned til Lavblokker (konklusjonsmengder) som inneholder nøkkelverdien og pekerinformasjon i den lagrede datastruktur. Navigering av indeksen kan kreve én eller flere operasjoner med diskinngang/utgang for å finne en valgt nøkkel. Diskaksessoperasjoner representerer generelt den høyeste ytelseskostnad for indeksen, siden diskaksess generelt er langsom sammenlignet med minneaksess, og dataflaskehalser kan forekomme. For å minske denne kostnaden blir indekser ofte delt hvor hver del er tilordnet en forskjellig fysisk disk, hvilket gjør at disk I-O-er kan overlappes under indeksoperasjoner for å øke det samlede gjennomløp i indeksen. Denne metoden til underoppdeling av indeksen presenterer en flat éndimensjonal betraktning av indeksoppdelingen.
Ifølge et fjortende aspekt av den foreliggende oppfinnelse er det tilveiebragt en databaseindeks som er delt i en hierarkisk struktur, slik at en indeks kan delegere noe av sin arbeidsbelastning til én eller flere andre indekser.
En delegatindeks kan fortrinnsvis i seg selv delegere noe av sin arbeidsbelastning til én eller flere andre indekser.
En indeks som deltar i et slikt hierarki av indekser er ansvarlig for et område av undernøkler. Der hvor en slik indeks håndterer et underområde av nøkler på vegne av en annen indeks, er den kjent som en delegatindeks, og dens nøkkelunderområde er kjent som et nøkkelmanifest.
Nøkkelmanifestet i en indeks defineres fortrinnsvis ved å begrense et tilstøtende undersett av byte inne i nøkkelen til et tilstøtende område av mulige verdier. Ethvert forsøk på innsetting, sletting eller oppdatering eller søking etter en nøkkel som ikke er tilpasset til et indeksnøkkelmanifest avvises av en indeks, ellers blir nøkkeloperasjonen håndtert av indeksen eller én av dens delegatindekser.
Hierarkiet kan anordnes slik at hver indeks kan ha null, én eller flere delegatindekser, men hver indeks kan kun være en delegat til én annen indeks.
Der hvor en indeks har én eller flere delegatindekser, overlates en operasjon med innsetting, oppdatering eller sletting av en nøkkel til delegatindeksen med det passende nøkkelmanifestet. Hvis ingen av delegatindeksene har et passende nøkkelmanifest, så må operasjonen håndteres av selve indeksen.
Der hvor en indeks har én eller flere delegatindekser, legges en operasjon med søk etter et nøkkelområde frem for alle delegatindeksene med passende nøkkelmanifester, og søket gjøres av selve indeksen. Forespørselsresultatene fra søket av delegatindeksene kombineres med resultatet fra indeksens eget søk. Alle forespørslene kan utføres samtidig. Det er således mulig å modifisere en indeks struktur slik at arbeid kan underoppdeles over forskjellige underindekser i denne. Hver underindeks kan peke på en assosiert fysisk lagringsinnretning, hvilket gjør at det kan forekomme flere sammenfallende diskaksesser. Dette reduserer diskflaskehalsen og muliggjør raskere operasjon av databasene som en helhet.
Den foreliggende oppfinnelse vil videre bli beskrevet, ved hjelp av eksempler, med henvisning til de ledsagende tegninger, hvor: Fig. 1 er en skjematisk oversikt over den foreliggende oppfinnelse; Fig. 2 er en skjematisk representasjon av den logiske struktur til en beslutningsgraf; Fig. 3 skjematisk viser strukturen til et beslutningsknutepunkt; Fig. 4 skjematisk viser strukturen til en konklusjonsmengde; Fig. 5 skjematisk viser strukturen til en inngang i en konklusjonsmengde; Fig. 6 skjematisk illustrerer en eksakt søkeprosedyre; Fig. 7 skjematisk illustrerer en områdesøkeprosedyre; Fig. 8 skjematisk illustrerer prosedyren for innsetting av en nøkkel; Fig. 9 skjematisk illustrerer prosedyren for sletting av en nøkkel; Fig. 10 skjematisk illustrerer prosedyren for en eksakt nøkkelforespørsel; Fig. 11 skjematisk illustrerer prosedyren for en områdeforespørsel; Fig. 12 skjematisk illustrerer prosedyren for traversering av et knutepunkt med en beslutningsrulle G, beslutningsverdi V, til minimum og maksimum nøkkelområder, og returnering av et resultat; Fig. 13 viser strukturen for et parti av en beslutningsgraf; Fig. 14 viser den logiske struktur til et modifikasjonsbeslutningsknutepunkt; Fig. 15 viser prosedyren for innsetting av en nøkkel; Fig. 16 viser prosedyren for sletting av en nøkkel; Fig. 17 viser prosedyren for en eksakt forespørselsoverenstemmelse; Fig. 18 viser prosedyren for traversering av treet med en mønsterliste og retur av resultatet; Fig. 19 viser prosedyren for et søk av en mønsterliste (L); Fig. 20 er et eksempel på hvordan en mønsterjamføringsprosess hjelper til ved sortering av data; Fig. 21 er en skjematisk illustrasjon av en beslutningsgraf som har en avgrenset indeks; Fig. 22 viser strukturen til en modifisert konklusjonsmengde; Fig. 23 skjematisk viser en første måte til deling av en beslutningsgraf;
Fig. 24 skjematisk viser en annen måte til deling av en beslutningsgraf; og
Fig. 25 skjematisk viser konfigurasjonen av en komposittnøkkel som har kvalifikatorer. Fig. 1 viser skjematisk en database som inneholder en indeks som utgjør en utførelse av den foreliggende oppfinnelse og et datalager. Indeksen 2 omfatter en beslutningsgraf 4 og en flerhet av konklusjonsmengder 6, 8, 10, 12 og 14. Hver konklusjonsmengde nås av én og kun én, vei gjennom beslutningsgrafen. Hver konklusjonsmengde peker imidlertid da på relevante innganger inne i datalageret 16. Fig. 2 viser skjematisk strukturen til en beslutningsgraf, generelt angitt med 20. Beslutningsgrafen begynner ved et startpunkt 22. All navigasjon gjennom beslutningsgrafen må starte ved startpunktet. Startpunktet kan ha null (f.eks. når databasen er ny), én eller to beslutningspekere som peker til ytterligere knutepunkt innenfor beslutningsgrafen, og til konklusjonsmengder. Hvert annet beslutningsknutepunkt kan inneholde 0, 1 eller 2 beslutningspekere, hvor hver beslutningspeker peker på enten et annet beslutningsknutepunkt eller på en konklusjonsmengde. Beslutningspekerne ved et beslutningsknutepunkt vil her bli henvist til som «den lave pekeren» og «den høye pekeren».
En beslutningspeker ved et beslutningsknutepunkt i beslutningsgrafen kan kun peke på enten et annet beslutningsknutepunkt i den samme beslutningsgrafen eller på en enkelt konklusjonsmengde. Ethvert beslutningsgrafknutepunkt må pekes på eksakt av et annet beslutningsknutepunkt innenfor den samme beslutningsgrafen eller av startpunktet. Tilsvarende må enhver konklusjonsmengde pekes på eksakt av kun et beslutningsknutepunkt innenfor beslutningsgrafen. Således kan enhver beslutningsmengde kun nås ved å følge en enkelt og unik vei gjennom beslutningsgrafen fra startpunktet. Denne unike veien er kjent som navigasjons veien. Fig. 3 viser skjematisk den logiske struktur for et beslutningsknutepunkt, generelt angitt med 40, i nærmere detalj. Beslutningsknutepunktet inkluderer en lavpekertype, en lavpeker, en høypekertype og en høypeker. Lavpekertypen 41 viser formålet med lavpekeren 42. Lavpekertypen 41 kan vise om hvorvidt lavpekeren 42 peker på et beslutningsknutepunkt eller en beslutningsmengde. Lavpekeren 42 gir adressen til beslutningsknutepunktet eller beslutningsmengden som den peker på. En nullverdi kan settes inn for å vise at det ikke eksisterer noen peker. Tilsvarende viser en høypekertype 44 om hvorvidt høypekeren 45 peker på et beslutningsknutepunkt eller en konklusjonsmengde. Høypekeren viser adressen til beslutningsknutepunktet eller konklusjonsmengden som den peker til. Igjen kan en nullverdi brukes til å vise at det ikke eksisterer noen peker. Dette gjør at den «tre»-lignende struktur til beslutningsgrafen kan representeres og lagres med en dataprosessor og dens minne. Fig. 4 viser skjematisk strukturen til en konklusjonsmengde. En konklusjonsmengde omfatter en flerhet av nøkkel- og egenskapsinnganger 60, 62, 64, 66 og 68, som hver er lenket sammen ved en direkte lenke som gir adressen til den neste inngangen i konklusjonsmengden. Fig. 5 illustrerer skjematisk den logiske struktur til hver inngang inne i konklusjonsmengden. Inngangen består av tre felt, nemlig et lenkefelt 80, et nøkkelfelt 82 og et egenskapsfelt 84. Lenkefeltet peker på den neste konklusjonsmengdeinngangen. Nullverdien kan vise at det ikke er flere innganger. Nøkkelfeltet 82 inneholder den eksakte verdi av nøkkelen, mens egenskapsfeltet 84 inneholder de egenskaper som er assosiert med nøkkelen, f.eks. adressen til dataene som korresponderer til nøkkelfeltet 82. Når komponentene i indeksen er definert, følger det en omtale av hvordan indeksen brukes og navigeres.
For å navigere langs indeksen, refererer hvert beslutningsknutepunkt som er besøkt langs en navigasjons vei til én eller en gruppe av biter inne i nøkkelen. Denne gruppen av biter er kjent som en «beslutningsgruppe», og antallet biter i beslutningsgruppen kan settes til å inkludere ethvert antall biter mellom en enkelt bit og alle bitene i nøkkelen.
Området for mulige verdier som kan antas av beslutningsgruppen er kjent som «beslutningsområdet», og er avgrenset av en minimumsverdi for beslutningsområdet og en maksimumsverdi for beslutningsområdet. Beslutningsområdets minimumsverdi kan være enhver verdi som er mindre enn alle bitmengdene i beslutningsgruppen, og tilsvarende kan beslutningsområdets maksimumsverdi være enhver verdi som er større enn beslutningsområdets minimum. Av praktiske årsaker kan minimum- og maksimumsverdier representeres i et rotasjonssystem med størrelser uten fortegn.
Hvert beslutningsknutepunkt har en assosiert beslutningsverdi. Beslutnings verdien bestemmer om hvorvidt en lavpeker eller høypeker følges ved navigering gjennom beslutningsknutepunktet. Høypekeren brukes når verdien av den undersøkte beslutningsbitgruppen i nøkkelen er større enn beslutningsverdien, ellers brukes lavpekeren.
Sammenligning av beslutningsverdien utføres fortrinnsvis ved bruk av notasjon med størrelser uten fortegn. Beslutningsverdien kan settes til enhver verdi som er valgt av systemlederen, designeren eller operatoren, men velges fortrinnsvis fra ett av følgende:
Den matematiske median av alle mulige verdier i beslutningsgruppen.
Den matematiske median av alle de forventede verdier av beslutningsgrupper.
Det matematiske gjennomsnitt av alle de forventede verdier av beslutningsgruppen.
En vilkårlig verdi som er spesifisert på tidspunktet for opprettelse av indeksen.
Medianen av den inneværende beslutningsverdi (dvs. den aller sist brukte beslutningsverdi) og beslutningsverdien som kom forut for den.
Valget av en beslutningsgruppe ved et besøkt beslutningsknutepunkt kan, fortrinnsvis, men ikke nødvendigvis, være basert på ett eller flere av det følgende: Beslutningsgruppen kan være den samme for alle beslutningsknutepunktene.
Beslutningsgruppen kan endres for hvert besøk til et beslutningsknutepunkt.
Beslutningsgruppen kan endres når beslutningsverdien fra det forrige beslutningsknutepunkt når eller nærmer seg beslutningsområdets maksimum eller beslutningsområdets minimum for den inneværende beslutningsgruppe.
Beslutningsgruppen kan endres når beslutningsverdien mellom suksessive knutepunkt vil endres ved mindre enn én enhet eller med mindre enn en annen forhåndsbestemt terskel.
Størrelsen av beslutningsgruppen ved et beslutningsknutepunkt kan bestemmes på basis av én eller flere parametere. Størrelsen av en beslutningsgruppe kan f.eks. være fast for alle beslutningsknutepunkter. Størrelsen kan imidlertid økes fra den forrige beslutningsgruppe når det velges en ny beslutningsgruppe, eller alternativt, størrelsen kan reduseres fra den forrige beslutningsgruppen når det velges en ny beslutningsgruppe.
Posisjonen til en beslutningsgruppe, i forhold til nøkkelen, ved et beslutningsknutepunkt kan baseres på ett eller flere av det følgende. Posisjonen til beslutningsgruppen kan være fast for alle beslutningsknutepunkt. I tillegg og/eller alternativt kan posisjonen til beslutningsgruppen være fast offsett fra den forrige beslutningsgruppen når en ny beslutningsgruppe velges.
Ytterligere restriksjoner kan fortrinnsvis påtvinges hvis indeksen skal støtte nøkkelgjenfinning ved områdejamføring. Særlig må den mest signifikante biten inkluderes innenfor et hierarkisk signifikant knutepunkt, så som startpunktet. Deretter bør signifikansen av beslutningsgruppen innenfor den samlede nøkkelen endres på en monoton måte for minkende signifikans.
Det er fordelaktig å betrakte enkelte eksempler på hvordan indeksen kan navigeres.
Fig. 6 viser hvordan en nøkkel på fire byte kan navigeres ved et søk for eksakt overensstemmelse. I dette eksemplet er nøklene lagret i ASCII-koding, og tallene som er vist mot hver nøkkel viser sin verdi i heksadesimal notasjon. I dette eksemplet har hver beslutningsgruppe en fast størrelse på fire bit. Beslutningsgruppen beveges sekvensielt ned til de neste fire mindre signifikante biter ved hvert nytt knutepunkt som besøkes. I dette eksemplet er den mest signifikante biten betegnet null, den nest mest signifikante biten er én, den nest mest signifikante to, osv. Videre, for enkelthets skyld, er beslutningsverdien som påføres ved hvert knutepunkt fire. Således, hvis beslutningsgruppen har verdien null, én, to, tre eller fire, traverseres grafen til venstre. Hvis imidlertid beslutningsgruppen har en verdi i området 5-15, traverseres grafen til høyre.
Som vist på fig. 6 presenteres et antall navn til databasen. Disse navene eller nøkkelverdiene er Fred, John, Bill, Zoe, Eric og Pete. Den heksadesimale ekvivalent til hver nøkkel er lokalisert ved navnet. Navigasjonsprosessen som blir beskrevet er egnet til innsetting, sletting eller jamføring.
Initialt presenteres nøklene overfor et første beslutningsknutepunkt 100 hvor biter null til tre testes. Siden hvert heksadesimale ord opptar én byte, er det innlysende at biter null til tre korresponderer til det første tegnet i nøklene. Således, ettersom Fred, John, Bill og Eric alle starter med en «4», utbres tre nøkler mot venstre langs forgreningen 102 til et knutepunkt 104 på et annet nivå. Både Zoe og Pete har imidlertid initialt fire biter som faller utenfor området null til tre, og deres nøkler utbres følgelig langs en høypekervei 106 til knutepunktet 108.
Knutepunktene 104 og 108 opptar det annet nivå i beslutningsgrafen, og følgelig baseres deres beslutninger på de neste fire bit i nøkkelen. Dette korresponderer til låsing ved det neste tegn i den heksadesimale representasjon. Ved knutepunkt 104 blir således Bill ført langs en lavnivåpeker 110 til et etterfølgende knutepunkt (ikke vist), ettersom biter 4-7 i nøkkelen koder verdien 2, mens Fred, John og Eric føres langs høynivåpekeren 112 til ytterligere et knutepunkt (ikke vist), fordi biter 4-7 i deres nøkkel koder verdiene henholdsvis 6, A og 5 i heksadesimal notasjon. Tilsvarende, ved knutepunkt 108, føres nøkkelen Pete langs en lavnivåpeker 114 ettersom biter 4-7 i denne koder verdien null, mens Zoe føres langs en høynivåpeker 116 ettersom biter 4-7 koder verdien «A». Denne prosessen kan gjentas inntil en tilstrekkelig del av nøkkelen har blitt søkt for å nå en konklusjonsmengde.
Fig. 7 illustrerer skjematisk hvordan en nøkkel på fire byte kan navigeres i et søk med områdejamføring. Som med fig. 6 er nøkler lagret i ASCII-koding, og ASCII-verdiene mot hver nøkkel for å vise dens verdi i heksadesimal notasjon.
I dette eksemplet har beslutningsgruppen en fast størrelse på åtte biter. Beslutningsgruppen beveges ned til de neste åtte mindre signifikante biter kun når beslutningsområdet er oppbrukt; dvs. når beslutningsverdien når begge grensene for beslutningsområdet. I dette eksemplet er den mest signifikante biten betegnet bit null, den nest meste bit én, osv., som ved eksemplet vist på fig. 6. Beslutningsområdet ved hvert knutepunkt er 30-50 heksadesimal for å dekke alle siffer og versalbokstaver som er representert i ASCII-format. Beslutningsverdien ved hvert knutepunkt som brukes til en ny beslutningsgruppe er 48 heksadesimal, og blir deretter forandret til å være gjennomsnittet av de forrige beslutningsverdier for den samme beslutningsgruppe ved hvert etterfølgende knutepunkt for den samme gruppen. Der hvor kun én tidligere beslutningsverdi er kjent, så brukes minimum-eller maksimumsgrensen for beslutningsverdiområdet, avhengig av om hvorvidt vi nettopp har navigert den venstre henholdsvis den høyre.
Ved bruk av de samme nøkler som i det foregående eksempel blir nøklene presentert overfor et første knutepunkt 118 som undersøker de første åtte biter, null til sju, og sammenligner dem mot beslutningsverdien 48 (heksadesimal). Med nøklene som vist, føres Fred, Bill og Eric langs en lavpeker til knutepunkt 122, mens John, Zoe og Pete langs en høypeker 124 til knutepunkt 126.
Ved knutepunkt 122 blir det nødvendig å endre beslutningsverdien. Beslutningsverdien som brukes for denne nye beslutningsgruppen forandres til medianverdien for de forrige beslutningsgrupper som nås langs den samme veien. Siden kun én tidligere beslutningsverdi er kjent, som i dette tilfellet, brukes minimum- eller maksimumsgrensen for beslutningsverdiområdet. Gitt at fire knutepunkt 122 ble navigert mot lavpekeren 120, så brukes den nedre grense for beslutningsområdet.
Således, for å beregne den nye beslutningsverdien, er det påkrevet å finne medianen av tallene i området 30 heksadesimal til 48 heksadesimal eksplisitt, idet denne gruppen av tall er 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 3A, 3B, 3C, 3D, 3E, 3F, 40, 41, 42, 43, 44, 45, 46, 47 og 48. Derfra kan det ses at medianverdien er 3C. Ved å sette dette som beslutningsverdien, går Fred, Bill og Eric videre langs høypekeren 127. Til det neste knutepunktet (ikke vist) hvis beslutningsverdi vil være medianverdien av området med utstrekning fra 3C heksadesimal til 48 heksadesimal.
Tilsvarende blir det for knutepunktet 126 som nås langs høypekeren 124 fra knutepunktet 118 beregnet en ny beslutningsverdi, hvilket i dette tilfellet vil være 4C (heksadesimal). Ved anvendelse av nøkkelen ved dette knutepunktet vil John bli ført til venstre (lavpeker), fordi den inneholder verdien 4A som er mindre enn beslutningsverdien for 4C, mens Zoe og Pete blir ført til høyre (høypeker), fordi de inneholder verdien 5A henholdsvis 50, som er større enn beslutningsverdien 4C.
Et ytterligere eksempel på søking kan ses i sammenhengen med tegnsøking, og således utføres et søk ved bruk av de følgende kriterier: En indeks for eksakt overensstemmelse av en ASCII-tegnnøkkel med hvert tegn som opptar 8 biter og som kun er i området «A» til «Z».
En fast beslutningsgruppe på 8 biter.
Et startpunkt for en beslutningsgraf for de mest signifikante åtte biter (det første tegn).
Beslutningsgruppen føres åtte biter fremover (ett tegn) for hvert beslutningsknutepunkt.
ASCII-kodene for «A» og «Z» er 65 henholdsvis 90. En fornuftig beslutningsverdi for denne gruppen er derfor medianverdien (dvs. 78).
I dette eksemplet føres beslutningsgruppen fremover med ett tegn (8 biter) hver gang et nytt beslutningsknutepunkt nås. Det gjøres en sammenligning mellom verdien av bitene i beslutningsgruppen inne i nøkkelen og den faste beslutningsverdien (78) for å bestemme hvilke peker som skal følges.
En mer sofistikert løsningsmåte involverer forandring av beslutningsverdien ved hver forflytning til et nytt beslutningsknutepunkt. Beslutningsområdet for en beslutningsgruppe er således avgrenset av beslutningsområdets minimum og beslutningsområdets maksimum, som er 65 henholdsvis 90. Ved forflytning til det neste beslutningsknutepunkt kan en operator velge å selektere den nye beslutningsverdien ved å bruke medianen av den inneværende og den forrige beslutningsverdi. Når dette er en ny beslutningsgruppe og ingen tidligere beslutningsverdi er tilgjengelig, så kan vi bruke verdien for beslutningsområdets minimum eller maksimum (avhengig av om hvorvidt det ble fulgt en lav henholdsvis høy peker). Valget av en ny beslutningsgruppe kan gjøres når beslutningsverdien endres med mindre enn én eller en annen forhåndsdefinert terskel. Et eksempel på hvordan en beslutningsverdi endres er gitt nedenfor.
Beslutningsgruppen i nøkkelen har en verdi på 82. Startbeslutningsverdien for en ny gruppe er 78. Beslutningsområdet er 65-90. Beslutningsgruppen har blitt satt slik at en ny gruppe velges når beslutningsverdien endres med mindre enn 1.
Det skal bemerkes at indekser som ikke er nødvendige for å støtte nøkkelgjenfinning ved områdejamføring ikke er så sterkt innskrenket som de som gjør dette. Særlig kan indekser som det ikke er påkrevet at støtter områdejamføring ha en hvilken som helst beslutningsgruppe ved sitt startpunkt, og kan endre beslutningsgruppens posisjon vilkårlig, og kan også endre beslutningsgrupper vilkårlig når beslutningsverdien kommer nær (som kan defineres av systemdesigneren eller kan velges av en bruker eller ved en ledelsesfunksjon) beslutningsområdegrensene, det vil si maksimum- og minimumverdiene i beslutningsområdet, eller beslutningsverdien endres med mindre enn en forhåndsvalgt størrelse.
Ved traversering av en navigasjonsvei for den hensikt å sette inn, slette eller gjenfinne en kandidatnøkkel, blir beslutningsgruppen for kandidatnøkkelen ved hvert besøkte beslutningsknutepunkt sammenlignet med beslutningsverdien for beslutningsknutepunktet, og lavpekeren eller høypekeren følges til det neste beslutningsknutepunktet eller konklusjonsmengden. Så snart en konklusjonsmengde har blitt nådd er reisen langs navigasjonsveien fullført. Reisen langs navigasjons veien er også fullført når en beslutningsgruppe verdi indikerer bruk av en beslutningspeker som ikke eksisterer.
En konklusjonsmengde består av en serie av nøkler og assosierte egenskaper. Antallet nøkler som befinner seg i en konklusjonsmengde er begrenset av en øvre grense som kan bestemmes ved én eller flere av en kombinasjon av: En fast grense;
en grense som er spesifisert ved det tidspunkt indeksen opprettes;
en grense som kan spesifiseres gjennom indeksens levetid; og en grense som varierer som en funksjon av indeksens vekst.
Fig. 8 illustrerer prosedyren for innsetting av en nøkkel (K) med egenskaper (Q). Prosedyren begynner ved trinn 150 hvor indeksen legges inn ved sitt startpunkt med en standard beslutningsgruppe eller initial beslutningsgruppe, DG, som er satt av designeren. En algoritme er implementert for å beregne en startbeslutningsverdi DVo. Styringen blir deretter overført til trinn 152 som tester om hvorvidt beslutningsgruppen i nøkkelen er større enn beslutningsverdien. Hvis testen er oppfylt, overføres styringen til trinn 154 hvor høypekeren HP undersøkes og en ny beslutningsverdi DViopprettes.
Fra trinn 154 overføres styringen til trinn 156 hvor det gjøres en sjekk for å se om pekeren (uansett om dette er en høypeker eller lavpeker) eksisterer. Tilsvarende, hvis trinn 152 indikerer at beslutningsgruppen i nøkkelen ikke er større enn beslutningsverdien, så overføres styringen til trinn 158 hvor lavpekeren undersøkes og en ny beslutningsverdi DViberegnes. Styringen overføres fra trinn 158 til trinn 156. Fra trinn 156 overføres styringen til trinn 160, forutsatt at pekeren eksisterer. Trinn 160 tester for å se om pekeren peker på ytterligere et beslutningsknutepunkt. Hvis pekeren peker på et beslutningsknutepunkt så overføres styringen til trinn 162 som fører testen fremover til det neste beslutningsknutepunkt. Fra trinn 162 overføres styringen til trinn 164 som utfører en test for å se om hvorvidt beslutningsgruppen bør forandres. Hvis svaret på denne testen er ja, så overføres styringen til trinn 166 som beregner verdien av den nye beslutningsgruppen i samsvar med de kriterier som her er angitt ovenfor. Styringen blir deretter overført enten fra trinn 164 eller 166 tilbake til trinn 152.
Hvis trinn 156 bestemmer at en peker ikke eksisterer, så overføres styringen til trinn 170 for å forårsake opprettelsen av en ny konklusjonsmengde, og deretter til trinn 172 som oppdaterer pekeren til å peke på den nye konklusjonsmengden. Styringen blir deretter overført til trinn 174 som adderer nøkkelen og dens egenskaper til konklusjonsmengden.
Videre, hvis trinn 160 ikke peker på et beslutningsknutepunkt, så må det peke på en beslutningsmengde, og styringen overføres til trinn 176 som bevirker at det gjøres et hopp til den relevante konklusjonsmengde, og derfra til trinn 174, slik at nøkkelen og dens egenskaper adderes til konklusjonsmengden.
Det gjøres en test ved trinn 175 for å se om hvorvidt konklusjonsmengden har overskredet sin størrelsesgrense. Hvis konklusjonsmengden ikke har vokst seg for stor, overføres styringen til trinn 178 som representerer en utgang fra nøkkelinnsettingsprosedyren, hvis imidlertid konklusjonsmengden har nådd sin størrelsesgrense, så overføres styringen til trinn 180 som oppretter et nytt beslutningsknutepunkt uten noen pekere. Fra trinn 180 overføres styringen til trinn 182 som oppdaterer pekeren i det forrige beslutningsknutepunktet til å peke på det nye beslutningsknutepunktet istedenfor den gamle konklusjonsmengden. Styringen overføres deretter til trinn 184 som undersøker den gamle konklusjonsmengden CS(S) for å se om den er tom. Hvis den ikke er tom overføres styringen til trinn 186 som går til den første nøkkel og egenskapsinngang i konklusjonsmengden CS(S), og re-navigerer indeksen for å finne den nye konklusjonsmengden som inngangen bør plasseres inn i. Så snart inngangen har blitt re-allokert til en konklusjonsmengde, fjernes den fra sin inneværende konklusjonsmengde CS(S) ved trinn 188. Styringen returneres deretter til trinn 184, og prosessen gjentas inntil det tidspunktet hvor konklusjonsmengden CS(S) er tom. Styringen overføres deretter til trinn 190 som representerer et utgangspunkt fra nøkkelinnsettingsprosedyren.
Prosedyren for innsetting av en nøkkel og dens assosierte egenskaper i indeksen krever således generelt navigasjon langs beslutningsveien for nøkkelen som skal settes inn. Hvis navigasjonsveien avsluttes uten at man kommer til en konklusjonsmengde, så må det opprettes en ny konklusjonsmengde, og en beslutningspeker må oppdateres slik at den peker på den nye konklusjonsmengden. Denne nye beslutningspekeren må plasseres i beslutningsgrafen ved det punkt traverseringen av beslutningsgrafen ble avsluttet. Hvis navigasjonsveien avsluttes ved en konklusjonsmengde, så blir imidlertid nøkkelen og dens egenskaper innsatt i konklusjonsmengden. Hver modifikasjon av en konklusjonsmengde varierer størrelsen av denne mengden. Således, hvis en ny nøkkel settes inn i konklusjonsmengden og dette forårsaker eller vil forårsake at mengden overskrider sin øvre grense, så må det opprettes et nytt beslutningsknutepunkt. En ny beslutningsgruppe og/eller beslutningsverdi må assosieres med det nye beslutningsknutepunktet, og den beslutningspekeren som tidligere pekte på den fullstendige konklusjonsmengden må endres til å peke på det nye beslutningsknutepunktet. Deretter må hvert dataelement fra den gamle (nå fulle) konklusjonsmengden på ny settes inn i den nye konklusjonsmengden eller
-mengdene etter navigasjon av veien langs indeksen.
Dataene i databasen vil utvikles over tid, og denne utviklingen vil inkludere sletting av nøkler og data, enten fordi dataene ikke lenger er relevant for databasen, eller fordi de må fjernes for arkiveringsformål for at den «levende» versjon av databasen ikke skal rotes til med irrelevante eller foreldede data. Fig. 9 illustrerer skjematisk prosedyren med sletting av en nøkkel. Enkelte av trinnene er identiske med de som ble beskrevet med hensyn til fig. 8, og disse trinnene har følgelig blitt gitt de samme henvisningstall. Trinn 150-166 er således identiske med de som allerede er beskrevet, med det unntak at hvis testen som gjøres ved trinn 156 indikerer at pekeren ikke eksisterer, så overføres styringen til trinn 200 som representerer en utgang fra sletteprosedyren.
Trinn 160 overfører styringen til trinn 176 hvis testen ved trinn 160 bestemmer at pekeren ikke peker på et beslutningsknutepunkt (som var tilfelle med prosedyren for innsetting av en nøkkel). Fra trinn 176 overføres styringen til trinn 202, hvor det utføres en test for å se om konklusjonsmengden CS(S) er tom. Hvis konklusjonsmengden er tom, overføres styringen til trinn 204 som representerer en utgang fra prosedyren, ellers overføres styringen til trinn 206 som implementerer et skann gjennom inngangene i konklusjonsmengden. Skannet begynner med den første nøkkel (L) i konklusjonsmengden, og styringen overføres deretter til trinn 208 hvor det gjøres en test for å se om nøkkelen (L) er lik slettenøkkelen. Hvis den er det overføres styringen til trinn 210 hvor nøkkelen (L) og dens egenskaper slettes fra konklusjonsmengden. Fra trinn 210 overføres styringen til trinn 214 hvor det gjøres en test for å se om nøkkelen (L) er den siste nøkkelen i konklusjonsmengden. Styringen blir også overført til trinn 214 fra trinn 208 hvis nøkkelen (L) ikke er den samme som den siste slettenøkkelen. Styringen blir deretter overført til trinn 216 hvor den neste nøkkelen velges, og styringen blir deretter overført til 208. Ellers overføres styringen fra trinn 214 til trinn 218 som representerer en utgang fra denne prosedyren.
Således, generelt uttrykt, å slette en nøkkel og dens assosierte egenskaper fra indeksen krever navigasjon langs navigasjonsveien for nøkkelen som skal slettes. Hvis navigasjonsveien avsluttes uten at man kommer til en konklusjonsmengde, så anses det at nøkkelen ikke eksisterer i indeksen. Hvis navigasjonsveien imidlertid avsluttes ved en konklusjonsmengde, så må det påbegynnes et skann gjennom en konklusjonsmengde for alle nøklene som er eksakt lik nøkkelen som skal slettes. Disse nøklene og deres assosierte egenskaper blir deretter fjernet fra konklusjonsmengden.
Fig. 10 viser prosedyren for en eksakt jamføring for en nøkkel, og for retur av resultatet. Prosedyren deler svært mange likheter med prosedyren for sletting av en nøkkel, og trinn 150-206 er som beskrevet med henvisning til fig. 9. Et ytterligere trinn 151 er imidlertid innsatt mellom trinnene 150 og 152 hvor en resultatmengde (R) tilbakestilles til den tomme tilstanden. Etter navigasjon av indeksen til konklusjonsmengden ved trinn 202, overføres styringen til trinn 206 som igangsetter et sekvensielt skann gjennom konklusjonsmengden. Fra trinn 206 overføres styringen til trinn 230, hvor det gjøres en test for å se om nøkkelen (L) som for øyeblikket blir undersøkt er lik søkenøkkelen. Hvis ja overføres styringen
til trinn 232, ellers overføres styringen til trinn 234. Ved trinn 232 adderes nøkkelen og dens egenskaper til søkeforespørselens resultatliste (R), og styringen blir deretter overført til trinn 234. Trinn 234 tester for å se om nøkkelen som for øyeblikket blir undersøkt er den siste i konklusjonsmengden. Hvis nei blir den neste nøkkelen undersøkt, og styringen overføres til trinn 230. Hvis nøkkelen er den siste nøkkelen, overføres styringen fra 234 til trinn 236 som representerer en utgang fra denne rutinen.
Fig. 11 illustrerer skjematisk prosedyren for utførelse av en områdeforespørsel med en minimumnøkkelverdi (I) og en maksimumnøkkelverdi (A), og for retur av resultatet (R). Prosedyren begynner ved trinn 300 hvor resultatmengden (R) tilbakestilles til null eller tom tilstand. Styringen overføres deretter til 302 hvor beslutningsgruppen og beslutningsverdiene beregnes, og derfra overføres styringen til trinn 304 hvor indeksen traverseres for å finne de resultater som stemmer overens med områdeforespørselen. Prosedyren for traversering av indeksen er vist i nærmere detalj på fig. 12. Prosedyren begynner ved trinn 350 hvor prosedyren tres inn i ved startknutepunktet. Styringen overføres deretter til trinn 352, hvor det gjøres en test for å se om minimumnøkkelen er mindre enn eller lik beslutningsverdien (eller utelatt), og om maksimumnøkkelen er større enn dens assosierte beslutningsverdi (eller utelatt). Hvis resultatet av testen er slik at begge tilstander er tilfredsstilt overføres styringen til trinn 370, ellers overføres styringen til trinn 354. Trinn 370 sjekker for å se om hvorvidt en lavpeker har blitt satt, og hvis den har det, overføres styringen til trinn 372 hvor det utføres en sjekk for å se om lavpekeren peker på en konklusjonsmengde. Hvis ja, overføres styringen til trinn 400. Hvis nei, overføres styringen til trinn 374, hvor beslutningsgruppen og beslutningsverdiene beregnes på ny og brukes til å traversere indeksen fra knutepunktet som er nådd via pekeren. Prosedyren har den evne at den kan påkalle seg selv, og er som sådan rekursiv. Styringen overføres deretter til trinn 376, hvor det gjøres en sjekk for å se om det eksisterer en høy peker, hvis nei, overføres styringen til trinn 378 som representerer en utgang, og hvis ja, overføres styringen til trinn 390 hvor det gjøres en test for å se om høypekeren peker på en konklusjonsmengde, Hvis ja, overføres styringen til trinn 400, mens, hvis høypekeren ikke peker på en konklusjonsmengde, overføres styringen til trinn 392 hvor en ny beslutningsgruppe og beslutningsverdi blir beregnet, og ytterligere traversering av indeksen utføres ved å ta det nye knutepunktet som et startknutepunkt.
Med retur til nær begynnelsen av prosedyren, i de tilfeller hvor trinn 352 har overført styringen til trinn 354, utfører trinn 354 en test for å se om både minimumnøkkelverdien og maksimumnøkkelverdien er mindre enn eller lik beslutningsverdien. Hvis de er det overføres styringen til trinn 356, ellers overføres styringen til trinn 358. Trinn 356 utfører en test for å se om det eksisterer en lav peker, hvis det ikke gjør det, overføres styringen til 357 som representerer en utgang fra prosedyren, ellers overføres styringen til trinn 360. Trinn 360 tester for å se om lavpekeren peker på en konklusjonsmengde, hvis ja, overføres styringen til trinn 400, ellers overføres styringen til trinn 402 som på ny beregner beslutningsgruppen og beslutningsverdien og anroper traverseringsprosedyren på en rekursiv måte. Med retur til trinn 358, utføres en test for å se om en høy peker eksisterer, hvis ja, overføres styringen til trinn 362, ellers overføres styringen til trinn 364 som representerer en utgang fra prosedyren. Trinn 362 utfører en test for å se om høypekeren peker på en konklusjonsmengde, hvis ja, overføres styringen til trinn 400, ellers overføres styringen til trinn 364 som beregner en ny beslutningsgruppe og beslutningsverdi og bevirker at det utføres en videre traversering av indeksen med start fra disse nye verdiene.
Trinn 400 utfører en test for å se om konklusjonsmengden (S) er tom, hvis ja, overføres styringen til trinn 404 som representerer en utgang fra prosedyren. Hvis konklusjonsmengden ikke er tom, så igangsettes et sekvensielt skann av disse inngangene i konklusjonsmengden, med start ved trinn 406 hvor den første nøkkelen i konklusjonsmengden velges. Styringen overføres deretter til trinn 408 hvor det utføres en test for å se om nøkkelen (L) er innenfor det området som er definert av minimum og maksimum nøkkelverdier. Hvis resultatet av testen er «ja», så adderes nøkkelen og dens egenskaper til konklusjonsmengden (S) ved trinn 410, mens hvis testen ved trinn 408 er negativ, så overføres styringen til trinn 412 hvor det gjøres en test for å se om den nøkkelen som for øyeblikket er under betraktning er den siste nøkkelen i konklusjonsmengden, hvis den er det, overføres styringen til trinn 414 som representerer en utgang fra prosedyren. Trinn 410 overfører også styringen til trinn 412. Hvis testen ved trinn 412 bestemmer at nøkkelen under betraktning ikke er den siste nøkkelen, så velges den neste nøkkelen i konklusjonsmengden ved trinn 416, og styringen returneres til trinn 408.
Således, generelt uttrykt, krever gjenfinning av nøkler og deres områdeegenskaper ved hjelp av en områdejamføring ved bruk av en optimal minimal søkenøkkelverdi og en optimal maksimum søkenøkkelverdi rekursiv traversering av beslutningsgrafen fra startpunktet, med vedvarende sammenligning av beslutningsgruppebiter i minimum og maksimum søkenøkler med beslutningsverdien ved hvert beslutningsknutepunkt. Hvis størrelsen uten fortegn av minimumsøkenøkkelbitene i beslutningsgruppen er mindre enn eller lik beslutningsverdien, og størrelsen uten fortegn av maksimumsøkenøkkelbitene i beslutningsgruppen er større enn beslutningsverdien, så utføres det først en handling med å traversere beslutningsgrafen som er nådd fra lavpekeren ved bruk av den minimale søkenøkkelen og utelatelse av maksimumsøkenøkkelen; og deretter utføres det handlinger for å traversere beslutningsgrafen som er nådd fra høypekeren ved bruk av maksimumsøkenøkkelen og utelatelse av minimumsøkenøkkelen.
Hvis størrelsen uten fortegn av minimumsøkenøkkelbitene og maksimumsøkenøkkelbitene i beslutningsgruppen begge er mindre enn eller lik beslutningsverdien, så utføres en traversering av beslutningsgrafen som er nådd fra lavpekeren ved bruk av både minimumsøkenøkkelen og maksimumsøkenøkkelen. Hvis størrelsen uten fortegn av minimumsøkenøkkelbitene og maksimumsøkenøkkelbitene i beslutningsgruppen begge er større enn beslutningsverdien, så utføres en traversering av beslutningsgrafen som er nådd fra høypekeren ved bruk av både minimumsøkenøkkelen og maksimumsøkenøkkelen.
Det er åpenbart at flere og gjentatte traverseringer av beslutningsgrafen er nødvendig. Hvis alle navigasjonsveiene som er et resultat av traverseringene avsluttes uten at man kommer til en konklusjonsmengde, så anser man at det ikke eksisterer noen overensstemmende nøkkel i indeksen. For de navigasjons veier som avsluttes ved en konklusjonsmengde, så utføres et skann gjennom alle nøklene i konklusj onsmengdene, og alle nøklene som stemmer overens med de påkrevde egenskaper innenfor søkeområdet returneres som søkeresultater.
Som en del av implementeringen av databasen i en dataprosessor og et lagringssystem, er det fordelaktig, selv om det ikke er obligatorisk, at størrelsen av konklusjonsmengden bør være et heltallig multiplum av lagringsinnretningens blokkoverføringsstørrelse, hvilket tilveiebringer optimal bruk av det fysiske minnet. Det er også fordelaktig, selv om det ikke er obligatorisk, at beslutningsgrafen blir oppdelt i blokker som har en størrelse som er et heltallsmultiplum av lagringsinnretningens blokkoverføringsstørrelse. Dette har den fordel at, når en beslutningsblokk blir full, kan det opprettes en ny blokk og nye beslutningspekere kan peke inn i den nye blokken ettersom dette er formålstjenelig.
For å oppnå rask operasjon av databasen er det fordelaktig at beslutningsgrafen under bruk holdes fullstendig eller delvis innenfor halvlederminnet i dataprosesseringssystemet, slik at man unngår de tidskostnader som er assosiert med diskaksess. Som en ytterligere forbedring er det også foretrukket at konklusj onsmengdene lagres inne i halvlederminnet, eller at i det minste, så snart en konklusjonsmengde har blitt identifisert, den veksles inn i halvlederminnet slik at den sekvensielle skanning av konklusjonsmengden kan utføres raskt.
Den optimale konfigurasjon for områdejamføring av alle nøkkeltyper er å bruke en beslutningsbitgruppe på én bit med en fast beslutningsverdi på null. Beslutningsgruppen er ved startpunktet den mest signifikante bit, og beslutningsgruppen går fremover med én bit (mot den minst signifikante bit) for hvert beslutningsknutepunkt som besøkes. For nummerisk jamføring eller eksakt dato/tidspunktjamføring, synes den optimale bitkonfigurasjon å være å bruke en beslutningsbitgruppe på én bit med en fast beslutningsverdi på null. Beslutningsgruppen ved startpunktet er den minst signifikante bit, og beslutningsgruppen føres frem med én bit (mot den mest signifikante bit) for hvert beslutningsknutepunkt som besøkes. For søkingen avASCII-baserte nøkler, er den optimale bitkonfigurasjon for eksakt overensstemmelse å bruke en beslutningsgruppe på åtte bit. De optimale beslutningsverdier vil avhenge av området av forventede tegn.
Mønsterjamføring
Databasestrukturen som er beskrevet med henvisning til de foregående figurer vedrører en struktur hvor beslutningsknutepunktene ikke inneholder noen nøkkeldata i det hele tatt. Det er imidlertid mulig å modifisere databasestrukturen slik at ett eller flere knutepunkt inneholder en partiell nøkkelsekvens. Dette letter indekseringen og gjenfinningen av skalare data ved mønsterjamføring. Trestrukturen er fortsatt liten sammenlignet med kjente databaser, siden hvert beslutningsknutepunkt kun behøver å inneholde en relativt beskjeden mengde data, istedenfor hele nøkkelen som er tilfelle ved systemer ifølge kjent teknikk. Databasestrukturen krever kun en liten modifikasjon fra det som her allerede er beskrevet. Fig. 13 viser strukturen til beslutningsgrafen, som på mange måter opprettholder den samme layout som det som er vist på fig. 2. Startpunktet og hvert beslutningsknutepunkt inneholder nå imidlertid en bitsekvens. Bitsekvensen representerer den av delnøkkelen som en kandidatnøkkel sammenlignes mot. Den logiske struktur i hvert beslutningsknutepunkt er vist på fig. 14. Strukturen minner meget om det som ble beskrevet med henvisning til fig. 3. Knutepunktet, generelt angitt med 440, har et lagringsområde 450 for en beslutningsbitsekvens. Beslutningsbitsekvensen kan være av enhver lengde. Det er imidlertid viktig å merke seg at beslutningsbitsekvensen generelt vil være betydelig kortere enn lengden av nøkkelen som presenteres overfor beslutningstreet. Knutepunktet inkluderer en eksklusjonspekertype 452 og en inklusjonspekertype 456 som angir om hvorvidt deres assosierte eksklusjonspekere eller inklusjonspekere peker på et ytterligere beslutningsknutepunkt eller på en konklusjonsmengde. Disse pekerne utfører således den samme funksjon som lavpekertypen og høypekertypen 41 henholdsvis 44, beskrevet med henvisning til fig. 3. Eksklusjonspekeren 454 og en inklusjonspeker 458 peker på adressen til det neste knutepunktet eller konklusjonsmengden etter det inneværende knutepunkt. Pekerne 454 og 458 er således analoge til lavpekeren og høypekeren 42 henholdsvis 45, som her tidligere er beskrevet. Endringen i terminologi klargjør imidlertid kun den kjensgjerning at en peker følges hvis kandidatnøkkelen inneholder beslutningsbitsekvensen, mens den andre pekeren følges hvis kandidatnøkkelen ikke inneholder beslutningsbitsekvensen.
Fig. 15 viser prosedyren for innsetting av en nøkkel i trestrukturen. Denne prosedyren er meget lik den som ble beskrevet med henvisning til fig. 8, og like henvisningstall har for korthets skyld blitt brukt for like deler. Trinn 152 er imidlertid modifisert til å bli trinn 152', ettersom testen er endret til å se om hvorvidt beslutningsbitsekvensen ved et beslutningsknutepunkt befinner seg i nøkkelen, hvis ja, overføres styringen til trinn 154 hvor inklusjonspekeren følges. Styringen overføres deretter til trinn 156. Hvis trinn 152 finner at beslutningsbitsekvensen ikke er kandidatnøkkelen, så overføres styringen til trinn 158' hvor eksklusjonspekeren følges. En ytterligere modifikasjon av prosedyren er at trinn 162 kan peke direkte på inngangen til trinn 152', hvilket utelater trinn 164 og 166. Nøkkelinnsettingsprosedyren er imidlertid ellers som her tidligere beskrevet.
Prosedyren for sletting av nøkkelen, som vist på fig. 16, er også meget lik det som her tidligere er beskrevet, og igjen, brukes like henvisningstall for like deler. Som det var tilfelle med prosedyren for innsetting av nøkkelen, er trinn 152, 154 og 158 modifisert til å bli trinn 152', 154' og 158', som beskrevet med henvisning til fig. 13, slik at trinn 152 tester for å se om hvorvidt kandidatnøkkelen inkluderer beslutningsbitsekvensen, og hvis ja, følges inklusjonspekeren, og hvis nei, følges eksklusjonspekeren. I tillegg peker trinn 162 nå direkte på inngangen til trinn 152', hvilket utelater trinn 164 og 166.
Indeksen kan selvsagt navigeres for eksakt forespørselsoverensstemmelse med nøkkelen. Fig. 17 illustrerer navigasjonsprosedyren for retur av en eksakt forespørsel for nøkkelen. Prosedyren er meget lik det som er beskrevet med henvisning til fig. 10, og som tidligere vil like henvisningstall bli brukt for like trinn for å unngå gjentagelse, og med unntak for den kjensgjerning at trinn 152, 154 og 158 er modifisert slik at trinn 152' nå sammenligner kandidatnøkkelen med beslutningsbitsekvensen, og hvis beslutningsbitsekvensen er innenfor kandidatnøkkelen, overføres styringen til trinn 154' hvor inklusjonspekeren følges, ellers overføres styringen til 158' hvor eksklusjonspekeren ble fulgt. I tillegg peker trinn 162 nå direkte på inngangen til trinn 152'.
Fig. 18 viser prosedyren for traversering fra et knutepunkt med en mønsterliste (L) og retur av et resultat (R). Prosedyren starter ved trinn 500 hvor den går inn i et startknutepunkt. Styringen overføres deretter til trinn 502 hvor det gjøres en test for å se om beslutningsbitsekvensen befinner seg i mønsterlisten (L). Hvis resultatet av denne testen er negativt, så overføres styringen til trinn 504 hvor det gjøres en test for å se om det eksisterer en eksklusjonspeker fra beslutningsknutepunktet. Hvis det eksisterer en eksklusjonspeker, så overføres styringen til trinn 506 hvor det gjøres en test for å se om pekeren peker på et annet beslutningsknutepunkt, hvis den gjør det, overføres styringen til trinn 508, ellers overføres styringen til trinn 510. Trinn 508 bevirker at det neste beslutningsknutepunkt velges, og traverseringsprosedyren påkalles på en rekursiv måte ved trinn 512. Fra trinn 512 overføres styringen til trinn 514.1 tillegg hvis testen ved trinn 502 konkluderer med at beslutningsbitsekvensen befinner seg inne i mønsterlisten, så overføres styringen til trinn 514, tilsvarende overføres styringen også til trinn 514 hvis trinn 504 viser at eksklusjonspekeren ikke eksisterer.
Med retur til trinn 510, bevirker dette at det gjøres et hopp til den konklusjonsmengden det ble pekt på av pekeren som ble undersøkt ved trinn 506, og deretter gjøres et søk gjennom konklusjonsmengden ved trinn 516. Søkeprosedyren vil heretter bli beskrevet med henvisning til fig. 19. Fra trinn 516 overføres styringen til trinn 514. Trinn 514 utfører tester for å se om inklusjonspekeren eksisterer, og hvis den gjør det, overføres styringen til trinn 518, ellers overføres styringen til trinn 520 som representerer en utgang fra prosedyren. Trinn 518 tester for å se om pekeren peker på et ytterligere beslutningsknutepunkt, hvis den gjør det, overføres styringen til trinn 522 som igjen påkaller prosedyren på en rekursiv måte, ellers overføres styringen til trinn 524 som bevirker et hopp til konklusjonsmengden som det er pekt til av pekeren. Fra trinn 524 utføres det et søk av konklusjonsmengden ved trinn 526, som er det samme som trinn 516. Trinn 526 og 522 peker begge på et utgangstrinn, trinn 528 som representerer en slutt av prosedyren. Fig. 19 illustrerer skjematisk søkeprosedyren ved trinn 516 og 526. Prosedyren påbegynnes ved trinn 530, hvorfra styringen overføres til trinn 532. Trinn 532 utfører en test for å se om konklusjonsmengden er tom, hvis den er det, forlates prosedyren ved trinn 534, ellers overføres styringen til trinn 536. Trinn 536 velger den første nøkkelen i konklusjonsmengden og overfører deretter styringen til trinn 538 som tester for å se om hvorvidt nøkkelen inneholder hvert mønster i mønsterlisten. Hvis den gjør det, overføres styringen til trinn 540, ellers overføres styringen til trinn 542. Trinn 540 adderer nøkkelen og dens egenskaper fra konklusjonsmengden til resultatlisten. Det overfører deretter styringen til trinn 542. Trinn 542 utfører en sjekk for å se om den inneværende nøkkelen er den siste nøkkelen i konklusjonsmengden, hvis den er det, forlates prosedyren ved trinn 544, ellers overføres styringen til trinn 546. Trinn 546 velger den neste nøkkelen i konklusjonsmengden og returnerer styringen til trinn 538. Fig. 20 viser skjematisk hvordan et områdesøk kan utføres ved bruk av en database som utgjør en utførelse av den foreliggende oppfinnelse. Anta at bitmønsteret RE er lagret i knutepunktet 560, og at bitmønsteret OH er lagret i knutepunktet 562. Når knutepunktet forespørres med ordene rød, Fred, Bill og John, blir ordene rød og Fred ledet langs inkluderveien mot et ytterligere knutepunkt 564, mens ordene Bill og John ledes langs ekskluderingsveien til knutepunktet 562. Knutepunktet 562 leder ordet Bill langs ekskluderingsveien, og ordet John langs inkluderingsveien, ettersom det inneholder et bitmønster «OH».
Hvis databasen nå blir forespurt ved bruk av et jokertegnsøk, f.eks. ved bruk av søkestrengen «<*>rød<*>», hvor<*>representerer et flertegns jokertegn, så kan knutepunktet 560 bestemme at ekskluderingsveien mot 562 ikke behøver å søkes, og søket kan følgelig begrenses til veien som inkluderer knutepunktet 564. Hvis indeksen forespørres ved bruk av søkeuttrykket «<*>lapp<*>», så er knutepunktet 560 ikke i stand til å bestemme om hvorvidt bitmønsteret RE er i søkestrengen (ettersom det kan befinne seg i jokertegnpartiet), og indeksen må følgelig søke langs både inkluderingsveien og ekskluderingsveien.
Det har ingen verdi at posisjonen av bitmønsteret i nøkkelen ikke behøver å bevege seg sekvensielt langs nøkkelen når man navigerer fra knutepunkt til knutepunkt i databasen.
Nøkkelkompre sjon
I konvensjonelle databasesystemer er nøkkelen i sin helhet lagret ved hvert beslutningsknutepunkt. Mens, i oppfinnelsen som her er beskrevet ovenfor, et parti av nøkkelen ble lagret ved hvert beslutningsknutepunkt, selv om lengden av dette partiet ikke er avgrenset. Søkeren har innsett at ytterligere plassbesparelser kan oppnås ved å lagre ikke nøkkelen i sin helhet eller et delparti av nøkkelen i sin egentlige form, men et uttrykk for nøkkelen som er utledet fra et resultat av én av bildningsprosess. Hashkodealgoritmer, så som CRC 32 og Adler 32 er velkjente, og tilveiebringer en funksjon for avbildningskoding av nøkkelverdier. Disse algoritmene opererer på en lang bitsekvens for å utlede en mye kortere bitsekvens. Avbildningsalgoritmen er slik at den er deterministisk, ved det at hvis inngangsbitsekvensen alltid er den samme så er den utledede bitsekvensen alltid den samme. Avbildningen kan imidlertid ikke være unik på grunn av den høye grad av kompresjon som oppnås, og følgelig vil flere inngangssekvenser avbildes på en mye kortere utgangssekvens. Likevel, ved å godta denne konsekvensen, kan designen av indeksen reduseres betydelig. Således, ved navigering av tregrafen for en kandidatnøkkel K, følges den konvensjonelle traverseringsmetode med unntak av at verdien A(K) brukes istedenfor K, hvor A er avbildningsfunksjonen som brukes for tregrafen.
Fordi to eller flere nøkler kan avbilde den samme funksjon, kan konklusjonsmengden inneholde informasjon som ikke ville ha blitt nådd hvis avbildningsfunksjonen ikke hadde blitt brukt. Det er derfor nødvendig å undersøke disse inngangene i konklusjonsmengden for å ekskludere de som ikke korresponderer til den uavbildede nøkkelen. Dette kan gjøres ved å holde den uavbildede nøkkelen i konklusjonsmengden og sammenligne disse nøklene med den opprinnelige uavbildede søkenøkkelen for å ekskludere de uttrykkene som ikke stemmer overens med den. En plassbesparelse kan imidlertid også oppnås ved å kode nøklene i konklusjonsmengden med en annen kodealgoritme B, hvor B er forskjellig fra A. Sannsynligheten for en innkorrekt søkenøkkelavbildning til to identiske avbildningsverdier under bruk av begge avbildningsalgoritmer er faktisk meget liten, og det er følgelig svært usannsynlig at det vil fremkomme en feilaktig avbildning. Sannsynligheten for en feilaktig overensstemmelse er faktisk ca. én til R<2>, hvor R er områdestørrelsen til funksjonsavbildningen. Både avbildet nøkkel A og B lagres i konklusjonsmengden, ettersom dette letter re-avbildningen av konklusjonsmengden dersom den skulle nå sin maksimale størrelse.
For å sette en nøkkel inn i indeksen kodes nøkkelen ved bruk av den første hashfunksjon. Indeksen navigeres deretter ved bruk av den kodede nøkkel via de navigasjonsmetoder som er beskrevet ovenfor eller konvensjonelle metoder, inntil en konklusjonsmengde nås. Nøkkelen kan deretter settes inn i konklusjonsmengden enten i en ukodet form, eller den kan kodes ved bruk av en annen hashfunksjon.
Slettinger er tilsvarende, hvor nøkkelen blir slettet fra konklusjonsmengden enten i sin egentlige form, eller ved bruk av formen med den kodede verdi som et resultat av operasjon av nøkkelen ved bruk av den annen hashfunksjon.
Det er således mulig å tilveiebringe en effektiv fremgangsmåte til koding av databasenøkler i en form hvor deres størrelse er sterkt redusert, og hvor bruken av dobbelt koding ved bruk av forskjellige funksjoner reduserer faren for feilaktige overensstemmelser til en akseptabelt liten forekomst.
Avgrenset nøkkel
Fig. 21 illustrerer skjematisk en indeks som utgjør en utførelse av den foreliggende oppfinnelse. Idémessig ser indeksen ut som indeksen for et konvensjonelt B-tre. Istedenfor at de egentlige nøkler i sin helhet blir inkludert inne i hvert knutepunkt i beslutningstreet, brukes det imidlertid en kodet versjon av nøkkelen, hvor nøkkelen avbildes ved bruk av en modulo arimetrisk funksjon. Det følger også at der hvor kun en del av nøkkelen er uavgrenset, så behøver kun en del av nøkkelen å avbildes i samsvar med den foreliggende oppfinnelse. Således, når en nøkkel presenteres overfor indeksen for søking, sletting eller innsetting, anvendes en standard modulofunksjon på nøkkelen før dens bruk. Å anvende modulo på en nøkkel av tegnstrengtypen krever at strengen behandles som et meget stort heltall med en størrelse uten fortegn av mangfoldige byte, hvor det første tegnet er den mest betydningsfulle byte i heltallsverdien, og deretter anvendelse av modulo.
Således, for å sette inn en nøkkel i indeksen, kodes nøkkelen ved bruk av den modulo som er valgt for indeksen. Indeksstrukturen blir deretter navigert, som her tidligere beskrevet, til en konklusjonsmengde (løvblokk) ved bruk av den kodede nøkkelverdi via standard indeksmetoder, eller metoder som her er presentert. Nøkkelen blir deretter innsatt i konklusjonsmengden enten i sin egentlige form eller i sin kodede form. Sletting og søking utføres på lignende måter. Således, i et søk så snart en konklusjonsmengde har blitt nådd, sammenlignes nøkkelen med alle nøkkelverdiene i konklusjonsmengden, enten i deres egentlige eller kodede former.
Fig. 22 illustrerer skjematisk de muligheter som kan forekomme når en operator ønsker å kjøre en områdejamføring eller områdeoverensstemmelse, istedenfor en eksakt overensstemmelse, som beskrevet ovenfor. Minimum og maksimum søkenøklene for området representeres med L (nedre) henholdsvis U (øvre). Disse nøklene eksisterer i et uavgrenset eller uavbildet søkerom 580, som vist på fig. 22. Nøklene blir deretter avbildet gjennom moduloprosessen 582 for å konvertere dem til det avgrensede området av indeksen. Det kan ikke garanteres at nøklenes orden vil bli bevart etter avbildningsprosessen. Dette gir opphav til to muligheter. For det første, som vist i den avbildede mengde som generelt er betegnet 584, har den avbildede nedre nøkkel en verdi som er mindre enn den avbildede øvre nøkkel. Hvis dette er tilfelle, så navigeres indeksen til en konklusjonsmengde ved bruk av standard indeksnavigeringsmetoder. Imidlertid, som også betraktet og skjematisk illustrert i avbildningsmengden 586, kan den avbildede nedre nøkkel ML ha en verdi som er større enn den avbildede øvre nøkkel MU. I dette tilfellet må søket gjøres for alle konklusjonsmengder som har kodede verdier som er større enn eller lik den kodede minimale nøkkel ML. Dette søket utføres ved bruk av standard fremgangsmåter til indeksnavigasjon. I tillegg må det gjøres et søk for alle konklusjonsmengder som har kodede verdier som er mindre enn eller lik den kodede maksimumnøkkel MU. Igjen utføres dette ved bruk av standard fremgangsmåter til navigasjon.
Det skal bemerkes at denne teknikken kun kan virke når forskjellen mellom nøklene er mindre enn domenen til modulokodesystemet. Således, som et reelt eksempel, hvis nøklene ble avbildet ved bruk av en modulo 10, så må differansen mellom de nedre og øvre nøkler i søkeområdet være mindre enn 10.
Transientnøkler
Fig. 23 illustrerer skjematisk datastrukturen til en konklusjonsmengde/løvblokk 600 som utgjør en utførelse av den foreliggende oppfinnelse. Konklusjonsmengden inneholder en aldersbase 602 som representerer dato og tidspunkt for den mest nylige oppdatering av konklusjonsmengden 600. Den inneholder også en flerhet av nøkkelinnganger 604, 606 og 608. For korthets skyld betraktes kun nøkkelinngangen 608, idet denne er videre oppdelt i tre deler, nemlig en inngangsalder 608A, inngangsnøkkelinformasjon 608B og
inngangsegenskapinformasjon 608C.
Når det gjøres en transient inngang har den et inngangsaldersdata 608A assosiert med seg. Dette dataet refererer til en aldersenhet og en aldersgrense som kan settes for indeksen som en helhet, men som valgfritt kan settes for individuelle konklusjonsmengder. Aldersenheten spesifiserer antallet sekunder i én enkelt aldersenhet. F.eks. innebærer en verdi på 60 således ett minutt, mens 86400 innebærer én dag. Aldersgrensen representerer antallet aldersenheter hvoretter nøkkelen kan mistes fra indeksen. Dette er typisk i området 1-254, hvilket gjør det mulig å passe den inn i et ord på 8 bit. Hvis en nøkkel settes til å løpe ut etter 31 dager, settes således aldersenheten til 86400 sekunder, og aldersgrensen settes til 31. For nøkler som skal løpe ut etter én dag, kan aldersenheten og aldersgrensen settes til 3600 sekunder henholdsvis 24.
Hver inngang inneholder en inngangsalder, for effektivitetens skyld uttrykt i én byte, og denne kan i dette eksemplet settes mellom verdien 0 og 255, selv om andre verdiområder kan velges som det måtte være hensiktsmessig. Null indikerer at en inngang er ny, eller mindre enn én aldersenhet eldre enn aldersbasen. 255 indikerer at inngangen er foreldet.
For hver oppdatering eller innsetting i konklusjonsmengden følges følgende sekvens. Først noteres den inneværende dato og tidspunkt, og deretter beregnes antallet forløpte aldersenheter mellom aldersbasen og den inneværende dato og tidspunkt. Deretter får hver inngang i konklusjonsmengden sin inngangsalder inkrementert med antallet forløpte aldersenheter. Enhver inngang med en inngangsalder som beregnes til å være større enn eller lik 255 får sin inngangsalder satt til 255. Enhver slik inngang blir således tilgjengelig for gjenbruk. Deretter settes aldersbasen til den dato og det tidspunkt som ble notert ved begynnelsen av prosedyren. En eventuell nøkkel som skal settes inn plasseres i en tilgjengelig ledig plass i konklusjonsmengden, og settes til en inngangsalder på null. En tilgjengelig ledig plass kan enten være en ledig plass som ennå ikke har blitt allokert, eller en ledig plass som har blitt foreldet (fordi dens inngangsalder har nådd 255). Videre får enhver inngang som oppdateres sin inngangsalder tilbakestilt til null.
I den ovenstående utførelse ble inngangs alderen lagret som én enkelt byte. Dette gir et område på 254 tidsperioder hvor en type data kan bli foreldet. Det er mulig å bruke mer enn én byte, hvilket gir et bredere område av aldersgrenser, men med en økt lagringskostnad. Alternativt kan det brukes mindre enn én byte som inngangsalder, hvilket reduserer lagringskostnaden, men som også reduserer området av aldersgrenser som kan defineres individuelt.
Det er således mulig å tilveiebringe en forbedret database.
Deling av beslutningsgrafer
Som her tidligere drøftet er det foretrukket at helheten av beslutningsgrafen (indeksen) holdes innenfor halvlederminnet, ettersom dette muliggjør rask aksess. Kapasiteten til maskinvareplattformen som kjører databasen eller størrelsen av databasen kan imidlertid være slik at det ikke er mulig å holde hele indeksen innenfor halvlederminnet eller tiden. Dette kan f.eks. være fordi maskinen forventes å utføre flere oppgaver samtidig og utføre andre funksjoner.
Det er velkjent at masselagringsinnretninger, så som harddiskstasjoner, er oppdelt i blokker med en forhåndsbestemt størrelse. En fil av enhver størrelse som er mindre enn blokkstørrelsen opptar likevel én blokk. Således brukes fysisk minne i multipler av blokkstørrelsen. Ved lesing og skriving av beslutningsgrafen til et slikt minne, er det foretrukket at beslutningsgrafen struktureres på en slik måte at dens helhet, eller så mye som mulig av den, skrives til én enkelt blokk. Det er således sannsynlig at en beslutningsgraf befinner seg innenfor en minneblokk. Ettersom indeksen blir stadig fullere, vokser imidlertid beslutningsgrafen ettersom nøkkelpopulasjonen vokser. Det kommer derfor en tid når det blir umulig å få plass til beslutningsgrafen innenfor en enkelt blokk. Fremgangsmåter for å plassere beslutningsgrafen over flere blokker er således nødvendig.
Med henvisning til fig. 24, anta at minneblokken 700 representerer den fysiske størrelse av en blokk på harddisken i et datamaskinsystem, og at blokken er underoppdelt for å inneholde blant annet individuelle partier 702, 704, 706 og 708, som hvert er relatert til dataene med hensyn på et assosiert knutepunkt i beslutningsgrafen. Videre, anta at indeksen nå har nådd en slik størrelse at blokken 700 er fullstendig full.
Anta nå at det som et resultat av en databaseinnsettingsoperasjon er nødvendig å sette inn ytterligere et knutepunkt i beslutningsgrafen. Innsettingen av knutepunktet kan skje på ethvert punkt. Som her tidligere bemerket, omfatter hvert beslutningsknutepunkt (fig. 3) en beslutningsverdi, og en lavpeker og en høypeker som viser det neste knutepunktet i grafen. Som et resultat av dette kan det gjøres lokale endringer med grafen, slik at et nytt knutepunkt kan settes inn etter ethvert eksisterende knutepunkt. Således, anta at det som et resultat av en innsetting er nødvendig å sette inn et nytt knutepunkt etter det knutepunkt hvis data er representert av dataelementet 706. Først, når det nye knutepunktet settes inn, blir én av utgangspekerne fra knutepunktet 706 modifisert til å peke til det nye knutepunktet. Som en del av innsettingsprosessen blir utgangspekerne fra det nye knutepunktet også satt opp korrekt, slik at beslutningsgrafen ikke blir brutt. Imidlertid, gitt at det ikke lenger er mulig å lagre dataene som er relatert til det nye knutepunktet, 710, i minneblokken 700, må detaljene som er relatert til det nye knutepunktet 710 lagres i en ytterligere blokk 712. Ytterligere knutepunkt som er relatert til det nye knutepunktet kan også opprettes, og informasjon kan lagres i minneblokken 712.
Hvis det på et senere tidspunkt er påkrevet å sette inn et nytt knutepunkt som er relatert til et tidligere eksisterende knutepunkt, 708, så blir igjen minneblokken 700 full, og detaljene ved et ytterligere nytt knutepunkt 712 må følgelig lagres på utsiden av minneblokken 700. Denne prosessen gjør det mulig for beslutningsgrafen å vokse, men kan resultere i at det gis opphav til et stort antall tilnærmet tomme minneblokker fra hver fulle (utgangs) blokk.
Fig. 25 illustrerer en alternativ fremgangsmåte til å øke indeksen. Anta igjen at minneblokken 700 er full, og at det nå er nødvendig å sette inn et nytt knutepunkt. Som før opprettes det en ny minnegrafblokk. Men nå deles
utgangsbeslutningsgrafen i like deler. En del plasseres i den gamle blokken 700, mens den andre delen plasseres i den nye blokken 712.
Med henvisning til fig. 25, anta at indeksen 720 initialt er lagret inne i minneblokken 700, og at blokken 700 nå er full. Anta at en innsetting av en indeks
resulterer i opprettelsen av et nytt knutepunkt 722, og at denne prosessen forårsaker at indeksen overstiger størrelsen av minneblokken 700. Ved denne fremgangsmåten til styring av indeksens vekst, blir imidlertid strukturen til indeksene analysert for å dele den hovedsakelig likt mellom indeksblokkene. Således, ved å ta det parti av
indeksen som er vist på fig. 25, kan det ses at det ved å starte ved knutepunktet 724; kan nås ti knutepunkt, innsirklet med strekprikket linje 726, med veien som strekker seg til venstre for knutepunktet 724, mens tolv knutepunkt, innsirklet med
strekprikket linje 728, kan finnes i veien som strekker seg til høyre for knutepunktet 724. En algoritme skanner rekursivt indeksstrukturen, ved å velge et testknutepunkt og deretter beregne knutepunktene som er avhengige av dette, for å finne et egnet kandidatknutepunkt for deling av indeksen. I eksemplet som er vist på fig. 25 vil knutepunktet 724 og knutepunktene som er innsirklet med linjen 726 bli plassert i den gamle minneblokken 700, mens knutepunktene som er innsirklet med den strekprikkede linjen 728 vil bli plassert i den nye minneblokken 712. Denne prosessen sikrer at hver minneblokk brukes optimalt og noenlunde likt, og stopper spredningen av hovedsakelig tomme minneblokker.
Kvalifikatorer
Det er ofte ønskelig at søkeuttrykket i indeksen utføres ved bruk av to eller flere søkekriterier. Disse kriteriene kombineres, generelt i henhold til prinsippene ved bolsk algebra.
Det er mulig at forespørselen blir delt ned i individuelle deler hvor hver del blir utført før den neste er nede, og deretter kombineres resultatene til slutt. Dette kan imidlertid være beregningsmessig meget intensivt og kreve mange lese/skriveoperasjoner til et blokkdatalager, så som en harddisk. En forespørsel som returnerte 100 treff kan således f.eks. kreve ytterligere 100 langsomme disk I/O-operasjoner for å hente datapekeren med indekseforespørselen.
Det kan være at ikke alle de data som hentes med forespørselen er påkrevet. Således, hvis det gjøres en forespørsel i en database for å finne alle biler som ble registrert i 1997 og som var Mercedes, vil forespørselen for biler som er registrert i 1997 returnere mange tusen resultater. Kun et lite antall av disse har imidlertid vært en Mercedes. Videre kan det hende at det for mange forespørsler ikke er mulig å endre ordenen ved forespørselen på en slik måte at man reduserer antallet uønskede resultater. Dette problemet kan overvinnes ved å bruke sammenkjedede nøkler. Hittil har imidlertid slike sammenkjedede nøkler opprettholdt helheten både ved den primære søkenøkkelen og subsidiære søkenøkler i den kombinerte sammenkjedede nøkkelen, og følgelig blir den kombinerte nøkkelen meget lang.
Søkeren har innsett at forbedret søkeytelse kan utføres ved å assosiere kvalifikatorer, og særlig tilføyde kvalifikatorer, til den primære søkenøkkelen. Kvalifikatoren representerer ikke direkte det annet eller etterfølgende søkeuttrykk, men er isteden en avkortet form for det etterfølgende uttrykk. Ved den foreliggende oppfinnelse genereres kvalifikatoren ved å uføre en hashingfunksjon på det etterfølgende søkeuttrykk eller hvert etterfølgende søkeuttrykk. Den samme hashingfunksjon brukes til å forespørre en database for innsetting eller sletting av data. Således, under opprettelse av databasen, opprettes indeksen med en hovednøkkel (som tidligere) og med null eller flere kvalifikatornøkler.
I bruk navigeres indeksen ved å bruke hovednøkkelen, og data lagres i konklusj onsmengdene på vanlig måte. Hver kvalifikatornøkkel er imidlertid hashkodet ned til én enkelt byte, dvs. et tall i området 0-255, og lagres sammen med nøkkelinngangen i konklusjonsmengden.
Under en forespørsel blir hovednøkkelen forsynt med null eller flere kvalifikatornøkler. Indeksen blir deretter navigert ved bruk av hovednøkkelen, som tidligere. Til slutt, så snart den korrekte konklusjonsmengde eller -mengdene er nådd, så blir disse deretter skannet ved å jamføre hovednøkkelverdien og kvalifikatornøkkelhashkodene med inngangene i konklusjonsmengden. Kun de inngangene som stemmer fullstendig overens med hovednøkkelen og alle kvalifikatorhashkodene returneres.
Det skal bemerkes at flere kvalifikatornøkler kan avbilde til den samme hashkode på én byte. Det er derfor en liten men endelig sannsynlighet for at uønskede data vil bli returnert. Imidlertid, under antagelse av at det brukes en god randomiserende hashkoding, er sannsynligheten for en feil overensstemmelse 1-255 (eller mindre enn 0,5 %), og det kan ses at den foreliggende oppfinnelse garanterer å returnere alle korrekte resultater, men også med en liten prosentandel av feil resultater. Alle nøkkeltreffene som returneres må således deretter inspiseres i et datalager for å fjerne eventuelle uønskede innganger. Imidlertid, reduksjonen i indeksens størrelse og forenklingen av forespørselsprosessen mer enn kompenserer for den ekstra analyse av de returnerte treffene. Denne fordelen øker ettersom det brukes flere kvalifikatorer, gitt at sannsynligheten for et feilaktig treff minker med et økende antall kvalifikatorer. Sannsynligheten for et dårlig resultat er, under ideelle omstendigheter, (1/255)N. Således med to kvalifikatorer (N=2), er sannsynligheten for et dårlig resultat 1-65025, eller mindre enn 0,002 %. Ved tre kvalifikatorer er sjansen for å returnere et feilaktig dataelement redusert til ca. 14 millioner til 1.
Det vil ses at størrelsen av søkenøkkelen, og datalagringskravene innenfor konklusj onsmengdene, er sterkt redusert. Således, hvis det hadde vært meningen å søke på åtte uttrykk, som hvert kunne ha en lengde opptil 8 byte, ville dette konvensjonelt kreve lagring av 64 byte data for hver søkenøkkel. Ved den foreliggende oppfinnelse er dette kravet redusert til kun 15 byte data.
Ved forespørring av databasen er hver kvalifikatornøkkel valgfri, og ingen, noen eller alle nøklene kan tilføres, fordi de ikke påvirker navigasjon av indeksstrukturen. Kvalifikatornøklene påvirker kun antallet treff som returneres ved skanning av konklusj onsmengdene. Således, jo flere kvalifikatorer som tilføres, jo mer presis blir forespørselsresultatet.
Det skal bemerkes at denne kvalifikatorteknikken kan anvendes på enhver indeksstruktur, f.eks. velkjente strukturer så som B-treet. Fig. 26 illustrerer skjematisk formatet til søkenøkkelen i samsvar med dette aspektet av den foreliggende oppfinnelse, hvor et første parti av nøkkelen inneholder de primære nøkkeldata, og deretter omfatter det gjenværende av nøkkelen kvalifikatorene Ql, Q2 også videre til Q7, som hver er et ord med en lengde på 1 byte som er produsert med en hashingfunksjon på de opprinnelige ekstra nøkler.
Mønsterjamførin<g>
Det er ofte ønskelig å foreta en mønsterjamføringsforespørsel innenfor en database. Således, istedenfor å søke på helheten til en søkenøkkel, utføres et søk ved bruk av et delparti av nøkkelen.
Effektiviteten ved slik søking avhenger av hvor godt nøkkelpopulasjonen er oppdelt i hvert knutepunkt i beslutningsgrafen.
Et problem med ASCII-karaktersettet er at det omfatter 255 tegn, men at sannsynligheten for at enkelte tegn opptrer er meget høy, og likevel er kombinasjoner av doble tegn særlig sjeldne.
Søkeren har innsett at mønsterjamføring kan sterkt forbedres hvis ASCII-tegnsettet (eller faktisk et ekvivalent sett) avbildes på et mindre sett.
Søkeren har definert et antall avbildninger som reduserer settet til 16 tegn, slik at et enkelt tegn passer innenfor fire bit (0-15), mens en totegnssekvens kan passe innenfor en enkelt byte.
Disse modifiserte tegnsettene kan deretter brukes i én enkelt indeks for å dele ned nøkkelpopulasjonen.
Avbildningen av tegnsettet anvendes på nøkkelen rett før navigering av beslutningsgrafen for en operasjon med innsetting, sletting eller en forespørsel. Enten den opprinnelige nøkkelverdien eller den konverterte nøkkelverdien (som har en mindre størrelse) kan lagres sammen med konklusjonsmengden avhengig av om hvorvidt nøyaktige eller probabilistiske forespørselsresultater er påkrevet. Eksempler på to tegnsett er gitt nedenfor:
I hvert av disse systemene konverteres tegn til versaler, slik at forespørselen er ikke-versal spesifikk. Videre er ikke-trykte tegn, så som linjeskift og en tegnretur, fjernet fra avbildningene.
Ved å bruke dette reduserte settet kan ytelsen til mønsterkamføring sterkt forbedres. Nøklene avbildes før operasjoner med innsetting, forespørsel eller sletting, og deretter navigeres indeksen ved bruk av den avbildede nøkkelen.

Claims (6)

1. Fremgangsmåte for organisering av en database, karakterisert vedat nøkkelen som brukes til å navigere en indeks er en komposittnøkkel, og at én eller flere av nøklene i denne er representert i en komprimert form.
2. Fremgangsmåte ifølge krav 1, karakterisert vedat den primære nøkkel er ukomprimert, og at ytterligere nøkler innen komposittnøkkelen er komprimert.
3. Fremgangsmåte ifølge krav 1 eller 2, karakterisert vedat den komprimerte nøkkelen eller hver komprimerte nøkkel virker som en kvalifikator som brukes til å raffinere et søk som utføres ved bruk av databasen.
4. Fremgangsmåte ifølge krav 3, karakterisert vedat indeksen navigeres ved bruk av den primære nøkkelen inntil en konklusjonsmengde nås, og at resultatene i konklusjonsmengden deretter utspørres ved bruk av kvalifikatoren eller hver kvalifikator.
5. Fremgangsmåte ifølge krav 1, karakterisert vedat nøklene komprimeres ved bruk av en hashing-funksjon.
6. Datamaskinprogram for organisering av en database karakterisert vedat det omfatter instruksjoner som medvirker at en prosesseringsinnretning utfører fremgangsmåten i henhold til kravene 1 til 5 når datamaskinprogrammet eksekveres av prosesseringsinnretningen.
NO20051945A 2000-11-30 2005-04-21 Database NO332645B1 (no)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
GB0029238A GB2369695B (en) 2000-11-30 2000-11-30 Database
PCT/GB2001/005242 WO2002044940A2 (en) 2000-11-30 2001-11-28 Method of organising, interrogating and navigating a database

Publications (2)

Publication Number Publication Date
NO20051945L NO20051945L (no) 2003-07-23
NO332645B1 true NO332645B1 (no) 2012-11-26

Family

ID=9904192

Family Applications (2)

Application Number Title Priority Date Filing Date
NO20032416A NO20032416L (no) 2000-11-30 2003-05-27 Fremgangsmate for organisering av en database
NO20051945A NO332645B1 (no) 2000-11-30 2005-04-21 Database

Family Applications Before (1)

Application Number Title Priority Date Filing Date
NO20032416A NO20032416L (no) 2000-11-30 2003-05-27 Fremgangsmate for organisering av en database

Country Status (22)

Country Link
US (1) US8224829B2 (no)
EP (3) EP2009559A1 (no)
JP (3) JP4810785B2 (no)
KR (2) KR20080024237A (no)
CN (2) CN1552032B (no)
AR (1) AR035508A1 (no)
AT (1) ATE436055T1 (no)
AU (4) AU2002222096B2 (no)
CA (1) CA2429990A1 (no)
CY (1) CY1109459T1 (no)
DE (1) DE60139212D1 (no)
DK (1) DK1364314T3 (no)
EA (4) EA005641B1 (no)
EG (1) EG23400A (no)
ES (1) ES2329339T3 (no)
GB (6) GB2406681B (no)
IL (3) IL156117A0 (no)
MY (2) MY132130A (no)
NO (2) NO20032416L (no)
NZ (3) NZ526102A (no)
SG (1) SG148842A1 (no)
WO (1) WO2002044940A2 (no)

Families Citing this family (71)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8352400B2 (en) 1991-12-23 2013-01-08 Hoffberg Steven M Adaptive pattern recognition based controller apparatus and method and human-factored interface therefore
US7904187B2 (en) 1999-02-01 2011-03-08 Hoffberg Steven M Internet appliance system and method
GB2383153A (en) * 2001-12-17 2003-06-18 Hemera Technologies Inc Search engine for computer graphic images
US7007027B2 (en) * 2002-12-02 2006-02-28 Microsoft Corporation Algorithm for tree traversals using left links
US7072904B2 (en) 2002-12-02 2006-07-04 Microsoft Corporation Deletion and compaction using versioned nodes
GB0304782D0 (en) * 2003-03-03 2003-04-09 Percy Richard System and method using alphanumeric codes for the identification, description, classification and encoding of information
US7620624B2 (en) * 2003-10-17 2009-11-17 Yahoo! Inc. Systems and methods for indexing content for fast and scalable retrieval
US7849063B2 (en) * 2003-10-17 2010-12-07 Yahoo! Inc. Systems and methods for indexing content for fast and scalable retrieval
US20050144241A1 (en) * 2003-10-17 2005-06-30 Stata Raymond P. Systems and methods for a search-based email client
US20050183120A1 (en) * 2004-01-13 2005-08-18 Saurabh Jain Multi-user personalized digital multimedia distribution methods and systems
US8316060B1 (en) 2005-01-26 2012-11-20 21st Century Technologies Segment matching search system and method
US8515983B1 (en) * 2005-10-28 2013-08-20 21st Century Technologies Segment matching search system and method
US7567968B2 (en) * 2005-01-31 2009-07-28 Microsoft Corporation Integration of a non-relational query language with a relational data store
US7565217B2 (en) * 2005-04-01 2009-07-21 International Business Machines Corporation Traversal of empty regions in a searchable data structure
US8412528B2 (en) * 2005-06-21 2013-04-02 Nuance Communications, Inc. Back-end database reorganization for application-specific concatenative text-to-speech systems
JP4810915B2 (ja) * 2005-07-28 2011-11-09 日本電気株式会社 データ検索装置及び方法、並びにコンピュータ・プログラム
US7792368B2 (en) * 2005-08-10 2010-09-07 Xerox Corporation Monotonic classifier
US8768777B2 (en) * 2005-08-31 2014-07-01 Sap Ag Tracking assets between organizations in a consortium of organizations
US8478755B2 (en) * 2006-04-20 2013-07-02 Microsoft Corporation Sorting large data sets
US8229902B2 (en) * 2006-11-01 2012-07-24 Ab Initio Technology Llc Managing storage of individually accessible data units
GB2445764A (en) * 2007-01-22 2008-07-23 Surfcontrol Plc Resource access filtering system and database structure for use therewith
GB2452760A (en) 2007-09-14 2009-03-18 Data Connection Ltd Storing and searching data in a database tree structure for use in data packet routing applications.
WO2009148473A1 (en) * 2007-12-12 2009-12-10 21Ct, Inc. Method and system for abstracting information for use in link analysis
US20090189894A1 (en) 2008-01-27 2009-07-30 Petrov Julian Methods and systems for analyzing a remoting system to determine where to render three dimensional data
JP5220483B2 (ja) * 2008-06-06 2013-06-26 インターナショナル・ビジネス・マシーンズ・コーポレーション 木構造のデータに対する集約計算を行うコンピュータ・システム、並びにその方法及びコンピュータ・プログラム
CN101295312B (zh) * 2008-06-18 2011-12-28 中兴通讯股份有限公司 一种使用表格呈现数据的方法
US8055646B2 (en) * 2008-08-05 2011-11-08 International Business Machines Corporation Prevention of redundant indexes in a database management system
US8095548B2 (en) * 2008-10-14 2012-01-10 Saudi Arabian Oil Company Methods, program product, and system of data management having container approximation indexing
US9047330B2 (en) * 2008-10-27 2015-06-02 Ianywhere Solutions, Inc. Index compression in databases
US20100257181A1 (en) * 2009-04-01 2010-10-07 Sybase, Inc. Dynamic Hash Table for Efficient Data Access In A Relational Database System
US8306958B2 (en) * 2009-09-14 2012-11-06 At&T Intellectual Property I, L.P. Time-outs with time-reversed linear probing
US20110093439A1 (en) * 2009-10-16 2011-04-21 Fanglu Guo De-duplication Storage System with Multiple Indices for Efficient File Storage
DE102009054753A1 (de) * 2009-12-16 2011-06-22 Robert Bosch GmbH, 70469 Verfahren zum Betreiben einer Sicherheitseinrichtung
US8694536B2 (en) * 2010-11-16 2014-04-08 Tibco Software Inc. Fast matching for content-based addressing
CN102087666B (zh) * 2011-01-30 2012-10-31 华东师范大学 一种基于节点与关键字覆盖关系的索引及其构建方法和查询方法
EP2490134A1 (en) 2011-02-18 2012-08-22 Amadeus S.A.S. Method, system and computer program to provide fares detection from rules attributes
US8983995B2 (en) 2011-04-15 2015-03-17 Microsoft Corporation Interactive semantic query suggestion for content search
US8788505B2 (en) 2011-04-27 2014-07-22 Verisign, Inc Systems and methods for a cache-sensitive index using partial keys
US8799240B2 (en) * 2011-06-23 2014-08-05 Palantir Technologies, Inc. System and method for investigating large amounts of data
US8676951B2 (en) * 2011-07-27 2014-03-18 Hitachi, Ltd. Traffic reduction method for distributed key-value store
US8965921B2 (en) * 2012-06-06 2015-02-24 Rackspace Us, Inc. Data management and indexing across a distributed database
WO2014078681A1 (en) * 2012-11-16 2014-05-22 Dahn David W Computer-implemented decision tracking systems, displays and methods
KR101441869B1 (ko) * 2013-02-21 2014-09-22 고려대학교 산학협력단 단축 url 생성 시스템 및 그 방법
EP3182304A1 (en) 2013-03-29 2017-06-21 Pilab S.A. Computer-implemented method for storing unlimited amount of data as a mind map in relational database systems
EP3159815A1 (en) 2013-06-30 2017-04-26 Pilab S.A. Database hierarchy-independent data drilling
EP2843568A1 (en) 2013-08-30 2015-03-04 Pilab S.A. Computer implemented method for creating database structures without knowledge on functioning of relational database system
EP2843567B1 (en) 2013-08-30 2017-05-10 Pilab S.A. Computer-implemented method for improving query execution in relational databases normalized at level 4 and above
US9400817B2 (en) 2013-12-31 2016-07-26 Sybase, Inc. In-place index repair
US10061792B2 (en) * 2013-12-31 2018-08-28 Sybase, Inc. Tiered index management
US9450602B2 (en) * 2014-01-02 2016-09-20 Sap Se Efficiently query compressed time-series data in a database
US9667704B1 (en) * 2014-04-26 2017-05-30 Google Inc. System and method for classifying API requests in API processing systems using a tree configuration
CN105404437B (zh) * 2014-08-05 2019-07-26 阿里巴巴集团控股有限公司 一种信息操作的方法及装置
CN104268146A (zh) * 2014-08-21 2015-01-07 南京邮电大学 一种适合分析型应用的静态b+树索引方法
CN104182522B (zh) * 2014-08-26 2017-04-19 中国科学院信息工程研究所 一种基于循环位图模型的辅助索引方法及装置
US20160063051A1 (en) * 2014-08-29 2016-03-03 Netapp, Inc. Methods for persisting data on nonvolatile memory for fast updates and instantaneous recovery and devices thereof
DE102014112741A1 (de) 2014-09-04 2016-03-10 Dr. Ing. H.C. F. Porsche Aktiengesellschaft Kraftfahrzeug
US9836695B2 (en) * 2015-03-24 2017-12-05 International Business Machines Corporation Automated decision support provenance and simulation
CN106294371B (zh) 2015-05-15 2019-08-16 阿里巴巴集团控股有限公司 字符串值域切分方法及装置
JP6241449B2 (ja) * 2015-05-21 2017-12-06 横河電機株式会社 データ管理システム及びデータ管理方法
US10846275B2 (en) 2015-06-26 2020-11-24 Pure Storage, Inc. Key management in a storage device
US9811524B2 (en) 2015-07-27 2017-11-07 Sas Institute Inc. Distributed data set storage and retrieval
US9946719B2 (en) 2015-07-27 2018-04-17 Sas Institute Inc. Distributed data set encryption and decryption
WO2017186774A1 (en) 2016-04-26 2017-11-02 Pilab S.A. Systems and methods for querying databases
SG11201811425TA (en) * 2016-09-22 2019-01-30 Visa Int Service Ass Techniques for in-memory key range searches
JP2018206084A (ja) * 2017-06-05 2018-12-27 株式会社東芝 データベース管理システムおよびデータベース管理方法
CN110427340B (zh) * 2018-04-28 2023-08-04 伊姆西Ip控股有限责任公司 用于文件存储的方法、装置和计算机存储介质
US11216432B2 (en) * 2018-07-06 2022-01-04 Cfph, Llc Index data structures and graphical user interface
US10423662B1 (en) * 2019-05-24 2019-09-24 Hydrolix Inc. Efficient and scalable time-series data storage and retrieval over a network
US11263195B2 (en) * 2020-05-11 2022-03-01 Servicenow, Inc. Text-based search of tree-structured tables
WO2023148411A1 (es) * 2022-02-04 2023-08-10 Navarro Arteaga Angel Procedimiento de calibración de gráficos
US11803545B1 (en) * 2022-06-24 2023-10-31 Sap Se Runtime statistics feedback for query plan cost estimation

Family Cites Families (53)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US3593309A (en) 1969-01-03 1971-07-13 Ibm Method and means for generating compressed keys
JPH0772898B2 (ja) * 1981-06-27 1995-08-02 富士通株式会社 インデックスの作成方式
JPS607557A (ja) * 1983-06-27 1985-01-16 Fujitsu Ltd 文字型デ−タの区分化圧縮法
US5010478A (en) 1986-04-11 1991-04-23 Deran Roger L Entity-attribute value database system with inverse attribute for selectively relating two different entities
JPS63285629A (ja) 1987-05-19 1988-11-22 Fujitsu Ltd インデックス構成処理方法
US5121495A (en) 1988-02-02 1992-06-09 Bell Communications Research, Inc. Methods and apparatus for information storage and retrieval utilizing hashing techniques
JPH038083A (ja) 1989-06-06 1991-01-16 Fujitsu Ltd 識別子付情報の木構造管理方式
US5117349A (en) * 1990-03-27 1992-05-26 Sun Microsystems, Inc. User extensible, language sensitive database system
US5230047A (en) * 1990-04-16 1993-07-20 International Business Machines Corporation Method for balancing of distributed tree file structures in parallel computing systems to enable recovery after a failure
WO1992006440A1 (en) * 1990-10-05 1992-04-16 Microsoft Corporation System and method for information retrieval
JPH05120339A (ja) 1991-05-24 1993-05-18 Nec Ic Microcomput Syst Ltd 二分木構造データ登録処理方法
US5355473A (en) * 1991-06-20 1994-10-11 Lawrence Au Indexed record locating and counting mechanism
JPH05334153A (ja) 1992-06-01 1993-12-17 Nippon Telegr & Teleph Corp <Ntt> インデックス管理方式
US5689699A (en) 1992-12-23 1997-11-18 International Business Machines Corporation Dynamic verification of authorization in retention management schemes for data processing systems
JP2583010B2 (ja) * 1993-01-07 1997-02-19 インターナショナル・ビジネス・マシーンズ・コーポレイション 多層インデックス構造におけるローカルインデックステーブル及び大域インデックステーブルの間の一貫性を維持する方法
US5497485A (en) * 1993-05-21 1996-03-05 Amalgamated Software Of North America, Inc. Method and apparatus for implementing Q-trees
US5560007A (en) * 1993-06-30 1996-09-24 Borland International, Inc. B-tree key-range bit map index optimization of database queries
JP2683870B2 (ja) * 1994-05-23 1997-12-03 日本アイ・ビー・エム株式会社 文字列検索システム及び方法
JPH07319924A (ja) * 1994-05-24 1995-12-08 Matsushita Electric Ind Co Ltd 手書き電子文書のインデックス付けおよび探索方法
US5619199A (en) * 1995-05-04 1997-04-08 International Business Machines Corporation Order preserving run length encoding with compression codeword extraction for comparisons
JPH08314957A (ja) * 1995-05-18 1996-11-29 Mitsubishi Electric Corp データベースシステム
JPH08320648A (ja) * 1995-05-24 1996-12-03 Matsushita Electric Ind Co Ltd ナビゲーション装置
US5664179A (en) * 1995-06-27 1997-09-02 Mci Corporation Modified skip list database structure and method for access
JPH0936747A (ja) 1995-07-18 1997-02-07 Toshiba Corp データ圧縮方法及びデータ圧縮装置
US6427147B1 (en) * 1995-12-01 2002-07-30 Sand Technology Systems International Deletion of ordered sets of keys in a compact O-complete tree
US5819286A (en) * 1995-12-11 1998-10-06 Industrial Technology Research Institute Video database indexing and query method and system
US5806065A (en) * 1996-05-06 1998-09-08 Microsoft Corporation Data system with distributed tree indexes and method for maintaining the indexes
US5768581A (en) * 1996-05-07 1998-06-16 Cochran; Nancy Pauline Apparatus and method for selecting records from a computer database by repeatedly displaying search terms from multiple list identifiers before either a list identifier or a search term is selected
US5706495A (en) * 1996-05-07 1998-01-06 International Business Machines Corporation Encoded-vector indices for decision support and warehousing
IL118959A (en) * 1996-07-26 1999-07-14 Ori Software Dev Ltd Database apparatus
JPH1040255A (ja) 1996-07-29 1998-02-13 Nec Software Ltd ハッシュ表管理装置
US5899992A (en) 1997-02-14 1999-05-04 International Business Machines Corporation Scalable set oriented classifier
US5926820A (en) 1997-02-27 1999-07-20 International Business Machines Corporation Method and system for performing range max/min queries on a data cube
US5898760A (en) 1997-03-05 1999-04-27 Bellsouth Corporation Method and apparatus for automating the management of a database
US6115716A (en) * 1997-03-14 2000-09-05 Nokia Telecommunications Oy Method for implementing an associative memory based on a digital trie structure
JP3087694B2 (ja) * 1997-07-15 2000-09-11 日本電気株式会社 情報検索装置及びプログラムを記録した機械読み取り可能な記録媒体
SE510000C2 (sv) * 1997-07-21 1999-03-29 Ericsson Telefon Ab L M Struktur vid databas
US6041053A (en) * 1997-09-18 2000-03-21 Microsfot Corporation Technique for efficiently classifying packets using a trie-indexed hierarchy forest that accommodates wildcards
CA2319177A1 (en) * 1998-01-22 1999-07-29 Ori Software Development Ltd. Database apparatus
JP3849279B2 (ja) 1998-01-23 2006-11-22 富士ゼロックス株式会社 インデクス作成方法および検索方法
US6047283A (en) * 1998-02-26 2000-04-04 Sap Aktiengesellschaft Fast string searching and indexing using a search tree having a plurality of linked nodes
JP2000076106A (ja) 1998-08-31 2000-03-14 Nec Eng Ltd 索引順編成ファイルの管理方法
US6370518B1 (en) * 1998-10-05 2002-04-09 Openwave Systems Inc. Method and apparatus for displaying a record from a structured database with minimum keystrokes
US6345266B1 (en) * 1998-12-23 2002-02-05 Novell, Inc. Predicate indexing for locating objects in a distributed directory
JP2000201080A (ja) * 1999-01-07 2000-07-18 Fujitsu Ltd 付加コ―ドを用いたデ―タ圧縮/復元装置および方法
TW460812B (en) * 1999-03-31 2001-10-21 Ibm Automated file pruning
US6662180B1 (en) * 1999-05-12 2003-12-09 Matsushita Electric Industrial Co., Ltd. Method for searching in large databases of automatically recognized text
US6421664B1 (en) * 1999-06-16 2002-07-16 International Business Machines Corporation Apparatus, program product and method for estimating the number of keys within an index key range
US6356888B1 (en) * 1999-06-18 2002-03-12 International Business Machines Corporation Utilize encoded vector indexes for distinct processing
US6681218B1 (en) * 1999-11-04 2004-01-20 International Business Machines Corporation System for managing RDBM fragmentations
US7043641B1 (en) * 2000-03-08 2006-05-09 Igt Encryption in a secure computerized gaming system
EP1158431A3 (en) * 2000-05-22 2006-05-17 Broadcom Corporation Method and apparatus for performing a binary search on an expanded tree
US6938046B2 (en) * 2001-03-02 2005-08-30 Dow Jones Reuters Business Interactive, Llp Polyarchical data indexing and automatically generated hierarchical data indexing paths

Also Published As

Publication number Publication date
EA006562B1 (ru) 2006-02-24
CA2429990A1 (en) 2002-06-06
GB2407417B (en) 2005-06-29
EA007209B1 (ru) 2006-08-25
AU2008249232B2 (en) 2011-02-03
EA006640B1 (ru) 2006-02-24
WO2002044940A8 (en) 2004-03-11
WO2002044940A2 (en) 2002-06-06
AU2008249232A1 (en) 2008-12-18
KR20040036681A (ko) 2004-04-30
EA200300522A1 (ru) 2004-06-24
GB2406681A (en) 2005-04-06
JP2004527813A (ja) 2004-09-09
ES2329339T3 (es) 2009-11-25
EP2270680A2 (en) 2011-01-05
GB2406678A (en) 2005-04-06
DK1364314T3 (da) 2009-11-09
NZ526102A (en) 2007-01-26
NZ543307A (en) 2007-06-29
DE60139212D1 (de) 2009-08-20
US8224829B2 (en) 2012-07-17
EA200500009A1 (ru) 2005-10-27
ATE436055T1 (de) 2009-07-15
AU2002222096B2 (en) 2008-08-28
WO2002044940A3 (en) 2003-09-12
EG23400A (en) 2005-05-31
CY1109459T1 (el) 2012-05-23
CN1822003A (zh) 2006-08-23
GB0029238D0 (en) 2001-01-17
GB2406679B (en) 2005-05-18
IL156117A0 (en) 2003-12-23
AU2011202009A1 (en) 2011-05-26
CN1552032A (zh) 2004-12-01
NO20032416L (no) 2003-07-23
CN1552032B (zh) 2010-04-28
GB0427859D0 (en) 2005-01-19
GB0427854D0 (en) 2005-01-19
EA200500010A1 (ru) 2005-08-25
GB2406678B (en) 2005-05-18
JP4810785B2 (ja) 2011-11-09
NO20032416D0 (no) 2003-05-27
EP1364314A2 (en) 2003-11-26
GB0427855D0 (en) 2005-01-19
GB2369695B (en) 2005-03-16
NO20051945L (no) 2003-07-23
EP1364314B1 (en) 2009-07-08
GB0427860D0 (en) 2005-01-19
GB2407417A (en) 2005-04-27
NZ554641A (en) 2008-10-31
IL202125A (en) 2011-11-30
JP4267046B2 (ja) 2009-05-27
IL156117A (en) 2010-06-16
EP2009559A1 (en) 2008-12-31
GB0427862D0 (en) 2005-01-19
MY132130A (en) 2007-09-28
GB2406680B (en) 2005-05-18
KR20080024237A (ko) 2008-03-17
GB2406680A (en) 2005-04-06
JP2009080833A (ja) 2009-04-16
MY142616A (en) 2010-12-15
EA200500008A1 (ru) 2005-10-27
US20040015478A1 (en) 2004-01-22
GB2406679A (en) 2005-04-06
EP2270680A3 (en) 2011-01-19
AR035508A1 (es) 2004-06-02
GB2369695A (en) 2002-06-05
AU2209602A (en) 2002-06-11
GB2406681B (en) 2005-05-18
EA005641B1 (ru) 2005-04-28
KR100886189B1 (ko) 2009-02-27
JP2008071362A (ja) 2008-03-27
SG148842A1 (en) 2009-01-29

Similar Documents

Publication Publication Date Title
NO332645B1 (no) Database
AU2002222096A1 (en) Method of organising, interrogating and navigating a database
US20200334294A1 (en) Merge tree modifications for maintenance operations
US20200349139A1 (en) Stream selection for multi-stream storage devices
US20070100873A1 (en) Information retrieving system
US6480950B1 (en) Software paging system
WO2001006413A1 (en) System for accessing database tables mapped into memory for high performance data retrieval
KR102102307B1 (ko) 다수의 스토리지를 갖는 데이터베이스 관리시스템에서 블룸필터를 이용한 벡터화 기반의 스토리지 탐색 방법

Legal Events

Date Code Title Description
MM1K Lapsed by not paying the annual fees