Lagring
Databasearkitektur
LÄsemodul (Locks)
- GjĂžre transaksjoner.
Log
- Huske alt som foregÄr
- Rulle transaksjoner fram eller tilbake
Databaselagring
- Databaser lagres i filer eller pÄ «raw devices»
- Mest vanlig med filer, Direkte I/O pÄ filer
- «raw devices» unngÄr operativsystemets buffer
- Noen bruker MMAP-segmenter
- Lagring av tabeller
- Heapfil
- B+-trĂŠr
- Hashfil
- Raskt finne tilbake data
- LSM-trĂŠr
- Effektive nÄr du hele tiden fÄr nye data
- Lagring av indeksfiler (pÄ attributter)
- For Ä fÄ rask tilgang til data i tabellene
- Eller tvinge gjennom PRIMARY KEY / UNIQUE-restriksjoner
- Hashing
- B+-trĂŠr
- R-trĂŠr (flere dimensjoner)
- For sortering av nĂžkler
- Kan kombinere lagring og indekser: Clustered index.
Lagring av poster
- En rad i en tabell er vanligvis lagret som en post (record) i en fil: tuppel vs. rad vs. post.
- En post har felter med navn og datatype
- Integer, long integer, floating point (4 og 8 byte)
- String (fastlengde og variable lengde) (1 eller 2 byte per tegn)
- Date/time
- Blobs - lange felter
- JSON (tekst)
- SQL-dictionary (Catalog) beskriver hvordan en tabell/post er lagret.
- Lengde og datatyper
-
- mye annet
Postlayout
Alt 1: Krever sjekk i katalog. Alt 2: Feltvektor, vektor som peker pÄ hvert attributt. Selvbeskrivende post.
Blocklayout
Tuppel i figuren er post. Struktur som vokser i to retninger. PÄ slutten: vektor som peker pÄ postene i sortert rekkefÞlge.
Buffer
- Kopi i RAM av ofte brukte blokker fra databasen
- Databaser vil gjerne ha kontroll pÄ dataene i RAM, sÄ de «pinnes» slik at «virtual memory» ikke kaster de ut.
- Adaptive cache-algoritmer, med flere klasser av aksessmĂžnstre
- Kan ogsÄ stÞtte «pre-fetching» av blokker.
- Det brukes som regel en hashbasert inngang til buffer basert pÄ BlockId.
- Blokker som tilhĂžrer samme hashinngang lenkes sammen i RAM.
- Blokker skrives til disk som en del av sjekkpunkting i forbindelse med logging og recovery
Heapfiler
- «RÄtt» og usortert lager av poster
- Poster settes inn pÄ slutten av filen. Kan vÊre to lister.
- Aksesseres med en RecordId (BlockId, nr. innen blokk)
- Vanligvis har man indekser i tillegg til heapfiler
-
- lett Ă„ sette inn posten
-
- god til tabellscan
-
- bra skriveytelse
-
- dÄrlig til sÞk pÄ attributter og rangesÞk (verdiomrÄdesÞk)
Quiz 1 A
- Hva er en komponent i et databasesystem?
- Optimalisator â
- Filsystem â
- L3 Cache â
- Logg â
- Hvorfor har vi indekser?
- For Ă„ fĂ„ oversikt â
- For Ă„ tvinge gjennom UNIQUE â
- Holde orden pĂ„ databasen â
- For Ă„ fĂ„ queries til Ă„ gĂ„ raskere â
Quiz 1 B
- Hva er en SQL Dictionary?
- Forklaring pĂ„ Keywords i SQL â
- Oversetter SQL til algebra â
- Oversikt over tabeller og attributter â
- Cacher queryresultater â
- Hvorfor bruker man Heapfiler?
- Raske Ă„ sette inn poster â
- Gode til tabellscan â
- Raskt Ă„ finne igjen en post â
- Gode til Ă„ randomisere poster â
Hashbaserte indekser
- Bra for direkte aksess pÄ sÞkenÞkkel
- h(K) - hashfunksjon av sĂžkenĂžkkel
- Sprer postene bra utover slik at de lett kan gjenfinnes
- F.eks. h(K) = K MOD M (restfunksjon)
- Mange mulige hashfunksjoner
- En god hashfunksjon har god spredning, men er avhengig av hva som skal spres
- Hvordan hÄndtere overflyt
- Ă pen adressering: lagre posten i fĂžrste ledige etterfĂžlgende blokk i fila
- Separat overlĂžp: lenk sammen overlĂžpsblokker
- Multippel hashing: bruk en ny hashfunksjon nÄr det blir kollisjoner
Statisk hashing (1)
Statisk hashing (2)
- Partition by key i MySQL
CREATE TABLE tm1 (
s1 CHAR(32) PRIMARY KEY
)
PARTITION BY KEY(s1)
PARTITIONS 10;
- Fast antall blokker/partisjoner i samme fil
- MĂ„ bruke overlĂžp for dynamiske datamengder (ukjent antall poster)
- Lange overlĂžp kan Ăždelegge ytelsen
Extendible hashing
- Problem ved statisk hashing.
- Utvidelse av filen, dvs. dobling av antall blokker
- Les alle blokker og skriv alle blokker pÄ nytt.
- Extendible hashing
- Bruk katalog med pekere til blokker og doble katalogen ved behov
- Splitt (les og skriv) kun den blokken som ble full
- Lokal og global dybde
- Hvis en blokk er full og lokal dybde == global dybde: Directory doubling