Embedded Metadata

Werbung
Embedded Metadata
Arrays, Listen, Bäume - Datenorganisation im Hauptspeicher
22.10.2007
Konzeptionelle Sicht auf den Hauptspeicher
Applikationen organisieren ihren Speicher selbst
Datenstrukturen: Ein Array
Datenstrukturen: Ein Array – Merkmale
1. statisch.
2. Schnelles kopieren – direkte Abbildung auf den Speicher möglich.
3. Zeitkomplexität für einfache Operationen: konstant – O(1).
4. Speicherkomplexität: feste vorgegebene Kapazität – O(N).
5. Problem: Ein Array kann nicht wachsen, sondern hat immer die Kapazität N.
6. Problem: In ein Array kann nur am Ende eingefügt werden.
Ein Einfügen in die Mitte bedeutet, daß Elemente umkopiert werden müssen
Datenstrukturen: Liste
Datenstrukturen: Liste – Merkmale
1. dynamisch
2. Speicher wird referenziert
3. Zeitkomplexität: in vielen Fällen konstant. Operationen am Ende der Liste können durch doppelte Verkettung
ebenfalls konstant gemacht werden.
4. Speicherkomplexität: dynamisch – kann während der Laufzeit verändert werden
5. Einfügen eines Elementes in die Mitte ist möglich erfordert aber das Durchlaufen der Liste. Die Zeitkomplexität ist
Abhängig von der Anzahl der enthaltenen Elemente.
6. Für jedes Datum muss mindestens eine Speicherreferenz mit verwaltet werden
7. Zur Iteration müssen Referenzen aufgelöst werden
Zwischenüberlegung
Wir wollen die eingegebenen Zahlen in einer Datei auf auf der Festplatte speichern.
Wie ist dies zu tun, wenn wir die Zahlen anschließend wieder
a. in ein Array einlesen wollen
b. in eine Liste einlesen wollen
Vorschlag Array
Variante 1:
8, 398752, 4068783, 3958488, 4431164, 4561760, 4357785, 3688334, 4337803
Variante 2:
anzahl = 8;
elemente = 398752, 4068783, 3958488, 4431164, 4561760, 4357785, 3688334, 4337803;
Variante 3:
<data type=”int” arity=”8”>
398752 4068783 3958488 4431164 4561760 4357785 3688334 4337803
</data>
Vorschlag Liste
Variante 1:
398752, 4068783, 3958488, 4431164, 4561760, 4357785, 3688334, 4337803;
Variante 2:
elemente = 398752, 4068783, 3958488, 4431164, 4561760, 4357785, 3688334, 4337803;
Variante 3:
<data type=”int” arity=”many”>
398752 4068783 3958488 4431164 4561760 4357785 3688334 4337803
</data>
Datenstrukturen: Baum
Datenstrukturen: Baum – Merkmale
1. dynamisch
2. Speicher muss referenziert werden
3. Zeitkomplexität: in balancierten Bäumen kann mit logarithmischem Aufwand gesucht werden.
4. Speicherkomplexität: dynamisch – verändert sich während der Laufzeit
5. Binärbäume speichern die Daten sortiert – gut geeignet zum Suchen
6. Das Einfügen in einen Binärbaum erfordert Vergleichsoperationen
7. Ein Baum kann zur Liste entarten. Die Reihenfolge in der Elemente eingefügt werden ist relevant
Datenstrukturen: Binärbaum – Optimierung
Vorschlag Baum
Variante 1:
4068783,3688334,4431164,398752,4561760,3958488,4357785,4337803;
Variante 2:
Zusammenfassung Datenstrukturen
1. Applikationen bekommen vom Betriebssystem Speicherplatz zugewiesen. Der Speicherplatz wird von den
Programmen selbst organisiert.
2. Es gibt einige allgemeine Datenstrukturen, die wiederkehrende Probleme lösen. z.B. Array, Liste, Binärbaum
3. Zu einer Datenstruktur gehört immer auch ein Set von Methoden. z.B. Einfügen, Löschen, Verschieben, Sortieren,
Suchen, Durchlaufen. Für die einzelnen Operationen können Aufwandsabschätzungen berechnet werden.
4. Eine Programmbibliothek versucht in der Regel einen einheitlichen Zugriff auf die Datenstrukturen zu
gewährleisten. Hierzu können Hilfsklassen (z.B. Iterator) zum Einsatz kommen.
5. Unterschiedliche Probleme erfordern unterschiedliche Datenstrukturen
6. Die Entscheidung für eine Datenstruktur kann Einfluß auf die Art der dauerhaften Verspeicherung der Daten haben
(Persistierung).
7. Datenstrukturen organisieren den Zugriff auf den Hauptspeicher. Wie können sie beim Zugriff auf die Festplatte
helfen?
Unterstützung des Festplattenzugriffs
Scenario: Wir haben eine Datei, die mehr Informationen enthält, als wir in den Hauptspeicher laden können oder wollen.
Ziel: Wir wollen nun im Hauptspeicher einen Suchindex aufbauen, der es uns erlaubt gezielt auf einzelne Records in der
Datei zuzugreifen.
Idee: Wir speichern den Dateioffset zu jedem Record in einer Liste
Optimierung
Problem
Was machen wir, wenn der Index selbst so groß wird, daß er nicht mehr in den Hauptspeicher passt?
Herunterladen