Kapitel 7
							
								
								
									
										
											BIN
										
									
								
								Assets/DBimpl-bsp-partition.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 46 KiB | 
							
								
								
									
										
											BIN
										
									
								
								Assets/DBimpl-eckentransformation.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 56 KiB | 
							
								
								
									
										
											BIN
										
									
								
								Assets/DBimpl-invertierte-liste.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 50 KiB | 
							
								
								
									
										
											BIN
										
									
								
								Assets/DBimpl-kdb-baum-brickwall.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 50 KiB | 
							
								
								
									
										
											BIN
										
									
								
								Assets/DBimpl-mdh-veranschaulichung.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 34 KiB | 
							
								
								
									
										
											BIN
										
									
								
								Assets/DBimpl-mehrstufige-geom-bearbeitung.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 78 KiB | 
							
								
								
									
										
											BIN
										
									
								
								Assets/DBimpl-mittentransformation.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 35 KiB | 
							
								
								
									
										
											BIN
										
									
								
								Assets/DBimpl-präfix-baum.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 50 KiB | 
							
								
								
									
										
											BIN
										
									
								
								Assets/DBimpl-r+-baum-problem.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 13 KiB | 
							
								
								
									
										
											BIN
										
									
								
								Assets/DBimpl-r+-baum-struktur.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 20 KiB | 
							
								
								
									
										
											BIN
										
									
								
								Assets/DBimpl-r+-baum.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 24 KiB | 
							
								
								
									
										
											BIN
										
									
								
								Assets/DBimpl-r-baum-struktur.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 23 KiB | 
							
								
								
									
										
											BIN
										
									
								
								Assets/DBimpl-r-baum-vergrößern.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 26 KiB | 
							
								
								
									
										
											BIN
										
									
								
								Assets/DBimpl-r-baum.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 22 KiB | 
							
								
								
									
										
											BIN
										
									
								
								Assets/DBimpl-suchfenster.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 58 KiB | 
							
								
								
									
										
											BIN
										
									
								
								Assets/DBimpl-tries.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 46 KiB | 
							
								
								
									
										
											BIN
										
									
								
								Assets/DBimpl-va-file.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 49 KiB | 
							
								
								
									
										
											BIN
										
									
								
								Assets/Dbimpl-grid-file-degeneration.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 50 KiB | 
							
								
								
									
										
											BIN
										
									
								
								Assets/Dbimpl-kdb-baum-beispiel.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 58 KiB | 
							
								
								
									
										
											BIN
										
									
								
								Assets/Dbimpl-r+-baum-problem-2.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 10 KiB | 
							
								
								
									
										
											BIN
										
									
								
								Assets/Dbimpl-trie-vs-patricia.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 58 KiB | 
							
								
								
									
										
											BIN
										
									
								
								Assets/Dbimpl-tries-knoten.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 29 KiB | 
| @ -589,7 +589,7 @@ Aufgaben der Pufferverwaltung | ||||
|  | ||||
| 
 | ||||
| Mangelnde Eignung des BS-Puffers | ||||
| - Natürlicher Verbund von Relationen _A_ und _B_ (zugehörige Folge von Seiten: _Ai_ bzw. _Bj_ ) | ||||
| - Natürlicher Verbund von Relationen $a$ und $b$ (zugehörige Folge von Seiten: _Ai_ bzw. _Bj_ ) | ||||
| - Implementierung: _Nested-Loop_ | ||||
|      | ||||
| - Ablauf | ||||
| @ -717,7 +717,7 @@ Approximierende Verfahren | ||||
| - Idee: | ||||
|     - Vereinfachung der benötigten Datenstruktur durch Approximation | ||||
|     - Effektivität (Trefferrate) vs. Skalierbarkeit (Anzahl der Threads) | ||||
| - CLOCK: Approximation der Historie durch Bit-Schieberegister der Länge _k_ | ||||
| - CLOCK: Approximation der Historie durch Bit-Schieberegister der Länge $k$ | ||||
|        - $k= 0$: FIFO | ||||
|        - $k\rightarrow\infty$: LRU | ||||
|        - typisch: $k = 1$ | ||||
| @ -843,7 +843,7 @@ Klassifikation der Speichertechniken | ||||
|  | ||||
| 
 | ||||
| Dünn- vs. dichtbesetzter Index | ||||
| - dünnbesetzter Index: nicht für jeden Zugriffsattributwert _K_ ein Eintrag in Indexdatei sondern z.B. nur für _Seitenanführer_ einer sortierten Relation | ||||
| - dünnbesetzter Index: nicht für jeden Zugriffsattributwert $k$ ein Eintrag in Indexdatei sondern z.B. nur für _Seitenanführer_ einer sortierten Relation | ||||
| - dichtbesetzter Index: für jeden Datensatz der internen Relation ein Eintrag in Indexdatei | ||||
| 
 | ||||
| Geclusterter vs. nicht-geclusterter Index | ||||
| @ -1498,7 +1498,7 @@ Grid-File: Zielsetzungen | ||||
| 
 | ||||
| Prinzip der zwei Plattenzugriffe | ||||
| - bei exact-match | ||||
|     1. gesuchtes _k_ -Tupel auf Intervalle der Skalen abbilden; als Kombination der ermittelten Intervalle werden Indexwerte errechnet; Skalen im Hauptspeicher => noch kein Plattenzugriff | ||||
|     1. gesuchtes $k$ -Tupel auf Intervalle der Skalen abbilden; als Kombination der ermittelten Intervalle werden Indexwerte errechnet; Skalen im Hauptspeicher => noch kein Plattenzugriff | ||||
|     2. über errechnete Indexwerte Zugriff auf das _Grid-Directory_ ; dort Adressen der Datensatz-Seiten gespeichert; erster _Plattenzugriff_. | ||||
|     3. Der Datensatz-Zugriff: zweiter _Plattenzugriff_. | ||||
| 
 | ||||
| @ -1544,3 +1544,370 @@ Buddy-System | ||||
| - Unflexibel beim Löschen: nur Zusammenfassungen von Regionen erlaubt, die vorher als Zwillinge entstanden waren | ||||
| - Beispiel: $(15,D)$ löschen: Seiten 1 und 4 zusammenfassen; $(87,S)$ löschen, Seite 2 zwar unterbelegt, kann aber mit keiner anderen Seite zusammengefasst werden | ||||
| 
 | ||||
| # Weitere Indexstrukturen | ||||
| ## Bitmap-Indexe | ||||
| Bitmap-Indexe | ||||
| - Idee: _Bit-Vektor_ zur Kodierung der Tupel-Attributwert-Zuordnung | ||||
| - Vergleich mit baumbasierten Indexstrukturen: | ||||
|     - vermeidet degenerierte B-Bäume | ||||
|     - unempfindlicher gegenüber höherer Zahl von Attributen | ||||
|     - einfachere Unterstützung von Anfragen, in denen nur einige (der indexierten) Attribute beschränkt werden | ||||
|     - dafür aber i.allg. höhere Aktualisierungskosten | ||||
|        - beispielsweise in Data Warehouses wegen des überwiegend lesenden Zugriffs unproblematisch | ||||
| 
 | ||||
| Bitmap-Index: Realisierung | ||||
| - Prinzip: Ersetzung der TIDs (rowid) für einen Schlüsselwert im $b$ +-Baum durch Bitvektor | ||||
| - Knotenaufbau: $|B: 0 1001 0...0 1 | F: 1 01 000... 10  | O: 000 101 ...00 |$ | ||||
| - Vorteil: geringerer Speicherbedarf | ||||
|     - Beispiel: 150.000 Tupel, 3 verschiedene Schlüsselwerte, 4 Byte für TID | ||||
|           - B+-Baum: 600 KB | ||||
|           - Bitmap: $3*18750 Byte =56KB$ | ||||
| - Nachteil: Aktualisierungsaufwand | ||||
| - Definition in Oracle | ||||
|     ```sql | ||||
|     CREATE BITMAP INDEX bestellstatus_idx ON bestellung(status); | ||||
|     ``` | ||||
| - Speicherung in komprimierter Form | ||||
| 
 | ||||
| Standard-Bitmap-Index | ||||
| - jedes Attribut wird getrennt abgespeichert | ||||
| - für jede Ausprägung eines Attributs wird ein | ||||
|     Bitmap-Vektor angelegt: | ||||
|        - für jedes Tupel steht ein Bit, dieses wird auf 1 gesetzt, wenn das indexierte Attribut in dem Tupel den Referenzwert dieses Bitmap-Vektors enthält | ||||
|        - die Anzahl der entstehenden Bitmap-Vektoren pro Dimension entspricht der Anzahl der unterschiedlichen Werte, die für das Attribut vorkommen | ||||
| - Beispiel: Attribut Geschlecht | ||||
|     - 2 Wertausprägungen (m/w) | ||||
|     - 2 Bitmap-Vektoren | ||||
|     | PersId | Name | Geschlecht | Bitmap-w | Bitmap-m | | ||||
|     | --- | --- | --- | --- | --- | | ||||
|     007 |James Bond |M |0 |1 | ||||
|     008 |Amelie Lux |W |1 |0 | ||||
|     010 |Harald Schmidt |M |0 |1 | ||||
|     011 |Heike Drechsler |W |1 |0 | ||||
| - Selektion von Tupeln kann nun durch entsprechende Verknüpfung von Bitmap-Vektoren erfolgen | ||||
| - Beispiel: Bitmap-Index über Attribute Geschlecht und Geburtsmonat | ||||
|   - (d.h. 2 Bitmap-Vektoren B-w und B-m für Geschlecht und 12 Bitmap-Vektoren B-1, ..., B-12 für die Monate, wenn alle Monate vorkommen) | ||||
| - Anfrage: "alle im März geborenen Frauen" | ||||
|     - Berechnung: $B-w \wedge B-3$ (bitweise konjunktiv verknüpft) | ||||
|     - Ergebnis: alle Tupel, an deren Position im Bitmap-Vektor des Ergebnis eine 1 steht | ||||
| 
 | ||||
| Mehrkomponenten-Bitmap-Index | ||||
| - bei Standard-Bitmap-Indexe entstehen für Attribute mit vielen Ausprägungen sehr viele Bitmap-Vektoren | ||||
| - $<n,m>$-Mehrkomponenten-Bitmap-Indexe erlauben $n*m$ mögliche Werte durch $n+m$ Bitmap-Vektoren zu | ||||
|     indexieren | ||||
| - jeder Wert $x(0\leq x\leq n*m-1)$ kann durch zwei Werte $y$ und $z$ repräsentiert werden: | ||||
|     $x=n*y+z$ mit $0\leq y\leq m-1$ und $0\leq z\leq n-1$ | ||||
|     - dann nur noch maximal $m$ Bitmap-Vektoren für $y$ und $n$ Bitmap-Vektoren für $z$ | ||||
|     - Speicheraufwand reduziert sich von $n*m$ auf $n+m$ | ||||
|     - dafür müssen für eine Punktanfrage aber 2 Bitmap-Vektoren gelesen werden | ||||
| - Beispiel: Zweikomponenten-Bitmap-Index | ||||
|     - Für $M= 0 ..11$ etwa $x= 4*y + z$ | ||||
|     - y-Werte: $B-2-1, B-1-1, B-0-1$ | ||||
|     - z-Werte: $B-3-0, B-2-0, B-1-0, B-0-0$ | ||||
|     | x|  y | || z ||||| | ||||
|     | --- | --- | --- | --- | --- | --- | --- | --- | | ||||
|     | M | B-2-1 | B-1-1 | B-0-1| B-3-0| B-2-0| B-1-0| B-0-0 | ||||
|     |5| 0 |1 |0 |0 |0 |1 |0 | ||||
|     |3| 0 |0 |1 |1 |0 |0 |0 | ||||
|     |0| 0 |0 |1 |0 |0 |0 |1 | ||||
|     |11| 1| 0 |0| 1 |0| 0 |0 | ||||
| 
 | ||||
| Beispiel: Postleitzahlen | ||||
| - Kodierung von Postleitzahlen | ||||
| - Werte 00000 bis 99999 | ||||
| - direkte Umsetzung: 100.000 Spalten | ||||
| - Zweikomponenten-Bitmap-Index (erste 2 Ziffern + 3 letzte Ziffern): 1.100 Spalten | ||||
| - Fünf Komponenten: 50 Spalten | ||||
|     - geeignet für Bereichsanfragen "PLZ 39***" | ||||
| - Binärkodiert (bis $2^17$): 34 Spalten | ||||
|     - nur für Punktanfragen! | ||||
| - Bemerkung: Kodierung zur Basis 3 ergibt sogar nur 33 Spalten... | ||||
| 
 | ||||
| ## Indexierung von Texten | ||||
| Indexierung von Texten | ||||
| - bisher vorgestellte Verfahren unterstützen prinzipiell auch die Indexierung von Zeichenketten | ||||
| - Probleme bereitet folgendes: | ||||
|     - unterschiedliche Längen der Zeichenketten als Suchschlüssel | ||||
|     - bei Sätzen: Zugriff auf einzelne Wörter bevorzugt | ||||
|     - Ähnlichkeiten u.a. über gemeinsame Präfixe und Editierabstand | ||||
| 
 | ||||
| Digital- und Präfixbäume | ||||
| - B-Bäume: Problem bei zu indexierenden Zeichenketten | ||||
| - Lösung: Digital- oder Präfixbäume | ||||
| - Digitalbäume indexieren (fest) die Buchstaben des zugrundeliegenden Alphabets | ||||
| - können dafür unausgeglichen werden | ||||
| - Beispiele: Tries, Patricia-Bäume | ||||
| - Präfixbäume indexieren Präfix der Zeichenketten | ||||
| 
 | ||||
| Tries | ||||
| - von "Information Retrieval", aber wie try gesprochen | ||||
|     - Abgrenzung vom _tree_ für allgemeine Suchbäume | ||||
|      | ||||
| - Knoten eines Tries | ||||
|      | ||||
|     - Probleme: lange gemeinsame Teilworte, nicht vorhandenen Buchstaben und Buchstabenkombinationen, möglicherweise leere Knoten, sehr unausgeglichene Bäume | ||||
| 
 | ||||
| Patricia-Bäume | ||||
| - Tries: Probleme bei Teilekennzahlen, Pfadnamen, URLs (lange gemeinsame Teilworte) | ||||
| - Lösung: Practical Algorithm To Retrieve Information Coded In Alphanumeric (Patricia) | ||||
| - Prinzip: Überspringen von Teilworten | ||||
| - Problem: Datenbanksprache bei Suchbegriff _Triebwerksperre_ | ||||
| 
 | ||||
| Patricia-Baum und Trie im Vergleich | ||||
|  | ||||
| - übersprungene Teilworte zusätzlich speichern: Präfix-Bäume | ||||
| 
 | ||||
| 
 | ||||
| Präfix-Bäume | ||||
| - Patricia-Baum plus Abspeicherung der übersprungenen Präfixe | ||||
|      | ||||
| 
 | ||||
| Invertierte Listen | ||||
| - indizierte Worte (Zeichenketten) bilden eine lexikographisch sortierte Liste | ||||
| - einzelner Eintrag besteht aus einem _Wort_ und einer Liste von Dokument-Identifikatoren derjenigen Dokumente, in denen das Wort vorkommt | ||||
| - zusätzlich können weitere Informationen für die Wort-Dokument-Kombination abgespeichert werden: | ||||
|     - Position des (ersten Auftretens des) Wortes im Text | ||||
|     - Häufigkeit des Wortes im Text | ||||
| 
 | ||||
| Invertierte Listen | ||||
|      | ||||
| 
 | ||||
| ## Mehrdimensionale Speichertechniken | ||||
| Mehrdimensionale Speichertechniken | ||||
| - bisher: eindimensional (keine partial-match-Anfragen, nur lineare Ordnung) | ||||
| - jetzt: mehrdimensional (auch partial-match-Anfragen, Positionierung im mehrdimensionalen Datenraum) | ||||
| - $k$ Dimensionen = $k$ Attribute können gleichberechtigt unterstützt werden | ||||
| - dieser Abschnitt | ||||
|     - mehrdimensionaler B-Baum | ||||
|     - mehrdimensionales Hashverfahren | ||||
| 
 | ||||
| ## Mehrdimensionale Baumverfahren | ||||
| Mehrdimensionale Baumverfahren | ||||
| - KdB-Baum ist B+-Baum, bei dem Indexseiten als binäre Bäume mit Zugriffsattributen, Zugriffsattributwerten und Zeigern realisiert werden | ||||
| - Varianten von $k$ -dimensionalen Indexbäumen: | ||||
|     - _kd-Baum_ von Bentley und Friedman: für Hauptspeicheralgorithmen entwickelte, mehrdimensionale Grundstruktur (binärer Baum) | ||||
|     - _KDB-Baum_ von Robinson: Kombination kd-Baum und B-Baum ( $k$ -dimensionaler Indexbaum bekommt höheren Verzweigungsgrad) | ||||
|     - _KdB-Baum_ von Kuchen: Verbesserung des Robinson-Vorschlags, wird hier behandelt | ||||
| - KdB-Baum kann Primär- und mehrere Sekundärschlüssel gleichzeitig unterstützen | ||||
| - macht als Dateiorganisationsform zusätzliche Sekundärindexe überflüssig | ||||
| 
 | ||||
| Definition KdB-Baum | ||||
| - Idee: auf jeder Indexseite einen Teilbaum darstellen, der nach mehreren Attributen hintereinander verzweigt | ||||
|     - _KdB-Baum vom Typ_ ( $b$ , $t$ ) besteht aus | ||||
|         - inneren Knoten (Bereichsseiten) die einen _kd-Baum_ mit maximal $b$ internen Knoten enthalten | ||||
|         - Blättern (Satzseiten) die bis zu $t$ Tupel der gespeicherten Relation speichern können | ||||
|     - Bereichsseiten: _kd-Baum_ enthalten mit Schnittelementen und zwei Zeigern | ||||
|         - Schnittelement enthält Zugriffsattribut und Zugriffsattributwert;  | ||||
|         - linker Zeiger: kleinere Zugriffsattributwerte;  | ||||
|         - rechter Zeiger: größere Zugriffsattributwerte | ||||
| 
 | ||||
| Beispiel | ||||
|  | ||||
| 
 | ||||
| KdB-Baum: Struktur | ||||
| - Bereichsseiten | ||||
|     - Anzahl der Schnitt- und Adressenelemente der Seite | ||||
|     - Zeiger auf Wurzel des in der Seite enthaltenen kd-Baumes | ||||
|     - Schnitt- und Adressenelemente. | ||||
| - Schnittelement | ||||
|     - Zugriffsattribut | ||||
|     - Zugriffsattributwert | ||||
|     - zwei Zeiger auf Nachfolgerknoten des kd-Baumes dieser Seite (können Schnitt- oder Adressenelemente sein) | ||||
| - Adressenelemente: Adresse eines Nachfolgers der Bereichsseite im KdB-Baum (Bereichs- oder Satzseite) | ||||
| 
 | ||||
| KdB-Baum: Operationen | ||||
| - Komplexität $lookup$, $insert$ und $delete$ bei exact-match $O(log n)$ | ||||
| - bei partial-match besser als $O(n)$ | ||||
| - bei $t$ von $k$ Attributen in der Anfrage spezifiziert: Zugriffskomplexität von $O(n^{1-t/k})$ | ||||
| 
 | ||||
| KdB-Baum: Trennattribute | ||||
| - Reihenfolge der Trennattribute | ||||
|     - entweder zyklisch festgelegt | ||||
|     - oder Selektivitäten einbeziehen: Zugriffsattribut mit hoher Selektivität sollte früher und häufiger als Schnittelement eingesetzt werden | ||||
| - Trennattributwert: aufgrund von Informationen über Verteilung von Attributwerten eine geeignete "Mitte" eines aufzutrennenden Attributwertebereichs ermitteln | ||||
| 
 | ||||
| 
 | ||||
| KdB-Baum: Brickwall | ||||
|  | ||||
| 
 | ||||
| ## Mehrdimensionales Hashen | ||||
| Mehrdimensionales Hashen | ||||
| - Idee: Bit Interleaving | ||||
| - abwechselnd von verschiedenen Zugriffsattributwerten die Bits der Adresse berechnen | ||||
| - Beispiel: zwei Dimensionen | ||||
|     | | *0*0 | *0*1 | *1*0| *1*1| | ||||
|     | --- | --- | --- | --- | --- | | ||||
|     0*0*| 0000 |0001 |0100 |0101 | ||||
|     0*1*| 0010 |0011 |0110 |0111 | ||||
|     1*0*| 1000 |1001 |1100 |1101 | ||||
|     1*1*| 1010 |1011 |1110 |1111 | ||||
| 
 | ||||
| MDH von Kuchen | ||||
| - MDH baut auf linearem Hashen auf | ||||
| - Hash-Werte sind Bitfolgen, von denen jeweils ein Anfangsstück als aktueller Hashwert dient | ||||
| - je ein Bitstring pro beteiligtem Attribut berechnen | ||||
| - Anfangsstücke nun nach dem Prinzip des Bit-Interleaving zyklisch abarbeiten | ||||
| - Hashwert reihum aus den Bits der Einzelwerte zusammensetzen | ||||
| 
 | ||||
| MDH formal | ||||
| - mehrdimensionaler Wert $x := (x_1,..., x_k)\in D = D_1\times ...\times D_k$ | ||||
| - Folge von mit _i_ indizierten Hashfunktionen konstruieren | ||||
| - _i_-te Hashfunktion $h_i(x)$ wird mittels Kompositionsfunktion $\bar{h}_i$ aus den jeweiligen $i$ -ten Anfangsstücken der lokalen Hash-Werte $h_{i_j}(x_j)$ zusammengesetzt: $h_i(x)=\bar{h}_i(h_{i_1}(x_1),...,h_{i_k}(x_k))$ | ||||
| - lokale Hashfunktionen $h_{i_j}$ ergeben jeweils Bitvektor der Länge $z_{i_j} +1$:$h_{i_j} : D_j\rightarrow \{0,..., z_{i_j}\}, j\in\{1 ,..., k\}$ | ||||
| - $z_{i_j}$ sollten möglichst gleich groß sein, um die Dimensionen gleichmäßig zu berücksichtigen | ||||
| - Kompositionsfunktion $\bar{h}_i$ setzt lokale Bitvektoren zu einem Bitvektor der Länge $i$ zusammen: $\bar{h}_i:\{0,...,z_{i1}\times ...\times\{0,..., z_{i_k}\}\rightarrow\{0,...,2^{i+1}-1\}$ | ||||
| - ausgeglichene Länge der $z_{i_j}$ wird durch folgende Festlegung bestimmt, die Längen zyklisch bei jedem Erweiterungsschritt an einer Stelle erhöht: | ||||
|     $$z_{i_j} = \begin{cases} 2^{\lfloor \frac{i}{k}\rfloor +1} -1 \quad\text{ für } j-1\leq (i mod k)\\ 2^{\lfloor \frac{i}{k}\rfloor} -1 \quad\text{ für } j-1 > (i mod k) \end{cases}$$ | ||||
| - Kompositionsfunktion: | ||||
|     $$\bar{h}_i(x)=\sum_{r=0}^i (\frac{(x_{(r mod k)+1} mod 2^{\lfloor \frac{r}{k}\rfloor +1}) - (x_{(r mod k)+1} mod 2^{\lfloor \frac{r}{k}\rfloor})}{2^{\lfloor \frac{r}{k}\rfloor})}) 2^r$$ | ||||
| 
 | ||||
| MDH Veranschaulichung | ||||
|  | ||||
| - verdeutlicht Komposition der Hashfunktion $h_i$ für drei Dimensionen und den Wert $i=7$ | ||||
| - graphisch unterlegte Teile der Bitstrings entsprechen den Werten $h_{7_1}(x_1),h_{7_2}(x_2)$ und $h_{7_3}(x_3)$ | ||||
| - beim Schritt auf $i=8$ würde ein weiteres Bit von $x_2$ (genauer: von $h_{8_2}(x_2)$) verwendet | ||||
| 
 | ||||
| MDH Komplexität | ||||
| - Exact-Match-Anfragen: $O(1)$ | ||||
| - Partial-Match-Anfragen, bei $t$ von $k$ Attributen festgelegt, Aufwand $O(n^{1-\frac{t}{k}})$ | ||||
| - ergibt sich aus der Zahl der Seiten, wenn bestimmte Bits "unknown" | ||||
| - Spezialfälle: $O(1)$ für $t=k$, $O(n)$ für $t=0$ | ||||
| 
 | ||||
| ## Geometrische Zugriffsstrukturen | ||||
| Geometrische Zugriffsstrukturen | ||||
| - große Mengen geometrischer Objekte ($> 10^6$) | ||||
| - Eigenschaften geometrischer Objekte | ||||
|     - Geometrie (etwa Polygonzug) | ||||
|     - zur Unterstützung bei Anfragen: zusätzlich $d$-dimensionales umschreibendes Rechteck (bounding | ||||
|        box) | ||||
|     - nichtgeometrische Attribute | ||||
| - Anwendungsszenarien: Geoinformationssysteme (Katasterdaten, Karten), CAx-Anwendungen (etwa VLSI | ||||
|     Entwurf), ... | ||||
| - Zugriff primär über Geometriedaten: Suchfenster (Bildschirmausschnitt), Zugriff auf benachbarte Objekte | ||||
| 
 | ||||
| Typische Operationen | ||||
| - exakte Suche | ||||
|     - Vorgabe: exakte geometrische Suchdaten | ||||
|     - Ergebnis: maximal ein Objekt | ||||
| - Bereichsanfrage für vorgegebenes $n$-dimensionales Fenster | ||||
|     - Suchfenster: $d$-dimensionales Rechteck (entspricht mehrdimensionalem Intervall) | ||||
|     - Ergebnis sind alle geometrischen Objekte, die das Suchfenster schneiden | ||||
|     - Ergebnisgröße parameterabhängig | ||||
| - Einfügen von geometrischen Objekten | ||||
|     - wünschenswert ohne globale Reorganisation! | ||||
| - Löschen von geometrischen Objekten | ||||
|     - wünschenswert ohne globale Reorganisation! | ||||
| 
 | ||||
| Nachbarschaftserhaltende Suchbäume | ||||
| - Aufteilung des geometrischen Bereichs in Regionen | ||||
| - benachbarte Objekte wenn möglich der selben Region zuordnen | ||||
| - falls dieses nicht geht, diese auf benachbarte Regionen aufteilen | ||||
| - Baumstruktur entsteht durch Verfeinerung von Regionen in benachbarte Teilregionen | ||||
| - Speicherung von Objekten erfolgt in den Blattregionen | ||||
| - Freiheitsgrade | ||||
|     - Form der Regionen | ||||
|     - vollständige Partitionierung oder Überlappung durch die Regionen | ||||
|     - eindeutige Zuordnung von Objekten zu Regionen oder Mehrfachzuordnung | ||||
|     - Speicherung und Zugriff über Originalgeometrie oder über abgeleitete Geometrie für Objekte | ||||
|     - Grad des Baumes & Organisationsform | ||||
| 
 | ||||
| Mehrstufige Bearbeitung geom. Anfragen | ||||
|  | ||||
| 
 | ||||
| Geom. Baumstruktur: BSP-Baum | ||||
| - Binary Space Partitioning: schrittweises binäres Teilen des Datenraums | ||||
|  | ||||
| 
 | ||||
| Realisierungsvarianten | ||||
| | Alternative | Baumstrukturen | | | | ||||
| | --- | --- | --- | --- | | ||||
| | | BSP-Baum | R-Baum | R+-Baum | | ||||
| Regionenform | konvexe Polygone |Rechtecke| Rechtecke| | ||||
| Teilregionen |vollständig |unvollständig |unvollständig| | ||||
| Überlappung |nein |ja |nein| | ||||
| ausgeglichen |nein |ja |ja| | ||||
| 
 | ||||
| R-Bäume | ||||
| - R-Baum: Verallgemeinerung des B-Baum-Prinzips auf mehrere Dimensionen | ||||
|     - Baumwurzel entspricht einem Rechteck, das alle geometrischen Objekte umfasst | ||||
|     - Geo-Objekte werden durch ihre umschließenden Rechtecke repräsentiert | ||||
|     - Aufteilung in Regionen erfolgt in nichtdisjunkte Rechtecke | ||||
|     - Jedes Geo-Objekt ist eindeutig einem Blatt zugeordnet | ||||
| - Regionenaufteilung durch Rechtecke im R-Baum | ||||
|      | ||||
| - Baumstruktur für R-Baum | ||||
|      | ||||
| 
 | ||||
| Probleme mit R-Bäumen | ||||
| - gegebenes Rechteck kann von vielen Regionen überlappt werden, es ist aber genau in einer Region gespeichert | ||||
| - auch Punktanfragen können eine Suche in sehr vielen Rechteckregionen bedeuten | ||||
| - Ineffizient bei exakter Suche (exakte Suche auch bei Einfügen und Löschen notwendig!) | ||||
| - Probleme beim Einfügen | ||||
|     - Einfügen erfordert oft Vergrößern von Regionen (aufwärts propagiert) | ||||
| 
 | ||||
| Vergrößern beim Einfügen | ||||
|  | ||||
| 
 | ||||
| R+-Bäume | ||||
| - R+-Bäume: Aufteilung in Teilregionen disjunkt | ||||
| - Jedem gespeicherten Punkt des geometrischen Bereichs ist eindeutig ein Blatt zugeordnet | ||||
| - In jeder Baumebene ist einem Punkt ebenfalls maximal ein Rechteck zugeordnet -> eindeutiger Pfad von der Wurzel zum speichernden Blatt | ||||
| - ‘Clipping’ von Geo-Objekten notwendig! | ||||
|      | ||||
|      | ||||
| 
 | ||||
| Probleme mit R+-Bäumen | ||||
| - Objekte müssen in mehreren Rechteckregionen gespeichert werden (clipping) - erhöhter Speicher- & Modifikationsaufwand | ||||
| - Einfügen von Objekten erfordert möglicherweise Modifikation mehrerer Rechteckregionen | ||||
|      | ||||
| - Einfügen kann in bestimmten Situationen unvermeidbar zu Regionenaufteilungen führen | ||||
|      | ||||
| - Regionenmodifikationen haben Konsequenzen sowohl in Richtung Blätter als auch in Richtung Wurzel | ||||
| - obere Grenze für Einträge in Blattknoten kann nicht mehr garantiert werden | ||||
| 
 | ||||
| Rechteckspeicherung durch Punktdatenstrukturen | ||||
| - Probleme bei ausgedehnten Geometrien -> Entartung | ||||
| - Nutzung "robuster" mehrdimensionaler Indexstrukturen (z.B. Grid-File) durch Abbildung von Rechtecken auf Punkte möglich? | ||||
| 
 | ||||
| Punktdatenstrukturen | ||||
| - Rechteckspeicherung durch Punktdatenstrukturen | ||||
|     - Transformation von ausgedehnten Objekten (mehrdimensionale Rechtecke) in Punktdaten | ||||
|     - Transformation bildet $d$-dimensionale Rechtecke auf Punkte im $2d$-dimensionalen Raum $R^{2d}$ ab | ||||
|     - $d$-dimensionale Rechteck: $r=[l_1, r_1]\times ...\times [l_d, r_d]$ | ||||
| - Eckentransformation | ||||
|     $p_r = (l_1, r_1,..., l_d, r_d) \in R^{2d}$ | ||||
|     pro Intervall als Koordinaten: obere Schranke, untere Schranke | ||||
| - Mittentransformation $p_r =(\frac{l_1+r_1}{2}, \frac{r_1-l_1}{2},...,\frac{l_d+l_r}{2},\frac{r_d-l_d}{2})\in\mathbb{R}^{2d}$ | ||||
|     pro Intervall als Koordinaten: Mittelpunkt, halbe Breite | ||||
| 
 | ||||
| Eckentransformation | ||||
|  | ||||
| 
 | ||||
| Mittentransformation | ||||
|  | ||||
| 
 | ||||
| Suchfenster | ||||
|  | ||||
| 
 | ||||
| Grid-File-Degeneration | ||||
|  | ||||
| 
 | ||||
| ## Approximierende Verfahren | ||||
| Approximierende Verfahren | ||||
| - insbesondere für hochdimensionale Daten | ||||
| - pro Tupel einen approximierenden Bit-Code mit nur wenigen Bits pro Dimensionen | ||||
|        - beispielsweise ein Grid mit jeweils $2^k$ Bit pro Dimension | ||||
|        - ordnungserhaltend wenn die Bits geeignet gewählt werden | ||||
|        - adressiert werden die Zellen in denen ein Punkt liegt | ||||
|        - Nutzung zur Nachbarschaftssuche in hochdimensionalen Räumen | ||||
| - VA-File von Weber et al. | ||||
|     - ersetzt Durchlauf über alle Punkte durch Durchlauf über alle Approximationswerte zur Vorauswahl von Kandidaten | ||||
| 
 | ||||
| VA-File | ||||
|  | ||||
| 
 | ||||
| Zusammenfassung | ||||
| - Bitmap-Indexe | ||||
| - Digital- und Präfixbäume | ||||
| - Mehrdimensionale Verfahren | ||||
| - Geometrische Zugriffsstrukturen | ||||
|  | ||||