• Keine Ergebnisse gefunden

Mengenorientierte SchnittstelleSatzorientierte SchnittstelleInterne SatzschnittstelleSystempufferschnittstelleDateischnittstelleGeräteschnittstelle VLDatenbank-Implementierungstechniken–5–1 VLDatenbank-Implementierungstechniken–5–2 VLDatenbank-Implementie

N/A
N/A
Protected

Academic year: 2022

Aktie "Mengenorientierte SchnittstelleSatzorientierte SchnittstelleInterne SatzschnittstelleSystempufferschnittstelleDateischnittstelleGeräteschnittstelle VLDatenbank-Implementierungstechniken–5–1 VLDatenbank-Implementierungstechniken–5–2 VLDatenbank-Implementie"

Copied!
15
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

5. Basisalgorithmen für DB-Operationen

Datenbankparameter

Komplexität von Grundalgorithmen

Unäre Operationen (Scan, Selektion, Projektion)

Binäre Operationen: Mengenoperationen

Berechnung von Verbunden

VL Datenbank-Implementierungstechniken – 5–1

Einordnung

Datensystem MOS

Speichersystem

Pufferverwaltung ISS SOS

SPS

Betriebssystem DS

GS Zugriffssystem

Mengenorientierte Schnittstelle

Satzorientierte Schnittstelle

Interne Satzschnittstelle

Systempufferschnittstelle

Dateischnittstelle

Geräteschnittstelle

VL Datenbank-Implementierungstechniken – 5–2

Datenbankparameter

Komplexitätsbetrachtungen (O(n2))

Aufwandsabschätzungen (konkret)

Datenbankparameter als Grundlage

müssen im Katalog des Datenbanksystems gespeichert werden

(2)

Datenbankparameter (II)

nr: Anzahl Tupel in Relationr

br: Anzahl von Blöcken (Seiten), die Tupel ausr beinhalten

sr: (mittlere) Größe von Tupeln ausr(sfür size)

fr: Blockungsfaktor (Tupel ausrpro Block) fr= bs

sr, mitbsBlockgröße

Tupel einer Relation kompakt in Blöcken:

br= nr

fr

VL Datenbank-Implementierungstechniken – 5–4

Datenbankparameter (III)

V(A, r): Anzahl verschiedener Werte für das AttributAin der Relationr(V für values):V(A, r) =|πA(r)|

APrimärschlüssel:V(A, r) =nr

SC(A, r): Selektionskardinalität (selection cardinality );

durchschnittliche Anzahl von Ergebnistupeln beiσA=x(r) fürx∈πA(r)

SchlüsselattributA:SC(A, r) = 1

Allgemein:

SC(A, r) = nr

V(A, r)

Weiterhin: Verzweigungsgrad bei B-Baum-Indexen, Höhe des Baums, Anzahl von Blätterknoten

VL Datenbank-Implementierungstechniken – 5–5

Komplexität von Grundalgorithmen

Grundannahmen

Indexe B+-Bäume

dominierender Kostenfaktor: Blockzugriff

Zugriff auf Hintergrundspeicher auch für Zwischenrelationen

Zwischenrelationen zunächst für jede Grundoperation

Zwischenrelationen hoffentlich zum großen Teil im Puffer

einige Operationen (Mengenoperationen) auf Adreßmengen (TID-Listen)

VL Datenbank-Implementierungstechniken – 5–6

(3)

Hauptspeicheralgorithmen

wichtig für den Durchsatz des Gesamtsystems, da sie sehr oft eingesetzt werden

Tupelvergleich

(Duplikate erkennen, Sortierordnung angeben, . . . ) iterativ durch Vergleich der Einzelattribute, Attribute mit großer Selektivität zuerst

TID-Zugriff

TID innerhalb des Hauptspeichers: übliche

Vorgehensweise bei der Auflösung indirekter Adressen

VL Datenbank-Implementierungstechniken – 5–7

Zugriffe auf Datensätze

Relationen: interner IdentifikatorRelID

Indexe: interner IdentifikatorIndexID

Primärindex, etwaI(Personen(PANr))) beiA=awird maximal ein Tupel pro Zugriff

Sekundärindex, etwaI(Ausleihe(PANr))) Bsp.:PANr= 4711liefert i.a. mehrere Tupel Indexzugriffe: Ergebnis TID-Listen

VL Datenbank-Implementierungstechniken – 5–8

Zugriffe auf Datensätze (II)

fetch-tupel Direktzugriff auf Tupel mittels TID-Wertes holt Tupel in Tupel-Puffer

fetch-tupel(RelID,TID)→Tupel-Puffer

fetch-TID: TID zu (Primärschlüssel-)Attributwert bestimmen

fetch-TID(IndexID,Attributwert)→TID

weiterhin auf Relationen und Indexen: Scans

(4)

Beispiel in SQL

select * from KUNDE

where KName =’Meier’

Gleichheitsanfrage über einen Schlüssel

put: hier Anzeige des Ergebnisses

aktuellerTID :=

fetch-TID(KUNDE-KName-Index, ‘Meyer’);

aktuellerPuffer:=

fetch-tupel(KUNDE-RelationID, aktuellerTID);

put(aktuellerPuffer);

VL Datenbank-Implementierungstechniken – 5–10

Externe Sortieralgorithmen

Gunter 42 Andreas 24 Dieter 4 Chris 7 Berta 77 Elle 36 Tamara 99 Dieter 2 Mario 9 Peer 43 Dieter 11 Andreas 21

Andreas 24

Gunter 42

Berta 77 Chris 7 Elle 36

Dieter 2 Mario 9 Tamara 99

Andreas 21 Dieter 11 Peer 43

Dieter 4 Andreas 21

Andreas 24 Berta 77 Chris 7

Dieter 4 Dieter 2

Dieter 11 Elle 36 Gunter 42 Mario 9 Peer 43 Tamara 99 Andreas 24

Berta 77 Chris 7 Dieter 4 Elle 36 Gunter 42

Andreas 21

Mario 9 Peer 43 Tamara 99 Dieter 11 Dieter 2

mergemerge merge

partition

sort

Externes Sortieren durch Mischen; KomplexitätO(nlogn) Vertauschoperationen

VL Datenbank-Implementierungstechniken – 5–11

Unäre Operationen

Scan durchläuft Tupel einer Relation

Relationen-Scan (full table scan) durchläuft alle Tupel einer Relation in beliebiger Reihenfolge

Aufwand:br

Index-Scan nutzt Index zum Auslesen der Tupel in Sortierreihenfolge

Aufwand: Anzahl der Tupel plus Höhe des Indexes Vergleich

Relationen-Scan besser durch Ausnutzung der Blockung

Index-Scan besser, falls wenige Daten benötigt, aber schlechter beim Auslesen vieler Tupel

VL Datenbank-Implementierungstechniken – 5–12

(5)

Operationen auf Scans

Relationen-Scan öffnen

open-rel-scan(RelationenID)→ScanID

liefertScanIDzurück, die bei folgenden Operationen zur Identifikation genutzt wird

Index-Scan initialisieren

open-index-scan(IndexID,Min,Max)→ScanID liefertScanIDzurück;MinundMaxbestimmen Bereich einer Bereichsanfrage

next-TID liefert nächsten TID; Scan-Cursor weitersetzen

end-of-scan liefert true, falls kein TID mehr im Scan abzuarbeiten

close-scan schließt Scan

VL Datenbank-Implementierungstechniken – 5–13

Beispiel: Scan

select * from Personen

where Nachname between ’Heuer’ and

’Jagellowsk’

VL Datenbank-Implementierungstechniken – 5–14

Beispiel: Relationen-Scan

aktuellerScanID := open-rel-scan(Personen-RelationID);

aktuellerTID := next-TID(aktuellerScanID);

while not end-of-scan(aktuellerScanID) do begin

aktuellerPuffer :=

fetch-tupel(Personen-RelationID,aktuellerTID);

if aktuellerPuffer.Nachname >= ’Heuer’

and aktuellerPuffer.Nachname <= ’Jagellowsk’

then put (aktuellerPuffer);

endif;

aktuellerTID := next-TID(aktuellerScanID);

end;

close (aktuellerScanID);

(6)

Beispiel: Index-Scan

aktuellerScanID :=

open-index-scan(Personen-Nachname-IndexID,

’Heuer’,’Jagellowsk’);

aktuellerTID := next-TID(aktuellerScanID);

while not end-of-scan(aktuellerScanID) do begin

aktuellerPuffer :=

fetch-tupel(Personen-RelationID,aktuellerTID);

put(aktuellerPuffer);

aktuellerTID := next-TID(aktuellerScanID);

end;

close (aktuellerScanID);

VL Datenbank-Implementierungstechniken – 5–16

Selektion

exakte Suche, Bereichsselektionen, komplex zusammengesetzte Selektionskriterien

zusammengesetztes Prädikatϕaus atomaren

Prädikaten (exakte Suche, Bereichsanfrage) mit and, or, not

Tupelweises Vorgehen

Gegebenσϕ(r)

Relationen-Scan: für allet∈rauswertenϕ(t)

AufwandO(nr), genauerbr

VL Datenbank-Implementierungstechniken – 5–17

Selektion: Konjunktive Normalform

Zugriffspfade bei komplexen Prädikaten einsetzenϕ analysieren und geeignet umformen

etwaϕin konjunktive Normalform KNF überführen;

bestehend aus Konjunkten

heuristisch Konjunkt auswählten, das sich besonders gut durch Indexe auswerten laßt (etwa beiA=cund überA Index)

ausgewähltes Konjunkt auswerten; für

Ergebnis-TID-Liste andere Konjunkte tupelweise

oder mehrere geeignete Konjunkte auswerten und die sich ergebenden TID-Listen schneiden

VL Datenbank-Implementierungstechniken – 5–18

(7)

Selektion: Filtermethoden

bei Filtermethode alle Bedingungen auf true setzen, die nicht durch eine Zugriffsmethode unterstützt werden

resultierendes Prädikat:ϕ0.

r0ϕ0(r)unter Ausnutzung der Indexe auswerten

σϕ(r0)auf dem (hoffentlich viel kleineren)

Zwischenergebnisr0mittels tupelweisem Vorgehen auswerten

Filtermethoden nur gut, wennϕ0tatsächlich

Datenvolumen reduziert (Vorsicht bei Disjunktionen)

VL Datenbank-Implementierungstechniken – 5–19

Projektion

Relationenalgebra: mit Duplikateliminierung

SQL: keine Duplikateliminierung, wenn nicht mit distinct gefordert (modifizierter Scan)

mit Duplikateliminerung:

sortierte Ausgabe eines Indexes hilft bei der Duplikateliminierung

Projektion auf indexierte Attribute ohne Zugriff auf gespeicherte Tupel

VL Datenbank-Implementierungstechniken – 5–20

Projektion (II)

ProjektionπX(r): 1. rnachX sortieren

2. t∈rwerden in das Ergebnis aufnehmen, für die t(X)6=previous(t(X))gilt

Zeitaufwand:O(nrlognr)

Fallsrschon sortiert nachX:O(nr)

SchlüsselK ⊆X:O(nr)

(8)

Scan-Semantik

bei Scan-basierten (positionalen)

Änderungsoperationen: Festlegung einer

Scan-Semantik;Wirkungsweise nachfolgender Scan-Operationen

Beispiel: Löschen des aktuellen Satzes

Zustände: vor dem ersten Satz, auf einem Satz, in Lücke zwischen zwei Sätzen, hinter dem letzten Satz, in leerer Menge

weiterhin: Übergangsregeln für Zustände

VL Datenbank-Implementierungstechniken – 5–22

Scan-Semantik (II)

Helloween-Problem (System R):

SQL-Anweisung:

update employee e

set salary = salary * 1.05

satzorientierte Auswertung mittels Index-Scan über Iemployee(salary) und sofortige Index-Aktualisierung

ohne besondere Vorkehrungen: unendliche Anzahl von Gehaltserhöhungen

VL Datenbank-Implementierungstechniken – 5–23

Binäre Operationen: Mengenoperationen

Binäre Operationen meist auf Basis von tupelweisem Vergleich der einzelnen Tupelmengen

Nested-Loops-Technik oder Schleifeniteration

für jedes Tupel einer äußeren Relationswird die innere Relationrkomplett durchlaufen

Aufwand:O(ns∗nr)

Merge-Technik oder Mischmethode

runds(sortiert) schrittweise in der vorgegebenen Tupelreihenfolge durchlaufen

Aufwand:O(ns+nr)

Falls Sortierung noch vorzunehmen:

Sort-Merge-Technik

Aufwandnrlognrund/odernslogns

VL Datenbank-Implementierungstechniken – 5–24

(9)

Mengenoperationen (II)

Hash-Methoden

kleinere der beiden Relationen in Hash-Tabelle

Tupel der zweiten Relation finden ihren Vergleichspartner mittels Hash-Funktion

idealerweise AufwandO(ns+nr)

VL Datenbank-Implementierungstechniken – 5–25

Klassen binärer Operationen

B A

C

r

s

VL Datenbank-Implementierungstechniken – 5–26

Klassen binärer Operationen (II)

Ergebnis- extensionen

Übereinstimmung auf allen Attribu- ten

Übereinstimmung auf einigen Attri- buten

A Differenzr−s Anti-Semi-

Verbund

B Schnittr∩s Verbund, Semi-

Verbund

C Differenzs−r Anti-Semi-

Verbund

A∪B Left Outer Join

A∪C Anti-Verbund

B∪C symmetrische Dif- ferenz

Right Outer Join (r−s)∪(s−r)

(10)

Vereinigung mit Duplikateliminierung

Vereinigung durch Einfügen

Variante der Nested-Loops-Methoden

Kopie einer der beiden Relationenr2unter dem Namen r20 anlegen, dann Tupelt1∈r1inr20 einfügen

(Zeitaufwand abhängig von Organisationsform der Kopie)

Spezialtechniken für die Vereinigung

rundsverketten

Projektion auf alle Attribute der verketteten Relation Zeitaufwand:O((nr+ns)×log(nr+ns))(wie Projektion)

VL Datenbank-Implementierungstechniken – 5–28

Vereinigung (II)

Vereinigung durch Merge-Techniken (merge-union) 1. rundssortieren, falls nicht bereits sortiert 2. rundsmischen

tr ∈rkleiner alsts∈s:trin das Ergebnis, nächstes tr ∈rlesen

tr ∈rgrößer alsts∈s:tsin das Ergebnis, nächstes ts∈slesen

ts=tr:trin das Ergebnis, nächstetr∈rbzw.ts∈s lesen

Zeitaufwand:O(nr×lognr+ns×logns)mit Sortierung, O(nr+ns)ohne Sortierung

VL Datenbank-Implementierungstechniken – 5–29

Berechnung von Verbunden

Varianten

Nested-Loops-Verbund

Block-Nested-Loops-Verbund

Merge-Join

Hash-Verbund

. . .

VL Datenbank-Implementierungstechniken – 5–30

(11)

Nested-Loops-Verbund

doppelte Schleife iteriert über allet1∈rund allet2∈sbei einer Operationr ./ s

r ./ϕ s:

for each tr∈r do begin

for each ts∈s do begin

if ϕ(tr, ts) then put(tr·ts) endif end

end

VL Datenbank-Implementierungstechniken – 5–31

Nested-Loops-Verbund mit Scan

R1ScanID := open-rel-scan(R1ID);

R1TID := next-TID(R1ScanID);

while not end-of-scan(R1ScanID) do begin

R1Puffer := fetch-tupel(R1ID,R1TID);

R2ScanID := open-rel-scan(R2ID);

R2TID := next-TID(R2ScanID);

while not end-of-scan(R2ScanID) do begin

.../* Scan über innere Relation */

close (R2ScanID);

end;

R1TID := next-TID(R1ScanID);

close (R1ScanID);

VL Datenbank-Implementierungstechniken – 5–32

Nested-Loops-Verbund mit Scan II

/* Scan über innere Relation */

R2Puffer := fetch-tupel(R2ID,R2TID);

if R1Puffer.X = R2Puffer.Y then insert into ERG

(R1.Puffer.A1, ..., R1.Puffer.An, R1.Puffer.X, R2.Puffer.B1, ..., R1.Puffer.Bm);

endif;

R2TID := next-TID(R2ScanID);

Verbesserung: Nested-Loops-Verbund verbindet allet1∈r mit Ergebnis vonσX=t1(X)(s)(gut bei Index aufX inr2)

(12)

Block-Nested-Loops-Verbund

statt über Tupel über Blöcke iterieren for each Block Brofr do

begin

for each Block Bsofs do begin

for each Tupel trBr do begin

for each Tupel tsBs do begin

if ϕ(tr, ts) then put(tr·ts) endif end

end end end

Aufwand:br∗bs

VL Datenbank-Implementierungstechniken – 5–34

Merge-Techniken

X :=R∩S; falls nicht bereits sortiert, zuerst Sortierung von rundsnachX

1. tr(X)< ts(X), nächstestr ∈rlesen 2. tr(X)> ts(X), nächstests∈slesen

3. tr(X) =ts(X),trmitts und allen Nachfolgern vonts, die aufXmittsgleich, verbinden

4. beim erstent0s∈smitt0s(X)6=ts(X)beginnend mit ursprünglichemts mit den Nachfolgernt0r vontr wiederholen, solangetr(X) =t0r(X)gilt

VL Datenbank-Implementierungstechniken – 5–35

Merge-Techniken: Aufwand

alle Tupel haben den selbenX-Wert:O(nr×ns)

XSchlüssel vonRoderS:O(nrlognr+nslogns)

bei vorsortierten Relationen sogar:O(nr+ns)

VL Datenbank-Implementierungstechniken – 5–36

(13)

Merge-Join mit Scan

Verbund-Attribute auf beiden Relationen Schlüsseleigenschaft

min(X)undmax(X): minimaler bzw. maximaler gespeicherter Wert fürX

VL Datenbank-Implementierungstechniken – 5–37

Merge-Join mit Scan (II)

R1ScanID := open-index-scan(R1XIndexID, min(X), max(X));

R1TID := next-TID(R1ScanID);

R1Puffer := fetch-tupel(R1ID,R1TID);

R2ScanID := open-index-scan(R2YIndexID, min(Y), max(Y));

R2TID := next-TID(R2ScanID);

R2Puffer := fetch-tupel(R2ID,R2TID);

while not end-of-scan(R1ScanID) and not end-of-scan(R2ScanID) do begin

.../* merge */

end;

close (R1ScanID);

close (R2ScanID);

VL Datenbank-Implementierungstechniken – 5–38

Merge-Join mit Scan (III)

/* merge */

if R1Puffer.X < R2Puffer.Y

then R1TID := next-TID(R1ScanID);

R1Puffer := fetch-tupel(R1ID,R1TID);

else if R1Puffer.X > R2Puffer.y then R2TID := next-TID(R2ScanID);

R2Puffer := fetch-tupel(R2ID,R2TID);

else insert into ERG

(R1.Puffer.A1, ..., R1.Puffer.An, R1.Puffer.X, R2.Puffer.B1, ..., R1.Puffer.Bm);

R1TID := next-TID(R1ScanID);

R1Puffer := fetch-tupel(R1ID,R1TID);

R2TID := next-TID(R2ScanID);

R2Puffer := fetch-tupel(R2ID,R2TID);

endif;

(14)

Hash-Verbund

Tupel ausrundsüberX in gemeinsame Datei mitk Blöcken (Buckets) “gehasht”

Tupel in gleichen Buckets durch Verbundalgorithmus verbinden

VL Datenbank-Implementierungstechniken – 5–40

Hash-Verbund (II)

h h

2

. . . . . .

r s

. . . . . .

join

join join join

1 0

0

1

2

max max

VL Datenbank-Implementierungstechniken – 5–41

Hash-Verbund (III)

for each tr in r do begin

i:=h(tr(X)); Hir:=Hir∪tr(X);

end;

for each ts in s do begin

i:=h(ts(X));

His:=His∪ts(X);

end;

for each k in 0. . .max do Hkr ./ Hks;

VL Datenbank-Implementierungstechniken – 5–42

(15)

Vergleich der Techniken

s

r r

s s

r

Nested-Loops-Join Merge-Join Hash-Join

VL Datenbank-Implementierungstechniken – 5–43

Referenzen

ÄHNLICHE DOKUMENTE

Nach der Pensioniemng Wolfgang Voigts wird Dieter George..

create table Buch ( ISBN char(10), Titel varchar(200), Verlagsname varchar(30), primary key (ISBN),. foreign

Puffer: Seiten (Byte-Container) ↔ Speichersystem: interne Datensätze ↔ Zugriffssystem: logische Datensätze, interne Tupel.

■ Normalfall: Primärschlüssel über Primärindex oder Dateiorganisationsform unterstützt, kann geclusterter Index sein.. ■ Normalfall: Sekundärschlüssel über Sekundärindex

Erzeugung einer interner Anfragerepräsentation durch logische Optimierung. mit interne Optimierung einen

und um den Schwächling, der wohl nach Macht lüstern aber dieselbe nicht allein zu erringen fähig ist, sammeln sich die Unzufriedenen. Was Wunder, daß das

Dann muss jeder Teilbaum S von T ein optimaler Join-Baum für die Relationen sein, die in S enthalten sind. Idee

Wenn etwa in der Debatte über die Beziehung zwischen Regionalisierung und Globalisierung die Aussagen, daß die Regionen als wirtschaftliche Räume pulverisiert würden, oder, auf