Databaser design och programmering n Fysisk design av databasen Minnesteknik n Primärminne (kretsteknik) n att ta hänsyn till implementationsaspekter minnesteknik filstrukturer indexering 1 temporärt/flyktig Snabbt Dyrt n Sekundärminne (Olika tekniker: hårddisk, CD, DVD, diskett, magnetband) Permanent Långsamt 2 Minnesteknik, forts Minnen lämpliga för databaser n Hybrider, sk solid state (usb-minne, SD-minnen) Permanent Snabbt Dyrt n databaser är stora n databaser är persistenta n därför sparas databaser på pålitligare senkundärminnen 3 4
Hårddisk Hårddisken i detalj n magnetiserbar beläggning n Läs/skrivhuvud n Spår n Cylinder n Sektor 5 6 Hårddisk - block n Block en logiskt enhet Minsta överföringsmängd till primärminnet Vanligtvis 512-4048 Bytes n Fil lagras i ett antal block n Accesstid = sök+rotation n Överföringstid = sök+rotation+läs = 5-10ms n Blocköverföring tar alltså tid 7 Databasens lagring n Tabeller lagras i filer n Fil lagras som en sekvens poster n Post med fält = tupel med attribut n Fil med poster = relation med tupler 8
Filer Filer och block n Olika lösningar: databashanteraren har helt egna filer databashanteraren använder OS' filer n Viktiga operationer på poster: hitta, lägg till, ta bort, ändra, gå igenom ett antal 9 n Filer lagras som en sekvens av poster som organiseras i en sekvens av diskblock (block) n Block i samma fil ligger efter varandra i samma spår så långt det går n Efterraderingar och insättningar skapar lösa utrymmen (fragmentering) 10 Blockningsfaktor, bfr n Om R är poststorlek och B är blockstorleken är bfr = B/R n en fil med r stycken poster kräver n = r/bfr stycken block n Vilka block som ingår lagras i filhuvudet 11 ISBN Title Author Pages 91-44- 04449-6Book Databasteknik Thomas Padron- McCarthy 646 978-01360862 Fundamentals of database systems Ramez Elmasri 1200 08 0-07- 352332-1 978-18485479 02 Database system concepts Avi Silberschatz 1315 Big Data: A revolution that will transform how we live, work and think 91-44 978-0 0-07- 978-1 Datab Thom 646 Funda Rame 1200 Datab AviSi 1315 BigDa Vikto 256 Post Viktor Mayer- Schonberger Fält 256 732G16 - Erik Prytz 12
Filer n Består av filhuvud och en samling poster ordnade på något sätt i en sekvens av block. n Filhuvud - information om poststorlek, ingående block, sista block n Hur är posterna ordnade inom filen? 1. Hög (heap) (osorterat) 2. Ordnad sekvens (sorterat) 3. Hashstruktur 13 4. Indexstruktur Hög (heap) n Oordnad sekvens av poster Ny post: läggs sist. Adressen till sista blocket sparas i filhuvudet. Sökning: sekvensiell genomgång av filen tills man hittar den sökta posten. Medel=b/2, Max=b. Borttagning - sök rätt block, som läses in. Ta bort posten. Skriv tillbaks det reviderade blocket, som nu är delvis 14 tomt. Sökning i hög, exempel Poststorlek, R = 100 byte blockstorlek, B = 1024 byte filstorlek, r = 30 000 st poster tid för blocköverföring: 10 ms Blockningsfaktorn blir: bfr= B/R = = 1024/100 = 10 poster per block Filen tar upp b= rbfr = 30000/10 st block För att hitta en viss post krävs i genomsnitt b/2= 1500 blocköverföringar = 15 sekunder 15 Hög: fördelar och nackdelar + Insättning går mycket fort - varför? - Många borttagningar leder till tomrum på skivan. (Kräver periodisk omorganisering av filen.) - Sökning långsam - Om posterna har variabel längd kan ändring i en sådan post få blocket att svämma över - posten måste då tas 16 bort och sättas in på nytt.
Filen som en ordnad sekvens (sorterat) n Posterna i filen sorteras enligt värdet på något fält i posterna. Ny post: hitta rätt ställe (rätt block), skapa plats åt den nya posten, sätt in den. Skapa plats => flytta resten av posterna ett steg framåt. Sökning: binärsökning Borttagning - som ny post om posten fysiskt ska tas bort. Man kan också markera posten som borttagen och organisera om 17 då och då. Sökning i ordnad sekvens, exempel Samma exempelfil som tidigare: Blockfaktor, bfr = 10 poster per block Antal block, b = 3000 block. Tid för blocköverföring = 10 ms Binärsökning, antal blocköverföringar: n= log2(b) = log2(3000) =12 För att hitta en viss post krävs maximalt 12 blocköverföringar = 0.12 sekunder. 18 Ordnad sekvens, fördelar och nackdelar - Insättning av ny post tar tid om plats skapas genom att förskjuta övriga poster i filen - Borttagning eventuellt likaså + snabbare sökning än hög (heap) 19 Hashstruktur n För filer med nyckel. n Posterna sprids över en hylla med fack med hjälp av en hashfunktion n Varje hylla=ett block n Kollisionshantering vid fullt block: spillblock n Hashning som används i samband med externminne kallas för externhashning 20
Hashstruktur, forts n Ny post: beräkna hashvärde, om plats finns i blocket, sätt in. Om inte länka in nytt block. n Sökning: beräkna hashvärde, läs. Om inte rätt block följ länken till nästa tills funnen. Tid för sökning: beror av hur många länkar man måste följa. n Borttagning: hitta som ovan, ta bort posten ur blocket och skriv tillbaks det 21 ändrade blocket. Hashstruktur, fördelar och nackdelar + snabb sökning (fåtal blockaccesser) - avancerad algoritm för insättning och borttagning - tar viss extra plats (länkfältet samt luft ) - kräver hela nyckeln (delar av en sammansatt nyckel räcker inte för att beräkna korrekt hashvärde) 22 Indexstruktur n För sökning på något speciellt fält (indexeringsfält). n Jämför index till en bok n Huvudfilen är ordnad efter något fält, t.ex. nyckeln. Kallas då primärindex. n För varje block i huvudfilen skapas en post i indexfilen, som innehåller nyckeln från den första posten i 23 blocket samt blockets adress. Indexstruktur, forts n Ny post: rätt block söks fram, läses in, ändras och skrivs tillbaks. Vid översvämning skapas ett nytt block och en ny indexpost läggs in i indexfilen n Sökning: sök nyckeln i indexfilen (som vid sökning i sorterad fil). Hämta aktuellt block. n Borttagning: som ny post. Oftast lämnas tomrum i block istället för att 24 organisera om varje gång.
Sökning i indexerad fil, exempel Samma huvudfil som tidigare n Antal block, b = 3000 block Tid för blocköverföring = 10 ms n Antag att nyckelfältet är 9 bytes långt och adressen till block tar 6 bytes n Indexfilen är en sorterad fil som söks som sådan 25 Sökning i indexfilen n Indexfilens poststorlek ir=15 bytes Indexfilens blockfaktor ibfr = 1024/15 = 68 Indexfilen tar alltså upp ib = 3000/68 = 45 block n Hitta en viss indexpost (binärsökning i indexfilen): log2(45) blocköverföringar = 6 st. Sedan ytterligare en för att läsa ur huvudfilen. 26 Totalt 7 blockaccesser, 0.07 sekunder. Indexstruktur, fördelar och nackdelar - indexfilen tar extra plats i databasen. - insättning och borttagning kräver även uppdatering av indexfilen. + snabb sökning + relativt enkla algoritmer för insättning och borttagning Multipla index (indexnivåer) n Index till indexfilen. n För varje block i indexfilen en post i index-indexfilen... n Kan ha godtyckligt många nivåer... 27 28
Sökning med multipelt index Samma huvudfil och samma indexfil som tidigare n Indexfilens blockfaktor ibfr = 68 Indexfilen tar upp ib = 45 block Index på indexfilen behöver i 2 r= 45 poster. Den får plats i ett block: n Hitta index till indexfilen (1 överföring). Hitta index till huvudfilen (1 överföring). Läsa in det eftersökta blocket ur huvudfilen (1 överföring). 29 n Totalt 3 blockaccesser, 0.03 sekunder. Klusterindex n Indexering på icke-unikt fält n Sortera filen på indexfältet (klusterfältet) och skapa indexpost för första posten av varje indexvärde. n Ny post sortera in efter nyckeln n Sökning sök rätt index som tidigare, sök sedan rätt post i blocket, eller nästa block 30 n Borttagning som för vanligt index. Sekundärindex n index på unikt fält som filen inte är sorterad efter? n Detta index är tätt (en indexpost per post i huvudfilen, jfr primärindex, glest). n Sekundärindexet får lika många poster som datafilen har poster. 31 Sökning med sekundärindex, exempel Samma fil som tidigare och indexposter som tidigare, men med tätt index (en indexpost per datapost) n Indexfilens poststorlek ir = 15 bytes Indexfilens blockfaktor ibfr = 1024/15 = 68 n Indexfilen tar ib = 30000/68 = 442 block n Hitta en indexpost, binärsökning i indexfilen: log2(442) blocköverföringar = 9 st sedan en blocköverföring ur huvudfilen. n Totalt 10 blockaccesser, 0.1 sekunder. 32
Sammanfattning Filorganisationer Typ Ny post Sökning Borttagning Extra plats Hög snabb (2) långsam Ordnad långsam (log2(b)+1) (b/2) snabb (log2(b)) Hashstrukt snabb (2-3) snabb Indexerad snabb (log2(ib)+2) (1-2)** snabb (log2(ib)+1) långsam (b/2 +1) långsam (log2(b)+1) snabb (2-3) snabb (log2(ib)+2) övergivna poster* tomma poster* länkvärde + reserv indexfilen Värdet anger antal accesser, b=antal block i filen, ib=antal block i indexfilen. *=Om ingen omorganisation sker. **= sökning på nyckelvärde, annan sökning som för Hög. 33 n Hög n Ordnad sekvens n Hashstruktur n Indexstruktur primärindex (multipla nivåer) klusterindex sekundärindex 34 Fysisk design Designa databasen på fysisk nivå: n avvägning mellan utrymme och snabbhet. n Ta med i beräkningen hur ofta tabellen används och hur (sökning/matchning mot vilket fält). n Åtgärder: Ordna datafilen - osorterad hög eller sorterad? På vad? Används alltid nyckel? Hashtabell! Skapa index vilka behövs? 35