27.12.2012 Aufrufe

5 Raumorganisierende Strukturen zur Sekundärschlüsselsuche

5 Raumorganisierende Strukturen zur Sekundärschlüsselsuche

5 Raumorganisierende Strukturen zur Sekundärschlüsselsuche

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

Skript Anfragebearbeitung und Indexstrukturen in Datenbanksystemen Seite 68<br />

Idee:<br />

• Für jede Achse j wende man eine eindimensionale ordnungserhaltende lineare Hashfunktion<br />

(OLH) an<br />

• Die Ergebnisse kombiniere man über einer weitere Funktion.<br />

Vorgehen:<br />

1. Berechnung des Pseudoschlüssels<br />

• Im weiteren müssen wir Lj +1 Bits betrachten, die vom j-ten Attributswertes xj des Schlüssels<br />

x abgeleitet werden.<br />

Dafür definieren wir für jedes Attribut Aj , 1 _< j _< k, eine Kodierungsfunktion �j :<br />

�j : Domain �Aj���01 � �w<br />

mit �j (xj ) = (b1 , ... , bw ) und w ��Lj + 1.<br />

�j (xj ) heißt Pseudoschlüssel von xj .<br />

• Damit das Verfahren ordnungserhaltend ist, muß die Kodierungsfunktion �j (xj ) die Ordnung<br />

erhalten:<br />

L<br />

xj < xj � �j (xj )<br />

�<br />

�j (xj ) für xj , xj ��Domain (Aj )<br />

L<br />

wobei<br />

�<br />

die lexikographische Ordnung auf Bitstrings ist.<br />

• Konkrete Spezifikation von �j (Bitabschneidefunktion):<br />

1. Transformation von Domain (Aj ) nach [0 , 1).<br />

2. Betrachtung der w Präfix-Bits der binären Darstellung: 2 r für 1 j k.<br />

– = _< _<<br />

� �j�xj� = �b1� b2 � ... � bw� = �B� B � ... � B � mit w ��Lj + 1.<br />

j1 j2 jw<br />

• Beispiel:<br />

Domain (A j ) = [0 ... 1).<br />

Dezimaler Wert von x j : 0.38<br />

Binäre Darstellung von x j : 0110 ...<br />

� j (x j ) mit w = 3: 011<br />

2. Berechnung der Komponentenadressen<br />

• Für jede Achse j, 1 _< j _< k, bildet die Hashfunktion gj die Attributswerte auf die Menge der<br />

Partitionierungen der j-ten Achse (Komponentenadressen) {0, ... , mj-1} ab:<br />

�<br />

�<br />

�<br />

�<br />

�<br />

gj( �j�xj��Lj, mj):= �<br />

�<br />

�<br />

�<br />

�<br />

�<br />

gj (�j (xj ), 0, mj ) := 0<br />

r = 1<br />

br � 2<br />

r 1 –<br />

g j nimmt die L j bzw. (L j + 1) Präfix-Bits des Pseudoschlüssels � j (x j ), dreht die Reihenfolge<br />

um und interpretiert das Resultat als ganze Zahl (Integer).<br />

• g j ist eine ordnungserhaltende Hashfunktion (OLH).<br />

L j<br />

+ 1<br />

�<br />

L j<br />

�<br />

r = 1<br />

br � 2<br />

r 1 –<br />

x j<br />

L j<br />

+ 1<br />

�<br />

�<br />

Bjr r � 1<br />

r 1 –<br />

, falls br � 2 � mj , sonst<br />

r = 1

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!