Embedded Metadata

Werbung
Embedded Metadata
B-Tree – Effiziente Organisation des Festplattenzugriffs
29.10.2007
Wiederholung
1. Der Zugriff auf die Festplatte ist verhältnismäßig langsam. Am meisten Zeit benötigt das Bewegen des Lese/Schreibarms (seeking).
2. Hauptspeicher ist schnell aber auch knapp. In der Regel müssen sich mehrere Programme den Hauptspeicher
teilen.
3. Programme können, den ihnen zugewiesenen Speicher selbst verwalten. Die Organisation von Daten im
Hauptspeicher lässt sich mit Hilfe von Datenstrukturen beschreiben.
4. Eine Datenstruktur implementiert ein Organisationskonzept sowie Algorithmen, die mit dem gegebenen Konzept
umgehen können.
5. Datenstrukturen haben häufig Gemeinsamkeiten. Gute Programmbibliotheken erlauben einen abstrakten
vereinheitlichten Zugriff auf Klassen von Datenstrukturen.
6. Datenstrukturen können persistiert werden. Für eine optimale Persistierung spielt die Beschaffenheit der
Datenstruktur eine Rolle.
7. Wenn eine Datenstruktur zu groß wird, können Teile auf den sekundären Speicher ausgelagert werde.
8. Wir können Datenstrukturen benutzen um den Zugriff auf den Sekundärspeicher zu optimieren.
Index
Ein Index besteht aus einer Sammlung von Indexelementen. Ein Indexelement besteht aus einem Paar (KEY,REF). Der
Index kann nach dem KEY-Element durchsucht werden. Das REF-Element referenziert weitere Informationen zu dem
Schlüssel.
Beispiel:
Bibliothekskataloge.
Indexelement(Autor,{Bibliographische Informationen, Standort}).
Indexelement(Titel,{Bibliographische Informationen, Standort})
Beispiel:
Diese Veranstaltung behandelt mehrere Themen. Jedes Thema wird unter einem bestimmten Namen behandelt. Der
Name ist der Schlüssel zu weiterer Information. Diese Veranstaltung ist damit ein Index, über den weitere Informationen
leichter erreichbar gemacht werden sollen.
Ein Index im Hauptspeicher zur Optimierung des Festplattenzugriffs
Idee: Anstatt eine ganze Datei in den Hauptspeicher zu laden, generieren wir einmal einen Index. Jedes Indexelement
hält den Schlüssel, über den wir die Information erreichen wollen und eine Referenz auf die Position in der Datei, an der
die Zugehörigen Daten zu finden sind.
Vorteil: Wir sparen Hauptspeicher und können jede Information auf der Platte direkt anspringen.
Problem: Was passiert, wenn der Index selbst so groß wird, daß er nicht in den Hauptspeicher passt?
Unterstützung großer Indexe mit Hilfe des Sekundärspeichers
Annahmen:
1. Der Index passt nicht in den Hauptspeicher und muss daher teilweise auf dem Sekundärspeicher liegen
2. Der Sekundärspeicher ist so beschaffen, daß er eine relativ lange Zugriffszeit aber eine schnelle Transferrate hat.
Anforderungen:
1. Die Datenbasis darf veränderbar sein. D.h. Der Index muss das Einfügen und Löschen von Indexelementen
unterstützen
Ausgangspunkt Binärbaum
Idee: Wir nehmen einen Binärbaum als Index. Dann überlegen wir uns eine Möglichkeit den Baum auf die Platte zu
speichern und führen dann die Operationen, die wir sonst im Hauptspeicher erledigen direkt auf der Platte aus.
Probleme des Ansatzes
1. Wenn wir immer einen Schlüssel des Baumes von der Platte holen, benötigen wir zu viele Plattenzugriffe.
Binäres Suchen auf der Platte ist zu langsam:
1000 Indexelemente => ~10 seeks
1.000.000 Indexelemente => ~20 seeks
2. Wir benötigen relativ viel Speicherplatz
3. Einfüge- und Löschoperationen in einen Binärbaum benötigen eine Neuanordnung mehrere Elemente.
Optimierung – Paged Tree
Idee: Um die Festplattenzugriffe zu reduzieren. Lesen wir nicht nur einen Knoten des Baums ein, sondern mehrere. Dazu
verspeichern wir den Baum so, daß immer eine feste Anzahl von k Knoten in einem Plattenblock gespeichert wird.
Während wir vorher einen Schlüssel und die Referenzen auf zwei neue Teilbäume mit jedem Plattenzugriff erhalten
haben, erhalten wir nun k Schlüssel und k+1 Referenzen auf neue Teilbäume.
Probleme Paged Tree
1. Der Paged Tree löst zwar im besten Fall das Problem der Zugriffszeit:
Binärbaum mit einem Schlüssel und zwei Refernzen pro seek benötigt für 134 217 727 Elemente = 27 seeks
um zu einem Blatt zu gelangen.
Ein Paged Tree mit 511 Schlüsseln und 512 Referenzen pro seek benötigt für 134 217 727 Elemente = 3
seeks um zu einem Blatt zu gelangen.
2. Allerdings ist es unmöglich den gesamten Baum mit akzeptablem Aufwand balanciert zu halten. Es können
lediglich die einzelnen pages balanciert werden. Wir benötigen einen Algorithmus, der es erlaubt die richtigen
Schlüssel als Wurzelknoten einzusetzen und der ausserdem die Schlüssel sinvoll auf die einzelnen pages verteilt.
3. Das Beispiel zeigt, daß wir sieben Schlüssel und 14 Referenzen benötigen um zwischen acht Teilbäumen zu
unterscheiden.
Andere Möglichkeiten –Multilevel Indexing
Multilevel Indexing
Angenommen wir haben eine ~80 MB große Datei mit 8 000 000 records. Jeder record ist 100 Bytes groß und enthält
einen 10 Byte großen Schlüssel.
Key
| Eigenschaft 1
| Eigenschaft 2
| ...
Key 1
| ....
|
|...
Key 2
| ...
...
Key 8 000 000 |
Multilevel Indexing
Step 1: Die Schlüssel müssen aus der Datei extrahiert und sortiert werden.
Step 2: Annahme wir können 100 Schlüssel mit ihren Referenzen in einen Indexrecord speichern.
Index1
1
(Key, Ref)1 , (Key,Ref)2, ... , (Key, Ref)100
2
(Key,Ref)101, ...
...
...
80000
(Key,Ref...
, (Key,Ref) 200
Wir erhalten eine Datei mit 80 000 records und haben damit die Suche um Faktor 100 verbessert. Wir können nun weiter
optimieren indem wir einen Index auf den Index erstellen. Hierzu nehmen wir jeweils den größten Schlüssel aus jedem
Indexrecord und speichern ihn zusammen mit einer Referenz in einem weiteren Index.
Index 2
1
(Key,Ref)100, (Key,Ref)200, ... ,(Key,Ref) 10000
2
(Key,Ref)10100, (Key,Ref)10200, ... ,(Key,Ref) 20 000
...
800 (Key,Ref...
Multilevel Indexing
Wir können nun einen weiteren Index mit acht records generieren
Index 3
1 (Key,Ref)10 000, (Key,Ref)20 000, ... , (Key,Ref)1 000 000
2 (Key,Ref)1 010 000, ...,
(Key,Ref)2 000 000
...
8 (Key,Ref ...
Schließlich können wir Index mit einem record mit acht Elementen erzeugen
Index 4
1 (Key,Ref)1000 000, ..., (Key,Ref) 8 000 000
Multilevel Indexing
Wenn wir nun eine Information zu einem Schlüssel 27534 suchen können wir folgendermaßen vorgehen:
1. Wir lesen den record aus Index 4 ein und gehen die einzelnen (Key,Ref) Paare durch. Ist unser Schlüssel kleiner
gleich dem Schlüssel eines Indexelementes, so lösen wir die entsprechende Referenz auf.
2. D.h. Wir lesen den record aus Index 3, der durch (Key,Ref)1 000 000 referenziert wird. Beim Indexelement
(Key,Ref)30 000 stoppen wir erneut und lesen den entsprechenden record aus Index1.
3. Usw.
4. In diesem record befindet sich nun das Indexelement mit der Referenz auf die Originaldatei.
Angenommen wir halten Index4 im Haupspeicher, dann können wir mit nur vier seeks einen beliebigen Record von
8 000 000 möglichen identifizieren!
Wir habe sogar in Index 4 noch 92 Plätze frei. Wir könnten also auch die Zwölfache Menge an records erreichen ohne
weitere Plattenzugriffe zu benötigen. Dies entspräche einer Dateigröße von 10GB.
Multilevel Indexing – Probleme
Was passiert, wenn wir einen neuen Schlüssel in den Index einfügen müssen?
Wie viele Plattenoperationen sind notwendig wenn der neue Schlüssel der kleinste im Index ist?
B-Tree - Grundidee
1. Ein Btree ist ein Multilevel-Index, der Veränderungen an der Datenbasis effektiv unterstützt
2. Ein Indexrecord muss nicht voll sein
3. Wenn ein record überläuft, werden die überzähligen Elemente nicht einfach in den nächsten record geschoben,
sondern es wird ein neuer record erzeugt, der die Hälfte der Elemente des übergelaufenen Records erhält.
4. Jedes Indexrecord wird in Form eines Knotens im Baum modelliert.
5. Für jedes record ist eine Höchstzahl (order) und eine Mindestzahl (typisch order/2) von Indexelementen definiert.
6. Der Wurzelknoten muss mindestens zwei Indexelemente enthalten.
7. Die einzelnen Knoten werden über den größten enthaltenen Schlüssel identifiziert.
Begriffe 1:
key promotion
Wenn ein neuer Schlüssel eingefügt wird und er der größte Schlüssel in seinem Knoten ist, muss der Vaterknoten
aktualisiert werden. Dies kann über mehrere level im Baum gehen.
order
Maximal erlaubte Anzahl pro Knoten
B-Tree – Beispiel
CSDTAMPIBWNGURKEHOLJYQZFXV
1. C S D T
B-Tree – Beispiel
AMPIBWNGURKEHOLJYQZFXV
2. A
B-Tree – Beispiel
MPIBWNGURKEHOLJYQZFXV
3. M P I
B-Tree – Beispiel
BWNGURKEHOLJYQZFXV
4. B W, N, G
B-Tree – Beispiel
URKEHOLJYQZFXV
5. U
B-Tree – Beispiel
RKEHOLJYQZFXV
6. R
B-Tree – Beispiel
KEHOLJYQZFXV
7. K, E, H ,O , L, J, Y, Q. Z
B-Tree – Beispiel
FXV
8. F,X, V
Herunterladen