Fillagring och indexering Lena Strömbäck Institutionen för datavetenskap (IDA) Databaser Världen Databas Modell Databas- Hanterings- System (DBMS) Queries Svar Queries Svar Användare Anv Updates Queries Svar Updatera. Frågor Svar Anv 4 Updates Anv Updates Processning av frågor och uppdateringar Tillgång till lagrad data Fysisk databas Sida spår Två sektorer En sektor (del av ett spår) Block Ett block är den enhet data man överför mellan disk och primärminne. arm Läs/skrivhuvud spindel diskrotation Diskaccess är,000 till 00,000 gånger mer tidskrävande än processorinstruktioner. cylinder av spår Processorinstruktion Minnesaccess Diskaccess 0 - s 0 - s 0 - s rörelser Figure., p. 46 Sida Sida 4 Terminologi Filer och block En fil är en sekvens av poster (records). En post består av fält. Varje fält är av en specifik datatyp. En stor fil behöver felra block för lagring. Man vill oftast se till att varje post finns i ett block. Unspanned records Vi kommer att förutsätta att posterna har en fix längd. Sida Sida 6
Fil och postlagring Fil och postsökning Fil med,000,000 poster (r) Poststorleken (R) är 000 bytes (unspanned) Blockstorleken (B) är 4,06 bytes B 406 40 Blockfaktorn (bfr) är = = R 000 Block som behövs (b) är r,000,000 = =,000 4 bfr En sekventiell algoritm måste accessa alla,000 block. (Läsa in allt till primärminnet) En binär sökalgoritm behöver accessa log b = log 0000 = Sida Sida Indexering Primärindex Ett index Är en extra struktur som används för att kunna söka poster snabbare Är baserad på en eller flera indexfiler Lagrar fysiska adresser till poster Ett primärindex används till en fil som är sorterad på de värden man vill söka på. Värdet ska vara unikt. Ett primärindex är en ordnad fil av poster med två fält. Ett indexfält och en blockpekare Indexfältet är en kopia av den ordnade nyckeln i datafilen. Blockpekaren är en pekare till blocket i datafilen Vad är relationen mellan primärnyckel och primärindex? Sida Sida 0 Primärindex Indexfil (Andersson, Anne) (Andersson, Mia) (Davidsson, Lina) (Nilsson, Johan) (Svensson, arl) (Andersson, Anne) (Andersson, Leo) (Andersson, Mia) (Bengtsson, Anders) (Davidsson, Lina) (Larsson, Anders) (Nilsson, Johan) (Petersson, Jörgen) Block Block Block Block 4 Exempel Antag en ordnad datafil med,000,000 poster av storlek 000 byte och blockstorleken 4,06 bytes. Antag en indexpoststorlek av bytes. Hur många block behövs för indexet? I medeltal, hur många blockaccesser behövs för att söka på nyckelfältet: Sida Sida
Dense vs. sparse index lusterindex Dense index: ett indexentry för varje post. Sparse index: endast indexentry för vissa poster. Som primärindex men används om sorteringsfältet ej är unikt. Indexfilen är en ordnad fil med två fält, ett indexfält och en blockpekare. En indexpost för varje värde i ordningsfältet. lusterindex är alltid sparse. Sida Sida 4 lusterindex I Indexfil Dept# Name ID Salary Andersson 000 Svensson 4000 Block lusterindex II Indexfil Dept# Name ID Salary Andersson 000 Svensson 4000 Block 4 4.... Block Block 4 Block Block Sida Sida 6 Exempel Problem med primär och klusterindex Antag en ordnad datafil med,000,000 poster av storlek 000 byte och blockstorleken 4,06 bytes. Antag en indexpoststorlek av bytes, det finns cirka 00 poster med samma indexvärde. Hur många block behövs för att lagra indexet? I medeltal, hur många blockaccesser behövs för att söka på nyckelfältet? Som med varje ordnad fil blir insättningar och borttagning av poster dyra. Vi kan också behöva flytta poster i datafilen. När datafilen ändras byts också ankarposten. Sida Sida
Sekundärindex Ett sekundärindex snabbar upp svarstiderna om det finns frekventa sökningar på ett oordnat fält. Ett sekundärindex snabbar upp sökningen av enstaka poster. Varför? Indexfältet är en ordnad fil med två fält. Ett indexfält och en blockpekare. Det kan finnas många sekundärindex till samma tabell. Sekundärindex på ett unikt attribut Indexfil 466 4464 0 64 000 0 0000 ID# SSN Dept. Salary 4464 000 000 4000 4 6 0 64 0 466 0000 0 Block Block Block Sida Sida 0 Sekundärindex på ett icke unikt attribut Indexfil Andersson Daniels French Hagberg Lancaster Extra nivå med postpekare ID# 4 6 0 Name Daniels Lancaster Andersson Andersson Silver Molin French Daniels Andersson Hagberg Yang Miller Exempel Antag en ordnad datafil med,000,000 poster av storlek 000 byte och blockstorleken 4,06 bytes. Antag en indexpoststorlek av bytes. Hur många block behövs för att lagra indexet? I medeltal, hur många blockaccesser behövs för att söka på nyckelfältet? Två fall:. Om indexvärdet är unikt?. Om det finns cirka 00 poster med samma indexvärde? Sida Sida Summering: Indextyper Flernivåindex Primärindex Sparse index på nyckelfältet, unikt fält en ordnad på nyckelfältet lusterindex Sparse index på icke-nyckelfält Filen ordnad på icke nyckel fält Sekundärindex Index på ett fält som filen ej är sorterad på. Index på index Minska mängden att söka igenom att anpassa indexstorleken till ett block. Minskningen bestäms av blockfaktorn. Blockfaktorn kallas också fan-out. Sida Sida 4 4
Flernivåindex Exempel Andra nivån 4 44 6 0 4 6 4 44 46 Antag en ordnad datafil med,000,000 poster av storlek 000 byte och blockstorleken 4,06 bytes. Antag en indexpoststorlek av bytes. I medeltal, hur många blockaccesser behövs för att söka på nyckelfältet om jag använder ett flernivåindex? Första nivån Sida Sida 6 Problem med flernivåindex Sökträd Problem med insättning och borttagning av data. Alla nivåer baserade på ordnade filer. Använd en overflow fil och ordna om indexen när filerna ordnas om. Använd ett dynamiskt flernivåindex Om man vänder ett flernivåindex 0 kan det ses som en speciell typ av sökträd. Ett sökträd är en struktur som används för att snabb sökning, i detta fall en post. B-tree = balanserade träd. Ett sökträd p består av noder som har högst p- värden och p pekare. <P,, P,,, P q-, q-, P q > där q p och P i is är en pekare till ett barn (eller en null-pekare) Sida Sida Sökträd Exempel, order p= P i P i i q P q X < < X < i i P i P i i q P q P i P i i q P q P i q < X P i i q P q 6. I varje nod, < < < q-i. För alla värden X i subträden: i- < X < i Sida Sida 0
Exempel, order p= B-träd: Ordning 6 Andersson Hagberg French Silver Daniels Young Zhing 6 Baker En nod måste passa i ett block: B+ P p P + ( p ) ( P + ) B p record P + P + record block block record + p P block P record ordning, antal blockpekare storlek på blockpekaren storlek på postpekaren storlek på söknyckeln Sida Sida B+-träd B+-Tree: Example, order p=, p leaf = En variant av B-träd Datapekarna endast sparade i lövnoderna. Vanligaste dynamiska flernivåindexstrukturen Lövnoderna är vanligen länkade för att erbjuda ordnad access. Andersson Hagberg French Silver Daniels Young Zhing 6 Baker 6 Sida Sida 4 B+-träd: interna noder P i Pi i q Pq B+-trees: Interna noder Varje intern nod har högst p nodpekare. Varje intern nod, utom roten har minst ceil(p/) nodpekare. Rotnoden har minst nodpekare om det är en intern nod. En intern nod med q pekare (q p), har q- sökfältsvärden. X < X i i q < X. För varje nod, < < < q-i. För alla värden X i subträdet: i- < X i Sida Sida 6 6
B+-träd: Lövnoder B+-träd ordning Varje lövnod har formatet: <<, P>, <, P>,, <q-, Pq->, Pnext> Inom varje lövnod: < < < q-i Varje entry (Pi) är en pekare till posten med motsvarande värde. Varje lövnod (utom roten) har minst ceil(p/) värden. Alla lövnoder är på samma nivå. En intern nod måste få plats i ett block: p P + ( p ) B block En lövnod måste få plats I ett block: p B+ P block + p B P P block ( P + ) + P B p leaf record block leaf record + B p p leaf P block P record blockstorlek ordning, antal pekare I en intern nod antal pekare I en lövnod storlek på blockpekaren storlek på söknyckeln storlek på postpekaren Sida Sida B+-träd B+-träd: Insättning Mycket snabb sökning: log p N f Insättning och borttagning kan vara dyrt. N number of search values p order, number of block pointers per node f fill factor, 0 f När en lövnod är full genereras ett overflow De första p behålls resten flyttas till ett nytt löv. Den nya noden måste sättas in i föräldern. Om föräldern blir fylld genereras ett overflow. Den resulterande splitten kan propagera ända upp till roten. Sida Sida 40 Exempel: Insättning Värde Datapekare Lövnod Lövnodspekare Nodpekare Internnod P i- i q- P i P q Lägg till: Sida 4 Sida 4
Overflow skapa en ny nivå Lägg till: Lägg till: Sida 4 Sida 44 Overflow - Splitta Lägg till: Lägg till: Sida 4 Sida 46 Overflow - Splitta Propagerar till nästa nivå Lägg till: Lägg till: Sida 4 Sida 4
6 Overflow Splitta Lägg till: 6 Resulterande B+-träd Sida 4 Sida 0 6 6 6 6 Underflow ordna om Ta bort: Ta bort: Sida Sida 6 6 6 6 Underflow slå ihop Ta bort: Forfarande underflow Ta bort en nivå Sida Sida 4
B+-träd 6 6 Många varianter B-trees B+-trees B*-trees Vanliga modifieringar Ändra fyllningsfaktorn 0. till.0 Tillåt en nod att bli tom innan sammanslagning Sida Sida 6 Summering Indexfiler (primär, kluster, sekundär) Sökträd, B+-träd Sida 0