Lagringsstrukturer och åtkomstmetoder
 Hur innehållet i databasen lagras på disk och vilka åtkomstmetoder
som används är väldigt viktigt för systemets prestanda.
 Det viktigaste skälet är att det går mycket långsamt att överföra data
från sekundärminne till primärminne.
 Målet är därför att försöka minimera antalet diskaccesser ( I/Ooperatione)
Exempel på lagringsstrukturer





Sekventiell lagring
Indexering
Hashing
B-träd
Pekarkedjor
Ingen enskild lagringsstruktur är optimal för alla applikationer, utan de
är alla bra för vissa och dåliga för andra applikationer.
1
Lagrad post
Returneras
lagrad sida
returneras
Filhanterare
DBHS
Ber om en
Lagrad post
Data läses
från disken
Diskhanterare
ber om en
lagrad sida
Databas
ber om data från
en fysisk diskadress
1. DBHS bestämmer vilken lagrad post som behöver hämtas och ber
filhanteraren att hämta den posten.
2. Filhanteraren i sin tur bestämmer vilken sida som den önskade posten
finns på och ber diskhanteraren att hämta den sidan
3. Diskhanteraren bestämmer sidans fysiska adress och ber om data från
den adressen.
4. Diskhanteraren läser data från disken.
5. Den lagrade sidan returneras till filhanteraren.
6. Den lagrade posten returneras till DBHS.
2
Clustering
Tekniken att försöka lagra poster som är logiskt relaterade (och därför
ofta används tillsammans ) fysiskt nära varandra på disken kallas
clustering
Clustering är extremt viktigt för att få en bra prestanda i systemet.
Clustering kan tillämpas intra-file, d v s på poster i samma fil, eller interfile, d v s på poster från olika filer.
Ett bra DBHS skall tillåta DBA att specificera olika typer av clustering
för olika filer.
Denna specifikation skall också kunna ändras om systemet får andra
prestandakrav, utan att några applikationer påverkas
( dataoberoende ! )
3
Indexering
Filen City (index)
Filen Suppliers (data)
Athens
S1
Smith
20
London
London
S2
Jones
10
Paris
London
S3
Blake
30
Paris
Paris
S4
Clark
20
London
Paris
S5
Adams
30
Athens
Filen City kallas för ett index till filen Suppliers, och filen Supplier sägs
vara indexerad av filen City.
Fältet City i filen Suppliers kallas det indexerade fältet.
Om det indexerade fältet är en primärnyckel, kallas indexet ibland för ett
primärindex eller ett unikt index.
Fördelar
- Index gör att det går snabbare att hämta data från disk
( speciellt
om det kan ligga i primärminnet ).
- Vissa frågor kan besvaras utan att den indexerade filen behöver
accessas.
Nackdelar
- Mer diskutrymme krävs.
- Uppdateringar blir långsammare.
En given fil kan ha ett eller flera index. En fil med ett index för varje fält
kallas ibland för fullt inverterad.
Indexering (forts)
4
Det är också möjligt att konstruera ett index på kombinationer av fält:
Ex.
Athens/30
S1
Smith
20
London
London/20
S2
Jones
10
Paris
London/20
S3
Blake
30
Paris
Paris/10
S4
Clark
20
London
Paris/30
S5
Adams
30
Athens
5
Dense och Nondense indexering
De index vi har tittat på hittills har varit dense, dvs varje post i filen har
varit indexerad.
Om en fil är lagrad sekventiellt på disken kan det ibland räcka med att ha
ett index på filens olika sidor (pages).
S2
S1 Smith
20 London
Page p-1
S4
S2 Jones
10 Paris
S5
S3 Blake
30 Paris
Page p
S4 Clark
20 London
S5 Adams
30 Athens
Page p+1
Ett sådant index sägs vara nondense (eller ibland sparse).
6
Hashing
Hashing är en teknik som ger snabb direktaccess till en specifik post i en
fil.
Varje post lagras på en adress i databasen som beräknas utifrån någon
funktion (hash-funktionen) av något fält i posten. Den beräknade
adressen kallas hashadressen.
Ex.
Anta att:
(a) S# kan anta värdena S100, …, S900 (10st)
(b) Varje post behöver en egen sida
Hashfunktion
Hashadress = resten efter att ha dividerat den numeriska delen av S# med
13.
Denna funktion kan ge 13 olika adresser. Det är vanligt att ge möjlighet
till fler adresser (ca 20%) än vad som utnyttjas (för framtida utökning).
Nackdelar
- posterna lagras inte i någon logisk sekvens
- det kan finnas "gap" av olika storlek mellan posterna
- två poster kan kollidera (hasha till samma adress). Detta kan lösas
genom att göra hashadressen till en startadress för n poster. De poster
som ändå kolliderar lagras på en overflow page.
En annan nackdel med hashing är att när filstorleken ökar, så kommer
också antalet kollisioner att öka. Det betyder att den genomsnittliga
accesstiden också kommer att öka efter hand. Efter ett tag kanske det blir
nödvändigt att strukturera om hela filen, d v s ladda om filen med en ny
hashfunktion.
7
B-träd
 Ett B-träd är ett speciellt sorts träd-strukturerat index
 De flesta relationsdatabaser använder B-träd som sin huvudsakliga
lagringsstruktur
 B brukar sägas stå för balanserat, d v s alla lövnoderna befinner sig på
samma nivå i trädet
 Detta gör att accesstiderna blir förutsägbara
Ett B-träd består av två delar, sekvensmängden (the sequence set) och
indexmängden (the index set)
Sekvensmängden
Sekvensmängden består av ett enkelt index (på en nivå) till de lagrade
posterna. Sekvensmängden ger en snabb sekventiell access till de
indexerade posterna
Indexmängden
Indexmängden är ett träd-strukturerat index till sekvensmängden. Den
översta nivån i trädet består av en ensam nod, roten. Indexmängden ger
snabb direktaccess till sekvensmängden.
Kombinationen av en indexmängd och en sekvensmängd kallas ofta för
ett B+ -träd.
8
Tumregler för indexering

Indexera alltid primärnyckeln

Inga sekundära index i små relationer

Indexera attribut som ofta används som söknyckel

Indexera främmandenycklar som används ofta

Undvik att indexera attribut och relationer som uppdateras ofta

Undvik att indexera attribut som består av långa teckensträngar
9
Exempel på B-Träd - (Knuth's variant B+)
B-Träd är index (följaktligen objekt) med vissa egenskaper.
P1
K1 P2
K2
K = key
P = pointer
P3
För ett B-Tree med grad m där m är antalet "pekare" i varje nod d v s
*NB*
varje index set nod är av formen (P1, K1, P2, K2, P3)
som skall tolkas (här) som:
för att finna x:
K1 
K2 
x
x
x
<
<
K1 => följ P1
K2 => följ P2
=> följ P3
För att strukturen skall vara ett B-Träd, så måste det ha följande
egenskaper:
(1) Varje nod har mellan m/2 och m barn (m >= 3) med undantag för
roten.
(för grad 3 => mellan 2 & 3 barn)
(2) Alla löv är på samma nivå.
(balanserat, d v s på samma djup från roten)
(3) Ett barn som inte är ett löv, och som själv har n barn, kommer att ha
(n-1) nycklar
10
För att bygga ett B-Tree:
Värden läggs till lövnoderna vilket kan orsaka värden (nycklar) att
propagera uppåt, vilket i värsta fall kan splittra roten och skapa en ny
rot. I så fall har trädets djup ökat med 1.
*NB*
i det fall vi också använder ett sequence set (som innehåller
nyckelvärden och pekare (referenser) till data pages i
datafilen - är det en speciell variant av ett B-Tree Knuths variant, B+ Träd (uttalas B plus träd)
ex. lägg till nycklar i den här ordningen:
25, 36, 9, 4, 100, 225, 121, 144, 169, 196,
256, 16, 81, 64, 1, 49
från det tomma trädet till det första värdet (träd av graden 3)
11
25
ROOT (& LEAF)
INDEX SET
SEQUENCE SET
25
ref to data
add 36
25
ROOT (& LEAF)
25
INDEX SET
SEQUENCE SET
36
ref to data
add 9
25
ROOT (& LEAF)
36
9
25
ref to data
ref to data
INDEX SET
SEQUENCE SET
12
add 4 (note that 9 is shifted)
25
4
9
ROOT (& LEAF)
25
ref to data
INDEX SET
SEQUENCE SET
36
ref to data
add 100
25
4
9
ref to data
ROOT (& LEAF)
25
36
100
INDEX SET
SEQUENCE SET
ref to data
13
add 225 but where? now we must split and promote a value from the sequence set
25
9
4
ROOT (& LEAF)
25
ref to data
36
INDEX SET
SEQUENCE SET
100
ref to data
"temporary" working node
36
25
100
36
25
100
225
now split this to produce (and NOTE that we promote 100 to the index set)
36
25
100
225
25 100
4
9
ref to data
25
36
ref to data
ROOT (& LEAF)
100
INDEX SET
225
ref to data
SEQUENCE SET
NOTE THAT a new value (100) has been added to the index set and the node is now full
14
to simplify the remainder of the example we can redraw the B-Tree as:
25 100
4
9
25
36
100 225
The lowest level is the SEQUENCE SET (references to the data are assumed)
However the B-Tree proper is really the index set and the rules (1-3) apply
to this structure (check at each stage to ensure these rules apply)
add 121
4
25 100
9
25
36
100 121 225
15
add 144 again note that this will cause a split and promotion (144)
100 121 144 225
144 225
100 121
this in turn will result in a split and promotion in the index set node
and the promotion of a value (100) to the next level above to create a new root
Note that the "middle" value is the one promoted in the INDEX SET after the split
100
temporary node
25 100 144
25
144
100
25
4
9
144
25
36
100 121
144 225
16
Now the B-Tree has become deeper (but is still balanced) and the three rules still apply
CHECK THIS!
(1) Every node has between m/2 and m children (m •3) except the root
(2) All leaves are at the same level (balanced)
(3) A non-leaf child with n children will contain (n-1) keys
ROOT
100
25
9
4
LEAF
NODES
144
25
36
144 225
100 121
SEQUENCE SET
add 169 (remember that the SEQUENCE SET must remain ordered
100
25
144
9
4
25
36
100 121
144 169 225
add 196 (which means promoting a value (196) to the INDEX SET
144 169 196 225
144 169
196 225
100
25
4
9
144 196
25
36
100 121
196 225
17
144 169
add 256 (note NO splits NO promotions)
100
25
4
9
144 196
25
36
100 121
196 225 256
144 169
add 16 (note NO splits NO promotions)
100
25
4
9
16
144 196
25
36
add 81 (note NO splits NO promotions)
100 121
196 225 256
144 169
18
100
25
4
9
144 196
16
25
36
81
100 121
196 225 256
144 169
add 64 (note 64 promoted to index set)
100
25 64
4
9
16
144 196
64
25
100 121
81
36
196 225 256
144 169
add 1 (note split in the SEQUENCE SET with promotion (9) to the INDEX SET
(split and promotion (25) in the INDEX SET new value promoted to the root)
1
4
9
25 64
9
16
1
9
4
9
64
16
promote 25
19
25 100
1
4
25
9
144 196
64
9
36
100 121
16
64
196 225 256
144 169
81
add 49 (note NO splits NO promotions)
25 100
1
4
25
9
16
144 196
64
9
36
49
100 121
64
81
196 225 256
144 169
20
NOTERA: B+Trädet (Knuths variant) är ett specialfall av B-Träd
Förflyttning av värden från SEQUENCE SET skall ses som att de läggs
till INDEX SET. När värden läggs till index set (och B-träd generellt),
om noden är full, delas den och en temporär nod skapas och (vanligtvis)
förflyttas mittenvärdet i den temporära noden (d v s läggs till nivån
ovanför - vilket kan förorsaka fler delningar och förflyttningar, och leda
till att en ny ROT skapas i värsta fall).
1
12
18
1
12 18
37
40
+ 42
1
12 18
37
40 42
ex.
40 42
plus förflyttningen av 37 till nästa nivå. Om den ursprungliga noden var
rot, så skapas en ny rot vilket ger följande:
21
37
1
12
18
40
42
NOTERA att de tre reglerna fortfarande gäller.
(1) Varje nod har mellan m/2 och m barn (m >= 3) med undantag för
roten.
(2) Alla löv är på samma nivå.
(balanserat d v s på samma djup från roten)
(3) Ett barn som inte är ett löv, och som själv har n barn, kommer att ha
(n-1) nycklar
22
Återhämtning (Recovery)
Med återhämtning i ett databassystem menas återställandet av
databasen till ett konsistent tillstånd efter det att något fel (t ex en
krasch)medfört att databasen hamnat i ett (misstänkt) inkonsistent
tillstånd.
För att databasen skall kunna återhämtas krävs att all information den
innehåller kan rekonstrueras från någon annan information, lagrad
någon annanstans i systemet.
Återhämtning kan ske på tre nivåer:
 Transaktionsåterhämtning
 Systemåterhämtning
 Mediaåterhämtning
23
Transaktioner
En transaktion är en mängd operationer, utförda i sekvens, som
tillsammans bildar en logisk enhet.
Ex.
BEGIN TRANSACTION ;
INSERT ( { S#: 'S5', P#: 'P1', QTY:1000 } ) INTO SP ;
IF any error occurred THEN GO TO UNDO ;
UPDATE P WHERE P# = 'P1' TOTQTY := TOTQTY + 1000;
IF any error occurred THEN GO TO UNDO ;
COMMIT TRANSACTION ;
GO TO FINISH ;
UNDO : ROLLBACK TRANSACTION ;
FINISH : RETURN ;
En transaktion förflyttar databasen från ett konsistent tillstånd till ett
annat konsistent tillstånd, men garanterar inte konsistens under tiden
transaktionen utförs.
24
Transaktionshanteraren
Transaktionshanterarens uppgift är att se till att transaktioner antingen
utförs i sin helhet eller inte utförs till någon del.
Två operationer behövs för att klara detta:
 COMMIT TRANSACTION betyder att transaktionen utförts i sin
helhet på ett korrekt sätt och att databasen nu är i ett konsistent
tillstånd. Uppdateringar som gjorts kan nu göras permanenta.
 ROLLBACK TRANSACTION betyder att något har gått fel och att
databasen kan befinna sig i ett inkonsistent tillstånd. Uppdateringar
som gjorts måste "spolas tillbaka".
För att kunna "spola tillbaka" måste systemet ha en logg som bokför
detaljer om alla uppdateringar.
Transaktionsåterhämtning
Vid COMMIT etableras en commit point (ibland kallad syncpoint).
Vid varje commit point:
1. Alla uppdateringar sedan föregående commit point görs permanenta.
Dessa uppdateringar har innan bara varit provisoriska.
2. All databaspositionering försvinner och alla lås som finns på tupler
frigörs.
25
Om en transaktion har slutförts och COMMIT har gjorts, skall systemet
garantera att dess uppdateringar är permanent gjorda i databasen, även
om systemet kraschar i nästa ögonblick.
För att klara detta måste uppdateringar skrivas till loggen innan
COMMIT kan slutföras (the write-ahead log rule.)
Transaktioner har fyra viktiga egenskaper:




Odelbarhet: Transaktioner är atomära (allt eller inget)
Konsistens: Transaktioner bevarar databasens konsistens
Isolering: Transaktioner är isolerade från varandra.
Varaktighet: När en transaktion har gjort commit, så är dess
uppdateringar permanenta, även om systemet senare kraschar.
26
Systemåterhämtning
Ett system måste också kunna återhämta sig från "globala" fel, d v s fel
som påverkar alla pågående transaktioner (t ex ett strömavbrott).
Sådana fel kan delas upp i två kategorier:
 Systemfel: Påverkar alla pågående transaktioner, men skadar inte
databasen fysiskt. Ett systemfel kallas ibland en mjuk krasch.
 Mediafel: Skadar hela eller delar av databasen fysiskt. Ett mediafel
kallas ibland för en hård krasch.
Problemet vid systemfel är att innehållet i primärminnet försvinner. När
systemet startas om måste de transaktioner som inte gjort COMMIT
"spolas tillbaka" och de som gjort COMMIT ( men inte fått sina
uppdateringar skrivna till databasen ) måste göras om.
Med vissa bestämda mellanrum gör systemet en avstämning, en
checkpoint.
En checkpoint innefattar:
(a)
(b)
Att fysiskt skriva innehållet i databas-buffertarna till disk
Att fysiskt skriva en speciell checkpoint record, en lista på alla
pågående transaktioner, till loggen
27
Ex.
Tid
tc
tf
T1
T2
T3
T4
T5
Checkpoint
Systemfel
Vid omstart av systemet
1. Börja med två listor, UNDO-listan och REDO-listan. På UNDO-listan
skall alla transaktioner finnas som pågick vid senaste checkpoint.
REDO-listan är tom.
2. Börja vid senaste checkpoint och sök igenom loggen.
3. Om en BEGIN TRANSACTION hittas för en transaktion T, lägg till
T i UNDO-listan.
4. Om en COMMIT hittas för en transaktion T, flytta T från UNDOlistan till REDO-listan.
5. När slutet på loggen har nåtts finns de transaktioner som skall "spolas
tillbaka" på UNDO-listan och de som skall göras om på REDO-listan
Systemet arbetar sig nu tillbaka genom loggen och spolar tillbaka
transaktionerna på UNDO-listan; sen arbetar den sig framåt igen och gör
om alla transaktioner på REDO-listan.
28
Mediaåterhämtning
Ett mediafel är ett fel där någon del av databasen har blivit skadad
fysiskt.
För att återhämtning från ett sådant fel skall kunna göras måste
databasen laddas om från en backup-kopia (dump).
Efter det måste alla transaktioner som har gjort COMMIT sedan den
senaste backup-kopian togs göras om.
Two-Phase Commit
Two-phase commit används om en given transaktion involverar flera
"resurshanterare", t ex i ett distribuerat databassystem,.
Om en transaktion uppdaterar två olika databaser, får det inte hända att
uppdateringar görs i den ena databasen men inte i den andra.
En komponent i systemet, koordinatorn, har som uppgift att garantera att
båda databaserna utför samma operation (båda gör COMMIT eller båda
gör ROLLBACK), även om systemet kraschar mitt i processen.
29
Om koordinatorn bestämmer att operationen skall vara COMMIT gås
följande två faser igenom:
1. Koordinatorn instruerar alla resurshanterare att göra sig klara för att
avsluta transaktionen. Det betyder att alla deltagare i processen måste
skriva all information de har om transaktionen till loggen. Om detta
gick bra, svarar resurshanteraren "OK", annars "not OK" till
koordinatorn.
2. När koordinatorn har fått svar från alla deltagare, skriver den sitt
beslut till sin egen logg. Om alla svar var "OK" blir beslutet
"commit", annars blir det "rollback". Koordinatorn informerar sedan
alla deltagare om sitt beslut, vilket de alla måste rätta sig efter.
Om systemet kraschar mitt i processen, letar omstartproceduren efter
koordinatorns beslut i loggen. Om den hittar det, kan processen fortsätta
där den slutade. Om inte, så antas beslutet ha varit "rollback".
30
Concurrency
Concurrency existerar i ett system som tillåter flera transaktioner att
operera på samma data samtidigt.
I ett sådant system behövs någon form av kontrollmekanism som ser till
att dessa transaktioner inte blandar sig i varandras operationer, d v s att
konsistensen i databasen bevaras.
Tre huvudsakliga problem finns:
 Problemet med förlorade uppdateringar
 Problemet med beroendet av icke permanenta uppdateringar
 Problemet med inkonsistenta analyser
31
Problemet med förlorade uppdateringar
Transaktion A
HÄMTA P
UPPDATERA P
-
Tid
t1
t2
t3
t4
Transaktion B
HÄMTA P
UPPDATERA P
Vid tiden t4 uppdaterar transaktion B tupeln P utan att ens veta om
transaktion A:s uppdatering. Transaktion A:s uppdatering går här
förlorad.
32
Problemet med beroendet av icke permanenta uppdateringar
Transaktion A
HÄMTA P
-
Tid
t1
t2
t3
Transaktion B
UPPDATERA P
ROLLBACK
Transaktion A ser här en uppdatering på P som ännu inte har gjorts
permanent, d v s transaktion B har inte gjort COMMIT.
Transaktion A
UPPDATERA P
-
Tid
t1
t2
t3
Transaktion B
UPPDATERA P
ROLLBACK
Transaktion A uppdaterar här ett värde som aldrig har existerat!
33
Problemet med inkonsistenta analyser
Konto 1
40
Konto 2
50
Transaktion A
Tid
HÄMTA konto 1
t1
Sum = 40
HÄMTA konto 2
t2
Sum += 90
t3
t4
t5
t6
t7
HÄMTA konto 3
t8
Sum += 110 (fel!!)
Konto 3
30
Transaktion B
HÄMTA konto 3
UPPDATERA konto 3
30 -> 20
HÄMTA konto 1
UPPDATERA konto 1
40 -> 50
COMMIT
Transaktion A ser här ett inkonsistent tillstånd av databasen och gör
därför en inkonsistent analys vid t8.
34
Låsning
Dessa tre problem kan lösas med en teknik som kallas låsning.
När en transaktion vill försäkra sig om att ett objekt (t ex en tuple) inte
ändrar sig så fort den vänder ryggen till, skaffar den sig ett lås på det
objektet.
Exempel på låsning
 Vi antar att det finns två olika sorters lås, exklusiva lås (X-lås), och
delade lås (S-lås).
 Om en transaktion A har ett X-lås på tupeln p, kommer en begäran
från en annan transaktion om ett lås av någon typ på den tupeln att bli
avslagen
 Om en transaktion A har ett S-lås på tupeln p så:
a) En begäran om ett X-lås på p från någon annan transaktion kommer
att bli avslagen.
b) En begäran om ett S-lås på p från någon annan transaktion kommer
att bli beviljad.
X
S
-
X
N
N
Y
S
N
Y
Y
Y
Y
Y
35
Protokoll för data-access
1. En transaktion som vill hämta en tuple måste först skaffa ett S-lås
på den tupeln
2. En transaktion som vill uppdatera en tuple måste först skaffa ett Xlås på den tupeln
3. Om en begäran om ett lås från en transaktion B blir avslagen,
därför att den är i konflikt med ett lås som A redan har, går B in i
vänteläge.
4. Låsen innehas vanligtvis tills slut-på-transaktion (COMMIT eller
ROLLBACK)
Transaktion A
HÄMTA P
(skaffar S-lås på P)
UPPDATERA P
(begär X-lås på P)
vänta
vänta
vänta
vänta
vänta
vänta
Tid
t1
t2
t3
t4
Transaktion B
HÄMTA P
(skaffar S-lås på P)
UPPDATERA P
(begär X-lås på P)
vänta
vänta
vänta
Vi har inga förlorade uppdateringar längre, men har istället fått ett nytt
problem (Vad?)
36
Transaktion A
HÄMTA P
(begär S-lås på p)
vänta
vänta
vänta
HÄMTA p
(skaffa S-lås på p)
-
Tid
t1
t2
t3
Transaktion B
UPPDATERA P
(skaffa X-lås på p)
ROLLBACK
(släpp X-lås på p)
t4
Transaktion A kan nu bara se permanenta värden
37
Konto 1
40
Konto 2
50
Konto 3
30
Transaktion A
Tid
HÄMTA konto 1
t1
(skaffa S-lås på konto1)
Sum = 40
HÄMTA konto 2
t2
(skaffa S-lås på konto2)
Sum += 90
t3
t4
t5
t6
HÄMTA konto 3
t7
(begär S-lås på konto 3)
vänta
Transaktion B
HÄMTA konto 3
(skaffa S-lås på konto3)
UPPDATERA konto 3
(skaffa X-lås på konto3)
HÄMTA konto 1
(skaffa S-lås på konto1)
UPPDATERA konto 1
(begär X-lås på konto1)
vänta
vänta
vänta
vänta
En inkonsistent analys av databasen förhindras, men istället inträffar
deadlock vid tiden t7
38
Deadlock
Deadlock är en situation där två eller flera transaktioner befinner sig i
vänteläge samtidigt, och där varje transaktion måste vänta på att någon
av de andra skall släppa ett lås innan den kan fortsätta.
Två strategier.
Ex 1.
a) Systemet upptäcker cykler i sin Wait-for-Graph (grafen som visar
"vem som väntar på vem")
b) En av transaktionerna i cykeln väljs till offer. Offret måste släppa alla
sina lås och "spolas tillbaka" till början.
c) Offret startas antingen om automatiskt eller så ges bara ett
meddelande till applikationen.
Ex 2.
a) en timeout-mekanism används. Om en transaktion inte har gjort något
vettigt på ett tag, antas det att deadlock har inträffat och transaktionen
startas om.
39
Ekvivalent seriellt schema
En Transaktion består av en mängd operationer utförda i sekvens:
T = (op1, op2,…, opn)
En operation kan antingen vara hämta eller uppdatera.
En transaktion består av ett readset och ett writeset.
Readset: RS(T) = {i1, i2,…, ik}
(Mängden objekt som hämtas från databasen)
Writeset: WS(T) = {i1, i2,…, im}
(mängden objekt som uppdateras i databasen)
En komponent i DBHS, schemaläggaren, bestämmer på vilket sätt
transaktionerna får exekvera.
Hur en mängd transaktioner exekverar under en viss tid kallas för ett
schema.
Ett schema som bevarar databasens konsistens kallas ett giltigt schema.
Ett seriellt schema, d v s ett schema där transaktionerna utförs efter
varandra en i taget, är giltigt.
Ett seriellt ekvivalent schema är ett schema som ger samma resultat som
något seriellt schema skulle ha gjort för samma mängd transaktioner.
Ett schema där flera transaktioner exekverar parallellt är därför giltigt om
det är ekvivalent med något seriellt schema.
40
Ex.
Vi har två transaktioner T1 och T2:
T1 = (Läs S, S := S + 100, Skriv S)
T2 = (Läs P, P := P + 100, Skriv P)
Möjliga scheman
1. ( R1(S), C1(S), W1(S), R2(P), C2(P), W2(P) )
2. ( R2(P), C2(P), W2(P), R1(S), C1(S), W1(S) )
3. ( R1(S), C1(S), R2(P), W1(S), C2(P), W2(P) )
4. ( R2(P), C2(P), R1(S), C1(S), W1(S), W2(P) )
R = Läs; C = ändra; W = skriv
1 och 2 är seriella scheman.
3 och 4 är seriellt ekvivalenta scheman, d v s resultatet blir det samma
som för schemana 1 och 2.
41
Algoritmer för concurrency control CCAs
CCAs måste generera ett schema som är ekvivalent med någon seriell
exekvering av en mängd transaktioner.
seriell exekvering
T1
T2
T3
T4
T5
T6
T7
T8
tid
parallell exekvering
T1 T2
T3
T6 T8
T4 T5 T7
tid
CCAs skall lösa konflikter mellan transaktioner
Två transaktioner sägs vara i konflikt om:
{ RS(T1)  WS(T2) } =  eller
{ WS(T1)  RS(T2) } =  eller
{ WS(T1)  WS(T2) } = 
Konflikter är läs/skriv eller skriv/skriv
42
Ex.
T1 = { Läs S, S := S + 100, Skriv S }
T2 = { Läs S, S := S - 50, Skriv S }
T3 = { Läs P, P := P + 100, Skriv P }
{ RS(T1)  WS(T2) } = S
{ WS(T1)  RS(T2) } = S
{ WS(T1)  WS(T2) } = S
d v s T1 och T2 är i konflikt
{ RS(T1)  WS(T3) } = 
{ WS(T1)  RS(T3) } = 
{ WS(T1)  WS(T3) } = 
T1 och T3 är inte i konflikt (det är inte heller T2 och T3)
Möjligt schema: R2(S), R3(P), C3(P), C2(S), W3(P), W2(S), R1(S),
C1(S), W1(S)
43
Protokollet för two-phase locking ( 2PL )
Teorem: Om alla transaktioner följer protokollet för 2PL, så kommer
alla möjliga scheman vara seriellt ekvivalenta
2PL
1. Innan en transaktion utför en operation på något objekt, måste den
skaffa ett lås på det objektet
2. Efter att ha släppt ett lås, får transaktionen inte försöka skaffa några
nya lås.
växande fasen
krympande fasen
start
commit
slut
Lås skaffas under den växande fasen och släpps under den krympande
fasen (vanligtvis vid COMMIT eller ROLLBACK ).
44
Statisk låsning
Alla lås skaffas innan transaktionen börjar exekvera.
Fördelar: Enkel algoritm, deadlock kan inte inträffa
Nackdelar: Svält kan uppstå, kan vara ineffektiv
Dynamisk låsning
Låsen begärs under exekvering när de behövs
a) Låset beviljat => Trans. fortsätter exekveringen
b) Låset ej beviljat => Trans. får vänta (blockerad)
Om deadlock inträffar blir en transaktion utsedd till offer och startas om
senare.
Två varianter finns:
1.
2.
2PLE - Det finns bara ett sorts lås, exklusiva.
2PLU - Det finns två sorters lås, exklusiva och delade
45
Exempel med 2PLE
Om vi har sex transaktioner:
T1 = ( R(A),
T2 = ( R(D),
T3 = ( R(A),
T4 = ( R(A),
T5 = ( R(C),
T6 = ( R(B),
R(B), W(A), R(C), W(B) )
R(E), W(D), W(E), R(F) )
R(D), W(D), W(A) )
R(B), R(C) )
W(C), R(E), W(E) )
R(F), R(D), W(B), W(D) )
TS = { T1, T2, T3, T4, T5, T6 }
Transaktionsmängd
DB = { A, B, C, D, E, F }
Databas
RS(T1) = {A, B, C }
RS(T2) = {D, E, F }
RS(T3) = {A, D }
RS(T4) = {A, B, C }
RS(T5) = {C, E }
RS(T6) = {B, D, F }
WS(T1) = { A, B }
WS(T2) = { D, E }
WS(T3) = { A, D }
WS(T4) = { }
WS(T5) = { C, E }
WS(T6) = { B, D }
Statisk konfliktanalys
T1
T1
T2
T3
T4
T5
T2
N
T3
Y
Y
T4
Y
N
Y
T5
Y
Y
N
Y
T6
Y
Y
Y
Y
N
46
Möjliga (giltiga) scheman
1. T1, T2, T3, T4, T5, T6 ( i serie)
2. ( T1 // T2 ), ( T3 // T5 ), T4, T6
3. ( T1 // T2 ), T3, T4, ( T5 // T6 )
etc.
Men innan transaktionerna körs, är konflikten bara potentiell.
I dynamiska transaktionshanteringssystem, är det vanligtvis inte känt i
förväg i vilken ordning transaktionerna kommer, så ett schema kan inte
göras upp i förväg.
Transaktionshanteraren måste hålla reda på både de transaktioner och
objekt som finns i systemet, och bevilja och avslå lås på dessa objekt.
Denna information kan finnas i form av en tabell, transaktionstabellen,
plus en wait-for-graph (WFG) för varje resurs.
En transaktion kan befinna sig i tre tillstånd:
r - ready
e - executing
b - blocked
47
Ett möjligt scenario kunde vara:
Låsbegäran
T4 R(A)
T4 R(B)
T6 R(B)
T2 R(D)
T2 R(E)
T4 R(C)
T1 R(A)
T4 COMMIT
Transaktionstabell Wait-for-graph
T4 e
A <- T4
T4 e
A <- T4
B <- T4
T4 e T6 b
A <- T4
B <- T4 <- T6
T4 e T6 b
A <- T4
T2 e
B <- T4 <- T6
D <- T2
T4 e T6 b
A <- T4
T2 e
B <- T4 <- T6
D <- T2
E <- T2
T4 e T6 b
A <- T4
T2 e
B <- T4 <- T6
D <- T2
E <- T2
C <- T4
T4 e T6 b
A <- T4 <- T1
T2 e T1b
B <- T4 <- T6
D <- T2
E <- T2
C <- T4
T6 e
A <- T1
T2 e T1 e
B <- T6
D <- T2
E <- T2
48
T1 R(B)
T5 R(C)
T5 W(C)
T5 R(E)
T6 R(F)
T6 R(D)
T2 W(D)
W(E)
R(F)
T6 e
T2 e
T1 b
T6 e
T2 e
T5 e
T1 b
T6 e
T2 e
T5 b
T1 b
T6 e
T2 e
T5 b
T1 b
T6 b
T2 e
T5 b
T1 b
T6 b
T2 b
T5 b
T1 b
A
B
D
E
A
B
D
E
C
A
B
D
E
C
A
B
D
E
C
F
A
B
D
E
C
F
A
B
D
E
C
F
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<-
T1
T6
T2
T2
T1
T6
T2
T2
T5
T1
T6
T2
T2
T5
T1
T6
T2
T2
T5
T6
T1
T6
T2
T2
T5
T6
T1
T6
T2
T2
T5
T6
<- T1
<- T1
<- T1
<- T5
<- T1
<- T5
<- T1
<- T6
<- T5
<- T1
<- T6
<- T5
<- T2
49
T2 dödas
och startas om
T6 e
T1 b
T5 e
T2 r
T2 R(D)
T6 e
T1 b
T5 e
T2 b
T3 R(A)
T6 e
T1 b
T5 e
T2 b
T3 b
T6 W(B)
W(D)
COMMIT
T1 e
T5 e
T2 e
T3 b
T2 R(E)
T1 e
T5 e
T2 b
T3 b
A
B
D
E
C
F
A
B
D
E
C
F
A
B
D
E
C
F
A
B
D
E
C
<<<<<<<<<<<<<<<<<<<<<<<-
T1
T6
T6
T5
T5
T6
T1
T6
T6
T5
T5
T6
T1
T6
T6
T5
T5
T6
T1
T1
T2
T5
T5
A
B
D
E
C
<<<<<-
T1 <- T3
T1
T2
T5 <- T2
T5
<- T1
<- T1
<- T2
<- T3
<- T1
<- T2
<- T3
50
T1 W(A)
R(C)
T1 b
T5 e
T2 b
T3 b
T5 W(E)
COMMIT
T1 e
T2 e
T3 b
T1 W(B)
COMMIT
T2 e
T3 e
T3 R(D)
T2 e
T3 b
T2 W(D)
W(E)
R(F)
T2 e
T3 b
T2 COMMIT
T3 e
T3 W(D)
W(A)
T3 COMMIT
T3 e
Tom tabell
A <- T1
B <- T1
D <- T2
E <- T5
C <- T5
A <- T1
B <- T1
D <- T2
E <- T2
C <- T1
A <- T3
D <- T2
E <- T2
A <- T3
D <- T2
E <- T2
A <- T3
D <- T2
E <- T2
F <- T2
A <- T3
D <- T3
A <- T3
D <- T3
Tom graf
<- T3
<- T2
<- T1
<- T3
<-T3
<-T3
51
Intentionslås
Hittills har vi utgått ifrån att en enskild tuple är det objekt som vi kan
låsa.
Det är emellertid inget som hindrar att vi kan ha lås för en hel relation,
för hela databasen eller för bara ett enskilt attribut i en specifik tuple.
Storleken på de objekt som går att låsa brukar kallas för granularitet
(kornighet). Ju finkornigare lås, desto fler transaktioner kan exekvera
samtidigt. Ju grovkornigare lås, desto mindre lås behövs och desto
mindre blir overheaden.
Protokollet för intentionslås
Ingen transaktion får skaffa ett lås på en tuple innan den har skaffat sig
ett lås på relationen där den tupeln finns.
För detta ändamål introduceras tre nya lås, ett delat intentionslås (IS), ett
exlusivt intentionslås (IX), och ett delat exlusivt intentionslås (SIX).
52
 IS - Transaktionen T tänker skaffa S-lås på enskilda tupler i R
 IX - Samma som IS, plus att T tänker uppdatera enskilda tupler i R
och därför tänker skaffa X-lås på de tuplerna.
 SIX - T kan tolerera andra läsare, men inte andra som uppdaterar
tupler i R. T tänker uppdatera enskilda tupler i R och därför tänker
skaffa X-lås på de tuplerna.
X
SIX
IX
S
IS
-
X
N
N
N
N
N
Y
SIX
N
N
N
N
Y
Y
IX
N
N
Y
N
Y
Y
S
N
N
N
Y
Y
Y
IS
N
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
1. Före en given transaktion kan skaffa ett S-lås på en tuple, måste den
först skaffa ett IS-lås eller starkare på relationen som innehåller den
tupeln.
2. Före en given transaktion kan skaffa ett X-lås på en tuple, måste den
först skaffa ett IX-lås eller starkare på relationen som innehåller den
tupeln.
53
Säkerhet
Skillnader mellan säkerhet och integritet:
Säkerhet
Hindra oauktoriserade användare från att läsa, ändra eller radera data.
Integritet
Hindra auktoriserade användare från att lägga till, ändra eller radera data
på ett inkorrekt sätt.
I båda fall måste någon form av restriktioner specificeras(vanligtvis av
DBA) i något språk (DSL) som lagras i katalogen (DD)
Generella Säkerhetsaspekter







lagliga, sociala och etiska aspeker
fysiska kontroller (fysisk åtkomst till maskiner)
policy-frågor - vem skall ha åtkomst till vad
operativa problem
hårdvarukontroller (t ex nycklar, koder, superuser mode)
säkerhet i operativsystemet (vad händer med "använd" data)
säkerhet i databassystemet. Finns "äganderätt" av dataobjekt?
Två metoder för att angripa problemet med datasäkerhet finns;
godtycklig kontroll och obligatorisk kontroll.
54
Godtycklig kontroll
En given användare kan ha olika accessrättigheter på olika objekt. Olika
användare kan också ha olika rättigheter på samma objekt. Godtyckliga
scheman blir därför väldigt flexibla
Obligatorisk kontroll
Varje objekt sätts till en viss klassificeringsnivå och varje användare
tilldelas en viss klareringsnivå. Ett givet objekt kan bara kommas åt av
användare med rätt klareringsnivå. Obligatoriska scheman är därför
jämförelsevis strikta.
DBHS har som uppgift att se till att de säkerhetsbeslut som fattas också
efterlevs.
1. Säkerhetsregler måste definieras i något passande språk och sen
lagras i katalogen.
2. DBHS måste ha metoder för att kontrollera att en viss användare har
tillåtelse att utföra en viss operation på ett visst objekt
3. Systemet måste veta vem användaren är som begär att få utföra en
operation. Detta kan t ex ske med user ID och lösenord.
55
Godtycklig accesskontroll
För att kunna definiera olika säkerhetsregler behövs ett språk som
stödjer sådana regler.
Ex.
CREATE SECURITY RULE SR3
GRANT RETRIEVE (S#, SNAME, CITY ), DELETE
ON S WHERE S.CITY  'London'
TO Jim, Fred, Mary
ON ATTEMPTED VIOLATION REJECT
Säkerhetsregler har oftast fem komponenter:
1. Ett namn (SR3 i det här exemplet) som regeln registreras under i
katalogen
2. En eller flera privilegier (RETRIEVE och DELETE i exemplet), som
specificeras i GRANT-klausulen
3. Regelns räckvidd, specificerad med ON-klausulen
4. En eller flera användare som skall ha de specificerade privilegierna,
specificerat med TO-klausulen
5. En reaktion vid överträdelse.
Vi måste också kunna ta bort existerande säkerhetsregler
DESTROY SECURITY RULE SR3.
56
Exempel
CREATE SECURITY RULE EX1
GRANT RETRIEVE ( S#, SNAME, CITY )
ON S
TO Jacques, Anne, Charley.
Dessa användare kan se en vertikal delmängd av S. Detta är ett exempel
på en värdeoberoende säkerhetsregel.
CREATE SECURITY RULE EX3
GRANT RETRIEVE, INSERT, UPDATE
( SNAME, STATUS ), DELETE
ON S WHERE S.CITY = 'Paris'
TO Dan, Misha.
Dessa användare kan se en horisontell delmängd av S. Detta är ett
exempel på en värdeberoende säkerhetsregel.
CREATE SECURITY RULE EX4
GRANT RETRIEVE ( S#, SNAME )
ON S WHERE S.STATUS > 50
TO Judy, Paul.
Attributet STATUS används här som villkor även fast det inte är synligt
för användarna.
57
Anta att vi har definierat en vy SSQ enligt följande:
CREATE VIEW SSQ AS
SELECT S#, SUM(QTY)
FROM SP
GROUP BY S#
( Varje leverantörs nummer och den totala kvantiteten för varje
leverantör )
CREATE SECURITY RULE EX4
GRANT RETRIEVE
ON SSQ
TO Fidel.
Fidel har bara rättigheter att se viss statistik från basrelationen SP, inte
några detaljer. Detta är ett exempel på hur man kan använda vyer för att
gömma information.
CREATE SECURITY RULE EX5
GRANT RETRIEVE, UPDATE ( STATUS )
ON S
WHERE DAY ( ) IN ( 'mon', 'tue', 'wed', 'thu', 'fri' )
AND TIME ( ) >= '9:00 AM'
AND TIME ( ) <= '5:00 PM'
TO Purchasing.
Detta är ett exempel på en kontextberoende säkerhetsregel.
OBS!!! Allting som inte är uttryckligen tillåtet, är förbjudet.
58
Audit trails
En audit trail är en speciell logg där detaljer om alla operationer som har
utförts registreras.
Information som en audit trail kan innehålla:







Hur operationen såg ut
Från vilken terminal operationen utfördes
Vilken användare som utförde operationen
Datum och tid för operationen
Berörda relationer, tupler och attribut
De gamla värdena
De nya värdena
Obligatorisk accesskontroll
Obligatorisk säkerhetskontroll används i databaser där en strikt
klassificering av data behövs, t ex inom försvaret eller andra statliga
myndigheter.
Varje objekt har en klassificeringsnivå ( topphemligt, hemligt,
konfidentiellt etc ), där nivåerna är strikt ordnade från högre till lägre
nivåer.
Varje användare tilldelas också en av dessa nivåer.
59
Regler
1. Användare i kan se objekt j bara om dess nivå är större eller lika med
klassificeringsnivån på j
2. Användare i kan modifiera objekt j bara om dess nivå är lika med
klassificeringsnivån på j.
DoDs säkerhetsklasser
Det finns fyra säkerhetsklasser: D, C, B och A
Klass D
Systemet erbjuder bara en minimal säkerhet
Klass C
Klass C är uppdelad på två underklasser, C1 och C2.


Klass C1 kräver separation av användare och data,
d v s all data har en eller flera ägare
Klass C2 kräver dessutom att systemet stödjer konton med lösenord,
audit trails och isolering av resurser.
60
Klass B
Klass B är uppdelad på tre underklasser, B1, B2 och B3.



Klass B1 kräver att varje objekt är märkt med dess
klassificeringsnivå. Den kräver också att en säkerhetspolicy finns
informellt definierad
Klass B2 kräver dessutom att en formell säkerhetspolicy finns
definierad. Den kräver också att bakvägar identifieras och
elimineras. En bakväg kan t ex vara möjligheten att sluta sig till ett
svar på en otillåten fråga från svaret på en tillåten.
Klass B3 kräver specifikt stöd för audit trails och återhämtning och
dessutom att en speciell säkerhetsadministratör finns.
Klass A
Klass A, som är den högsta säkerhetsklassen, kräver ett matematiskt
bevis på
a) att säkerhetsmekanismen i systemet är konsistent och
b) att denna säkerhetsmekanism är adekvat för att stödja den
specificerade säkerhetspolicyn.
61
Stöd för säkerhet i SQL
SQL stödjer bara godtycklig säkerhetskontroll. Två oberoende
mekanismer kan användas, vyer och GRANT-uttryck.
Syntax för GRANT
GRANT ALL [ PRIVILEGES ] |
[ SELECT ] [ INSERT ] [ DELETE ]
[ UPDATE [ (kolumnlista) ]
ON tabellnamn
TO namnlista | PUBLIC
[ WITH GRANT OPTION ]
Ex.
GRANT ALL PRIVILEGES
ON cust_table
TO lewis, agganis
WITH GRANT OPTION.
GRANT SELECT, UPDATE (credit_limit)
ON cust_table
TO garcia.
Det går också att dra tillbaka rättigheter med REVOKE.
Ex.
REVOKE DELETE, UPDATE
ON cust_table
FROM jones, brown.
62
Distribuerade System
DB 1
DB 2
DB 3
Communications Network
DB i
DDBHS:
DB j
DB k
ett antal noder där varje nod är ett fristående DB-system
och där noderna är sammankopplade genom ett
kommunikationsnätverk
( homogent / heterogent )
{ DB1, DB2, ..., DBn }
distributionen av data över noderna är "transparent för
användaren"
varje nod:



har en egen databas
lokal DBHS, transaktionshantering (låsning,
logging, återhämtning etc.)
lokal datakommunikations-hanterare(DC man.)
63
Fördelar
 reflekterar den fysiska/geografiska spridningen av
företag/organisationer
 lokal data lagras lokalt, men är tillgänglig globalt (80/20 regeln:
80% av accesserna är lokala/ 20 % globala)
Nackdel
 Distribuerade system är tekniskt komplexa
Den fundamentala principen för distribuerade databaser:
 Ett distribuerat system skall se exakt ut som ett icke-distribuerat
system för användaren
Tolv regler
(1)
(2)
(3)
(4)
(5)
(6)
(7)
(8)
(9)
(10)
(11)
(12)
lokal autonomi
inget beroende av en central nod
oavbruten operation
lokalt oberoende
fragmenteringsoberoende
oberoende av kopior
distribuerad behandling av frågor
distribuerad transaktionshantering
hårdvaruoberoende
operativsystemsoberoende
nätverksoberoende
DBHS-oberoende
64
(1)
lokal autonomi




(2)
alla operationer på en given nod kontrolleras av den noden
oberoende av alla andra noder
lokal data ägs och hanteras lokalt
går inte att uppnå till 100%
inget beroende av en central nod
 ingen centraliserad behandling (t ex av frågor eller
transaktionshantering)
 alla noder är jämlika (det finns ingen "master" nod)
 ett system som är beroende av en central nod blir sårbart
 en central nod kan också bli en flaskhals
(3)
oavbruten operation
 inga operationer kräver att systemet tas ner, t ex om noder
kommer till/lämnar DDBHS
En fördel i distribuerade system generellt är att de erbjuder
större pålitlighet och större tillgänglighet.
 Pålitligheten förbättras eftersom systemet kan fortsätta
att fungera även om t ex en enskild nod går ner.
 Tillgängligheten förbättras dels på grund av samma skäl
som ovan och dels på grund av möjligheten att replikera
data.
65
(4)
lokalt oberoende (lokaliseringstransparens)
 användare vet inte på vilken ställe data finns
(det ser ut som om all data är lagrad lokalt (logiskt))
 tillåter data att "migrera" utan att användarna vet om det
(5)
fragmenteringsoberoende
 en (logisk) relation kan delas upp i
(fysiska) "fragment" (horisontellt / vertikalt)
 Det betyder att data kan lagras där det används mest så
att trafiken över nätverket minskas
66
Ex.
FRAGMENT EMP INTO
N_EMP AT SITE 'New York' WHERE DEPT# = 'D1'
OR DEPT# = 'D3',
L_EMP AT SITE 'London' WHERE DEPT# = 'D2' .
Den logiska relationen EMP
EMP#
E1
E2
E3
E4
E5
Fragmentet N_EMP
EMP#
E1
E2
E5
DEPT#
D1
D1
D3
DEPT#
D1
D1
D2
D2
D3
SALARY
40K
42K
30K
35K
48K
Fragmentet L_EMP
SALARY
40K
42K
48K
EMP# DEPT# SALARY
E3
D2
30K
E4
D2
45K
 Detta är ett exempel på horisontell fragmentering, d v s
båda fragmenten är en horisontell delmängd av den
logiska relationen (motsvarar relationsoperationen
SELECT).
 Fragmentering av en relation kan även göras vertikalt
(motsvarar relationsoperationen PROJECT).
 Inga fragment får innehålla samma information.
 PROJECT måste bevara primärnyckeln.
 För att återfå den ursprungliga relationen används
UNION för horisontella fragment och JOIN för
vertikala.
67
 Fragmenteringsoberoende innebär att användare inte ser
att data är fragmenterad, utan arbetar mot de logiska
relationerna.
Ex.
EMP WHERE SALARY > 40K AND DEPT# = 'D1'.
omvandlas till
( N_EMP WHERE SALARY > 40K AND DEPT# = 'D1' )
UNION
( L_EMP WHERE SALARY > 40K AND DEPT# = 'D1' )
optimeraren vet att den andra delen av uttrycket blir en tom
relation och att London därför inte behöver kontaktas.
(6)
oberoende av kopior
 givna relationer (fragment) kan ha en eller flera kopior
på olika ställen (kontrollerad redundans)
 problemet med det här är uppdateringar och spridning av
uppdateringar
 kopiering skall vara transparent för användaren
Ex.
REPLICATE N_EMP
LN_EMP AT SITE 'London' .
REPLICATE L_EMP
NL_EMP AT SITE 'New York' .
London har nu en kopia av fragmentet i New York och vice
versa.
68
(7)
distribuerad behandling av frågor
 kräver datakommunikation för (del)frågor
 kräver optimering över det distribuerade systemet
(problemen liknar de i ett centraliserat system plus
hantering av overheaden från kommunikationen)
(8)
distribuerad transaktionshantering
 "concurrency-kontroll" och återhämtning är mer komplext
i ett distribuerat system
 en transaktion kan medföra att kod från flera noder måste
exekveras - en "transaktionsagent" på varje nod sköter
transaktionshantering lokalt
 "concurrency-kontroll" baseras oftast på låsning
 kommunikations-overhead och fördröjningar är viktigare
(9)
hårdvaruoberoende
*
(10)
DBMS är logiskt oberoende av hårdvaran
operativsystemsoberoende
*
(11)
DBMS är logiskt oberoende av operativsystemet
nätverksoberoende
*
DBMS är logiskt oberoende av nätverket
69
(12)
DBMS-oberoende
*
*
DBMSs kan vara heterogena
DBMS-noder måste stödja samma / ett
gemensamt(standard) interface
Problem i distribuerade system
 huvuduppgiften i ett distribuerat system är
att minimera antalet meddelande och storleken på dem ( i alla
fall i ett WAN)

Detta i sin tur påverkar ett antal områden, bl a
-
behandling av frågor
kataloghantering
spridning av uppdateringar
återhämtning
concurrency-kontroll
Behandling av frågor
 För att minska trafiken över nätverket måste
frågeoptimeringen vara distribuerad. Optimeringen består av
ett globalt optimeringssteg följt av lokala optimeringssteg på
varje nod.
70
Ex.
Databas ( suppliers & parts, förenklad )
S ( S#, CITY )
P ( P#, COLOR )
SP ( S#, P# )
10 000 lagrade tupler på nod A
100 000 lagrade tupler på nod B
1 000 000 lagrade tupler på nod A
Anta att varje lagrad tuple är 200 bits lång
Fråga: Hämta S# för leverantörer i London som levererar
röda delar.
SELECT S.S#
FROM S, P, SP
WHERE S.CITY = 'London'
AND S.S# = SP.S#
AND SP.P# = P.P#
AND P.COLOR = 'Red' .
Uppskattad kardinalitet hos vissa temporära resultat:
Antalet röda delar
=
10
Antalet leveranser av leverantörer i London = 100 000
Antaganden om kommunikationen
Datahastighet
Fördröjning
= 50 000 bits/sekund
= 0.1 sekund
Total kommunikationstid
T[i] = total fördröjning + ( total datavolym / datahastighet )
71
Fyra strategier
1. Flytta relationen P till nod A och exekvera frågan där
T[1] = 0.1 + ( 100 000 * 200 ) / 50 000
 400 sek ( ca 6.67 min )
2. Flytta S och P till nod B och exekvera frågan där
T[2] = 0.2 + ( ( 10 000 + 1 000 000 ) * 200 ) / 50 000
 4040 sek ( ca 1.12 timmar )
3. För varje röd del, kolla om det finns någon leverantör i
London
T[3] = ( 0.1 * 20 ) + ( 200 * 20) / 50 000
 ca 2 sek
4. Flytta röda delar till A
T[4] = 0.1 + ( 10 * 200 ) / 50 000
 ca 0.1 sek
 Datahastighet och fördröjning är båda viktiga faktorer när
man väljer en strategi
 Beräkningar och disk-accesser kanske eller kanske inte är
försumbara i sammanhanget !
72
Kataloghantering

centraliserad

"fullt" kopierad -


partitionerad
centraliserad +
partitionerad
-
-
en version av den globala katalogen
på en central nod
varje nod har en kopia av den
globala katalogen
varje nod har en lokal katalog
kombination av två tekniker
(lokal + en central global kopia)
Spridning av uppdateringar
Problemet med att ha flera kopior av samma data är att
uppdateringar måste spridas till alla kopiorna
Schemat med en primärkopia
 en kopia av ett objekt får vara den primära kopian
(alla andra är sekundära)
 primärkopior av olika objekt finns på olika noder
 en uppdatering är klar så fort som primärkopian har
uppdaterats. Noden som har primärkopian måste senare
sprida uppdateringen till alla noder med sekundära kopior
( helst före COMMIT )
Återhämtning
 baseras på "the two phase commit protocol" (2PC)
 en nod måste få rollen som koordinerande nod
(typiskt den nod som initierar transaktionen )
 2PC kräver mycket overhead på meddelanden
 den lokala autonomin försvinner (till viss del)
73
Concurrency-kontroll
 i ett distribuerat system krävs meddelanden för att skaffa,
släppa och testa lås
 Om en transaktion behöver uppdatera ett objekt som det
finns kopior av på n noder, kan detta faktiskt kräva 5n
meddelanden:- n begäran om lås
- n beviljande av lås
- n uppdateringar
- n ackar
- n begäran om att släppa lås
 en vanlig lösning är "primärkopia-strategin"
 En "global deadlock" kan vara svår att upptäcka
Heterogena system& Gateways
 Gränssnittsprogram krävs ("gateways") mellan två
olika databassystem
 standardprotokoll för nätverk kan användas
DBMS X
=> standardform
=> DBMS Y
 mappningar krävs för objekt som datatyper,
SQL "dialekter", feedbackinformation, DD (data dictionary),
begäran av lås, hantering av återhämtning (!), etc.
 heterogena system kan också innehålla en mix av relationsoch icke-relationssystem (väldigt problematiskt!)
74
Client/Server-system
 Ett client/server-system kan ses som ett enkelt specialfall av ett
distribuerat system.
a)
b)
c)
d)
vissa noder är client-noder och andra är server-noder
all data finns på server-noderna
alla applikationer exekverar på client-noderna
"sömmarna" syns
Standarder för client/server-system
 SQL/92 stödjer operationerna CONNECT och DISCONNECT
för att koppla upp och bryta client/server-förbindelser
 Remote Data Access (RDA) är en standard som definierar format
och protokoll för client/server-kommunikation (finns för
närvarande bara för OSI )
 Distributed Relational Database Architecture (RDBA) är en IBMstandard som liknar RDA i mångt och mycket, men är mer
generell.
75
Inbäddad SQL och SQL API:s
SQL kan, förutom att användas interaktivt, också anropas från något
proceduriellt programspråk. Detta kan göras på två olika sätt:
1. Med hjälp av inbäddade SQL-uttryck. SQL-uttryck blandas med
uttryck i värdspråket direkt i källkoden. En speciell förkompilerare
behövs som byter ut SQL-uttrycken mot anrop till funktioner i DBHS.
2. Med hjälp av ett Application Programming Interface (API).
Programmeraren har tillgång till en mängd funktioner (ett bibliotek)
som används för att anropa databasen. Ett API ger samma
funktionalitet som inbäddade uttryck men ingen förkompilering
behövs.
De flesta databas-tillverkare har någon form av stöd för inbäddad SQL, t
ex INGRES, ORACLE, Informix och DB2. Vissa (t ex ORACLE) har
också ett API.
76
/* program to create the viewing table */
#include <stdio.h>
#include <stdlib.h>
EXEC SQL INCLUDE sqlca;
main()
{
/* Connect to database */
EXEC SQL CONNECT 'estatedb';
if(sqlca.sqlcode < 0) exit(-1);
/* Display message for user and create the table */
EXEC SQL CREATE TABLE viewing
(pno varchar(5) not null,
rno varchar(5) not null,
date date
not null,
comment varchar(40) );
/* Check success */
if(sqlca.sqlcode >= 0 )
printf("Creation successful\n");
else
printf("Creation unsuccessful\n");
/*Commit the transaction */
EXEC SQL COMMIT;
/*Finally, disconnect from the database */
EXEC SQL DISCONNECT;
}
77
The Open Database Connectivity (ODBC) Standard
 Ett problem med de olika databasernas API:n är att de inte är
kompatibla med varandra. Detta betyder att om en applikation skall
kunna köras mot flera olika databaser, så måste en version för varje
databas skrivas.
 För att råda bot på detta utvecklades ODBC (av Microsoft). ODBC
ger ett gemensamt gränssnitt för att accessa heterogena databaser.
Detta betyder att en applikation kan köras mot flera olika databaser
utan att koden behöver ändras.
 ODBC håller på att bli en de facto standard i industrin. Några skäl till
varför ODBC är så populärt är att:
- Applikationer blir inte bundna till en speciell databas-tillverkare
- Applikationer kan ignorera det underliggande kommunikationsprotokollet
- ODBC är designat för att passa ihop med existerande standarder
(X/Open och CLI)
- Det är möjligt att accessa mer än 50 av de mest populära
databaserna m h a ODBC idag
78
ODBC - Arkitekturen
Applikation
Applikation
Driver Manager
Driver Manager
Driver
Driver
Driver
Datakälla
Datakälla
Datakälla
Driver
Datakälla
Datakälla
Datakälla
Arkitekturen har fyra komponenter:
 Applikationen, som styr exekveringen och anropar ODBC-funktioner
för att skicka SQL-uttryck till databasen och för att ta emot resultat
från databasen.
 Driver Manager, som laddar drivers åt applikationen.
 Drivern, som exekverar funktionsanropen åt applikationen. Drivern
modifierar anropen så att de får den syntax som stöds av den
underliggande databasen.
 Datakällan, som består av datan som accessas, databasen,
operativsystemet och nätverket (om det finns något).
79
ODBC-gränssnittet
ODBC-gränssnittet innehåller följande delar:
 Ett bibliotek med funktioner som gör det möjligt för applikationen att
koppla upp en förbindelse till en databas, exekvera SQL-uttryck och
hämta resultat.
 En standard för att koppla upp till och logga in på en databas.
 En standard för att representera datatyper.
 En mängd med standardiserade felkoder.
 SQL-syntax som baserar sig på X/Open och CLI-specifikationerna.
80
The World Wide Web
 Webben består av ett nätverk av datorer som kan agera i två roller:
som klienter (bläddrare) eller som servers.
 Exempel på servers är Apache, NCSA HTTPd, Netscape
Communication Server och Microsoft Internet Information Server.
 Exempel på klienter är NCSA Mosaic, Netscape Navigator och
Microsoft Internet Explorer.
 Informationen lagras i dokument som skrivs med språket HTML
(HyperText Markup Language)
 Protokollet som används för att utbyta information mellan klient och
server kallas HTTP (HyperText Transfer Protocol).
 Dokumenten identifieras med hjälp av en adress, en så kallad URL
(Uniform Resource Locator).
81
HTTP och URLs
HTTP
En HTTP-transaktion består av fyra steg:




Uppkoppling - Klienten etablerar en förbindelse med servern.
Fråga - Klienten sänder en fråga till servern.
Svar - Servern sänder ett svar (ett HTML-dokument) till klienten.
Nedkoppling - Servern kopplar ner förbindelsen.
HTTP är ett tillståndslöst protokoll, vilket gör det svårt att stödja
konceptet med sessioner (viktigt för databas-transaktioner).
URLs
 Syntaxen för en URL består av tre grundläggande delar: protokollet
som används vid förbindelsen, datorns namn och sökvägen till den
resurs som efterfrågas.
 Det är också möjligt att specificera till vilken port i datorn
förbindelsen skall kopplas upp till (default 80) och att specificera en
sträng med argument (ett av standardsätten för att skicka data till
servern).
Syntax för en URL
<protocol>:// <host> [:<port>] / absolute_path [? arguments]
82
Statiska och dynamiska Websidor
 Ett HTML-dokument som lagras i en fil är ett exempel på en statisk
websida. Innehållet i dokumentet ändras inte om inte filen själv ändras
 Innehållet i en dynamisk websida ändras varje gång sidan accessas.
Detta innebär att den kan ha egenskaper som en statisk websida inte
har:
- Websidan kan reagera på operationer från användaren (t ex
returnera data när ett formulär har fyllts i eller returnera resultatet
av en databas-fråga)
- Websidan kan skräddarsys för och av varje enskild användare.
 När dokumenten som skall publiceras är dynamiska måste
hypertexten genereras av servern
 För detta ändamål kan man skriva script som översätter olika
dataformat till HTML "on-the-fly".
 Scripten måste förstå frågorna från klienternas HTML-formulär och
även resultaten som genereras av applikationerna som äger datan (t ex
en databas.)
83
Olika Client/Server - arkitekturer
 Dataintensiva (affärs)applikationer består av fyra huvudkomponenter:
databasen, transaktionslogiken, applikationslogiken och
användargränssnittet.
 I ett client/server - system separerar man dessa komponenter i
applikationen på något sätt.
Two-tier arkitektur
 På klienten (tier 1) finns användargränssnittet och det mesta av
applikationslogiken.
 På servern (tier 2) finns en del applikationslogik, transaktionslogiken
och databasen.
 På mitten av 90-talet, när applikationerna blev mer komplexa och
kunde ha hundratals eller tusentals användare, blev denna lösning ofta
ineffektiv av flera skäl:
- en 'tjock' klient kräver mycket resurser (diskutrymme, RAM och
CPU-kraft) på klientens dator för att exekvera effektivt.
- Administrationen på klient-sidan blir väldigt stor.
84
Three-tier arkitektur
 1995 började en ny arkitektur användas som skulle lösa problemen
med two-tier arkitekturen.
 Den nya arkitekturen består av tre lager (tiers) som vart och ett kan
köras på olika plattformar:
- Klienten (tier 1) Här finns användargränssnittet.
- Applikations-servern (tier2) Här finns det mesta av
applikationslogiken.
- Databas-servern (tier3) Här finns transaktionslogiken och
databasen.
En three-tier arkitektur har många fördelar:
 En 'tunn' klient, vilken inte kräver så dyr hårdvara.
 Många klienter kan använda samma applikations-sever, vilket betyder
att mjukvaran inte behöver distribueras till användarna.
 Den ökade modulariteten gör det lättare att modifiera eller byta ut ett
lager utan att påverka de andra lagren.
 Genom att separera applikationen från databasfunktionerna blir det
lättare att implementera 'load balancing'.
 Den passar ganska naturligt in i Web-miljön: browsern fungerar som
den tunna klienten och Web-servern fungerar som applikationsservern.
85
Fördelar och nackdelar med webben som databas-plattform
Fördelar
 Web-klienter är för det mesta plattformsoberoende, dvs
applikationer behöver inte modifieras för att köras på olika
operativsystem.
 Web-klienter tillhandahåller ett gemensamt grafiskt
användargränssnitt (GUI) som är lätt att använda och som kan
användas till flera saker, inklusive databas-access.
 Webben har inbyggt stöd för nätverks-access. Man slipper dyr
nätverks-mjukvara och komplexiteten med att få olika plattformar att
prata med varandra.
 En databas som är kopplad till webben kan nås från hela världen.
Detta ger stora möjligheter att sprida information och att skaffa nya
kunder.
Nackdelar
 För närvarande är Internet ett ganska opålitligt och långsamt medium.
 Eftersom HTTP är tillståndslöst är det svårt att hantera databasförbindelser och transaktioner.
 Prestandan kan bli lägre än i traditionella system eftersom webklienter ofta använder interpreterande språk (HTML, Java, JavaScript,
VBScript)
 Web-teknologin är ännu ganska omogen.
86