990 likes | 1.16k Vues
DAT 2800 Databaser I. Flerbrukerproblematikk. Flerbrukersystem Client / Server. Client. Server. Database. DBMS. Application_1. SQL-Request. Data. Application_2. Application_3. Database-sider (Pages). c:centura<DatabaseName>.dbs. Physical Page No 1 1024 bytes total.
E N D
DAT 2800 Databaser I Flerbrukerproblematikk
Flerbrukersystem Client / Server Client Server Database DBMS Application_1 SQL-Request Data Application_2 Application_3
Database-sider (Pages) c:\centura\<DatabaseName>.dbs Physical Page No 1 1024 bytes total Physical Page No 2 1024 bytes total Physical Page No 3 1024 bytes total ….. Logical File Offset 0 1023 1024 2047 2048 3071
Lister av ulike typer database-sider Database-sider deles inn i grupper. Sider innen samme gruppe lenkes sammen i dobbelt-lenkede lister. Hoved-grupper av database-sider: Data Index Control Logisk nummerering (1, 2, …) av sider innen samme gruppe 1 Page Group Log Prior Next Type No Ptr Page Page Data 3 1 0 7 7 Page Group Log Prior Next Type No Ptr Page Page Data 3 2 1 19 1st page in product table 2nd page in product table
Grupper av database-sider Data pages Selve dataene i databasen Row pages Tabell-rader Extent Pages Kolonner som ikke får plass i Row pages Long VarChar pages Long VarChar kolonner Overflow pages Plassmangel ved clustered hashing Designed overflow pages Preallokering ved clustered hashing Dynamically created overflow pages Designed overflow page full Index pages Inneholder B+-tre indekser Control pages Generelle kontroll-opplysninger Database control block Versjonsnr, log-info, ... Free extent list Liste av ikke-allokerte pages Group free page list Gruppe-allokerings info (B+-tre) Group extent map Log pages --> Physical pages info Bitmap pages Freespace info for hver tabell Row count page Antall rader pr tabell Table data page Siste rad serial nr, page nr for siste rad, tabell størrelse, antall overflow pages.
Row Pages Tabell-rad 8 Skrivebord 2.700 Plasseres i en såkalt Slot i en database-side av type Data Row Page 1 Page Group Log Prior Next Type No Ptr Page Page Data 3 1 0 7 Row Page 7 Page Group Log Prior Next Type No Ptr Page Page Data 3 2 1 19 Row Page 1st page in product table 2nd page in product table
Row Pages Page Header Row Page Header Freespace Slot Table Slot 5 Slot 4 Slot 3 Slot 2 Slot 1 Page Footer
Row Pages Page Header Row Page Header Physical Page No. Page Type Group No. Logical Page No. Previous Page No. Next Page No. Log Pointer Slot Size Free Space Extent Page No. Freespace Slot Table Entry 1 Entry 2 Entry 3 Entry 4 Entry 5 Peker til log-fil som inneholder info om før/etter-situasjon ved evnt endringer. Sikkerhet ved 512 byte lagring First Bit: Empty/Full Slot 5 Slot 4 Slot 3 Slot 2 Slot 1 Page Footer Log Pointer Slot 3 Row Header Row Serial No. Update Serial No. Nbr Columns 1 4 Berg 2 8 Grimstad 3 7 Snekker Col ID Lengde Data
Row Header Row Serial No. Update Serial No. Entydig identifikator til en rad i en tabell. Tilordnes sekvensielt ved innsetting (1,2,…). Entydig identifikator til en rad i en tabell i en felles UPDATE / INSERT. Tilordnes sekvensielt (1,2,…). Benyttes til UPDATE-tap ved Cursor Stabilitet (CS) og Release Lock (RL) isolasjonsnivå, samt uendelig UPDATE / INSERT loop. Eks: UPDATE TABLE Y Set x = x + 1 WHERE x > 10
RowID - Entydig rad-identifikator RowID Page No. Fysisk sidenummer hvor raden befinner seg. Slot No. Slot nummer innen siden hvor raden befinner seg. Row Serial No. Insert row serie nummer. Entydig. Tilordnes ved innsetting. Endres aldri. Benyttes aldri pånytt. Update Serial No. Update row serie nummer. Endres ved Update. Benyttes for å gjenfinne en tabell-rad fra databasen Verifiserer hvorvidt raden fortsatt okkuperer denne lokasjonen eller er slettet og eventuelt erstattet av en annen rad Verifiserer eventuell oppdatering av raden
RowID Selger (ID = SNr) Selger (ID = SNr) SNr Navn PNr 5 Nilsen 5002 2 Olsen 6400 1 Hansen 9000 4 Berg 6400 RowID SNr Navn PNr CAAD 5 Nilsen 5002 BACV 2 Olsen 6400 ERCB 1 Hansen 9000 EADD 4 Berg 6400 Et eksempel på en 3NF-tabell Selger med tre kolonner SNr, Navn og PNr RowID er en ekstra kolonne i hver tabell som alltid kommer i tillegg til de kolonnene vi eksplisitt definerer. RowID er entydig for hver rad og fungerer som en slags identifikator.
Extent Pages Page Header Row Page Header Physical Page No. 3 Page Type ROW Group No. 20 Logical Page No. Previous Page No. Next Page No. Log Pointer Slot Size Free Space Extent Page No. 7 Slot Table Slot 2 Page Header Row Page Header Physical Page No. 7 Page Type EXTENT Group No. 20 Logical Page No. Previous Page No. Next Page No. Log Pointer Slot Size Free Space Extent Page No. 15 Slot Table Slot 2 Inneholder kolonner som ikke får plass i opprinnelig Row Page
Long VarChar Pages Page Header Row Page Header Physical Page No. 3 Page Type ROW Group No. 20 Logical Page No. Previous Page No. Next Page No. Log Pointer Slot Size Free Space Extent Page No. 1014 Slot Table Slot 2 Page Header Row Page Header Physical Page No. 7 Page Type LONG Group No. 20 Logical Page No. Previous Page No. Next Page No. Log Pointer Slot Size Free Space Extent Page No. 1015 Slot Table Slot 2 Long VarChar kolonner plasseres i egne Long Pages
Overflow Pages - Designed Overflow Pages ... ... Page 1 Page 2 Page 3 Page N Page 1 Page 2 Page 3 Page N Avsettes plass til eventuelle overløps-rader for hver N page
Overflow Pages - Dynamically Created Overflow Pages ... ... Page 1 Page 2 Page 3 Page N Page 1 Page 2 Page 3 Page N Hvis et ikke er plass til overløps-poster i Designed Overflow Pages, opprettes dynamiske overløps-sider.
Indekser • B-Trær Indeks bygget opp som tre-struktur. Benyttes både på primary keys og foreign keys. • Hash-tabeller Nøkkel-tranformering. Benyttes typisk på primary key (ID). Clustered Index: Bestemmer fysisk rekkefølge på data i database-tabeller. Kun en clustered index pr tabell. Må alltid lages før non-clustered index. Må alltid lages før data plasseres i tabellen.
CREATE INDEX Oppretter en indeks CREATE INDEX index name UNIQUE CLUSTERED HASHED , ON table name ( column name ) ASC DESC PCTFREE integer constant SIZE integer value ROWS BUCKETS Max size = 6 + number of + sum of <= 255 columns in length of all index columns in index
CREATE INDEX - Eksempel CREATE UNIQUE CLUSTERED HASHED INDEX hSNdx ON Selger (SNrID) SIZE 100 ROWS CREATE UNIQUE INDEX Bidndx ON Bedrift (BedriftsID) CREATE INDEX BnNdx ON Bedrift (BedriftsNavn) CREATE INDEX SNavnNdx ON BEDRIFT (@UPPER(Navn))
Clustered Index / Non-Clustered Index Clustered Non-Clustered Index Data
Binært tre Søk etter tallet 15 42 7 81 Hver node inneholder maksimum 2 barn. Minimum-høyden av et binært tre som inneholder N noder er [log2N] + 1. Eks: Et tre med 100 noder vil ha minst 7 nivåer.
Multiway tre Søk etter tallet 15 42 81 7 24 50 61 95 107 Hver node inneholder N antall nøkler (keys) (her 2). Færre nivåer enn binære trær og lavere gjenfinningstid. Balanserings-algoritmene er komplekse.
B-tre Et B-tre er et balansert multiway tre med følgende endring: Hver node trenger ikke nødvendigvis inneholde nøyaktig N keys. Noder kan vokse fra halv-full til full. Dette reduserer balanserings-algoritmene og er derfor ressurssparende.
B-Trær Et B-Tre av orden m er definert ved følgende: - Roten er enten et løv eller har minst to barn - Alle intermediære noder har: Antall key i intervallet [m, 2m] Antall barn i intervallet [m+1, 2m+1] - Alle løv befinner seg på samme nivå Eks: B-tre av orden 3 21 48 72 Løv 12 15 25 31 41 59 84 91 Database 1-4-8-11 12-13 15-18-19 21-24 25-26 31-38 41-43-46 48-49-50 59-68 72-78 84-88 91-92-99
B-trær Eks: Innsetting i et B-tre (1) 22:- 16:- 41:58 8,11,12 16,17 22,23,31 41,52 58,59,61 Løv Forenkling: Tenker oss at hver node kan inneholde max tre nøkler og tre barn
B-trær Eks: Innsetting i et B-tre (2) 22:- 16:- 41:58 8,11,12 16,17,18 22,23,31 41,52 58,59,61
B-trær Eks: Innsetting i et B-tre (3) 22:- 11:16 41:58 1,8 11,12 16,17,18 22,23,31 41,52 58,59,61
B-trær Eks: Innsetting i et B-tre (4) 22:- 11:16 41:58 1,8 11,12 16,17 18,19 22,23,31 41,52 58,59,61
B-trær Eks: Innsetting i et B-tre (5) 16:22 11:- 18:- 41:58 1,8 11,12 16,17 18,19 22,23,31 41,52 58,59,61
B-trær Eks: Innsetting i et B-tre (6) 16:22 11:- 18:- 41:58 1,8 11,12 16,17 18,19 22,23 28,31 41,52 58,59,61
B-trær Eks: Innsetting i et B-tre (7) 16:22 11:- 18:- 28:- 58:- 1,8 11,12 16,17 18,19 22,23 28,31 41,52 58,59,61
B-trær Eks: Innsetting i et B-tre (8) 22:- 16:- 41:- 11:- 18:- 28:- 58:- 1,8 11,12 16,17 18,19 22,23 28,31 41,52 58,59,61
B+ -tre B-tre er optimalt mht aksess til single-record, men ineffektivt mht sekvensiell prosessering. B+-tre skiller seg fra B-tre ved: • Alle pekere til databasefil fjernes fra index-nodene • Alle key-verdier lagres i løvene uavhengig av hvorvidt de eksisterer i index-nodene. • Løv noder er lenket sammen i en liste kalt sekvens-settet.
Prefix B+-tre Prefix B+-tre er et B+-tre hvor kun den delen av Key som er nødvendig mht entydighet lages i index-nodene. Avkortede Key-verdier SQLBase benytter Prefix B+-tre
Hashing / Nøkkel-transformering / Randomisering Key Transformed Key Hashing
Nøkkel-transformering PNr = ID En-entydig sammenheng mellom PNr (Postnummer) og ID PNr ID 1 2 3 4 5 6 7 8 9 . . . 1 2 3 4 5 6 7 8 9 . . .
Nøkkel-transformering Distrikt 6 4 7 2 1 KundeNr TverrSum
Nøkkel-transformering 6 4 7 2 KundeNr 1 2 3 4 Vekttall 6 8 21 8 Produkt 6 4 7 2 3 KundeNr Siste siffer i tverrsummen av siste siffer i produktene
Nøkkel-transformering PNr = ID En-entydig sammenheng mellom PNr (Postnummer) og ID PNr ID Ubenyttet 1 … 10000 32191 51877 77638 32191 51877 77638
Hash-tabeller 34 4 67 7 8 1 21 3 73 8 62 7 68 7 86 9 3 34 1 1 67 6 2 2 4 8 3 3 1 21 4 4 Trans 34 ID 73 5 5 62 7 6 6 2 68 67 7 7 5 86 8 8 8 9 9 10 10
Nøkkel-tranformering - Folding ID = 29384756 PostNr [ 1 - 1000 ] Nøkkel- transformering 2 9 3 8 4 7 5 6 + 7 6 9 4 + 1 7 7 0
Nøkkel-transformering - Divisjon-rest-metoden ID = 29384756 PostNr [ 1 - 1000 ] Nøkkel- transformering 2 9 3 8 4 7 5 6 : 9 9 7 1 7 5
Nøkkel-tranformering - Uheldig tranformering Tranformering av hvert tegn i Key til tilhørende ordinal-verdi: 1016 HSize = 10000 KeySize = 8 HValueMax = 8 * 127 = 1016 10000
Ulike nøkkel-transformeringer Data Transformed Key Key int Hash1(char* Key, int HSize) { return ((int)Key[0] + (int)Key[1] + (int)Key[2]) % HSize; } int Hash2(char* Key, int HSize) { return ((int)Key[0] + 27 * (int)Key[1] + 729 * (int)Key[2]) % HSize; }
Ulike nøkkel-transformeringer Data Transformed Key Key int Hash3(char* Key, int KeySize, int HSize) { int HashVal; HashVal = (int)Key[0]; for(int i = 1; i < KeySize; i++) HashVal = HashVal*32 + (int)Key[i]; HashVal = HashVal % Hsize; return HashVal; }
Hashing a key to a database page - SQLBase 1. Transformer symbolsk key ved å la hvert tegn bli representert ved tilhørende ASCII-verdi. Deretter transformeres denne ASCII-verdien som vist nedenfor til et såkalt binært fullword (4 bytes). 1A. Del ASCII-key inn i 4-byte enheter. 1B. XOR alle 4-byte enhetene sammen til et 4-byte resultat (ingen key-del blir borte). 1C. Utfør bitwise complement (fjerner event. bias) 2. Transformer resultatet fra 1 (binary fullword) til et heltall i side-intervallet ved å ta divisjonsresten med minste primtall som er større enn eller lik antall sider. 3. Transformer output fra 2 til en fysisk side adresse ved å legge til start side-nummer for for første rad i tabellen.
Hashing a key to a database page - SQLBase - Eks 1. 9 3 0 5 E J S M --> 57 51 48 53 69 74 83 77 ASCII 1A. Key1 = 57 51 48 53 Key2 = 69 74 83 77 1B. Key1 = 0011 1001 0011 0011 0011 0000 0011 0101 XOR Key2 = 0100 0101 0100 1010 0101 0011 0100 1101 ------------------------------------------------------------------------- = xKey = 0111 1100 0111 1001 0110 0011 0111 1000 = 124 121 99 120 ASCII 1C. ~xKey = 1000 0011 1000 0110 1001 1100 1000 0111 = 131 134 156 135 ASCII bfKey = 2206637191 (fullword key) 2. Page Adresses 0 - 1752 (1753 hash buckets) 2206637191 MOD 1753 = 1110 3. Første side-adresse for tabellen er 60 => Side-adresse = 1110 + 60 = 1170
Flerbrukersystem Client / Server Client Server Database DBMS Application_1 SQL-Request Data Application_2 Application_3
Update tap i flerbrukersystem uten lås Joe’s Program Products Table Mary’s Program MID PID Count ... ACI 41 139 ... SELECT Count FROM Products ... Answer: 139 SELECT Count FROM Products ... Answer: 139 Accept Order for 100 MID PID Count ... ACI 41 39 ... Accept Order for 125 UPDATE Products SET Count = 39 MID PID Count ... ACI 41 14 ... UPDATE Products SET Count = 14
Commit / Rollback problem i flerbrukersystem uten lås Joe’s Program Products Table Mary’s Program MID PID Count ... ACI 41 139 ... SELECT Count FROM Products ... Answer: 139 Accept Order for 100 MID PID Count ... ACI 41 39 ... UPDATE Products SET Count = 39 SELECT Count FROM Products ... Answer: 39 MID PID Count ... ACI 41 139 ... ROLLBACK Refuse Order for 125