kapitel 6 n.
Download
Skip this Video
Loading SlideShow in 5 Seconds..
Kapitel 6 PowerPoint Presentation
Download Presentation
Kapitel 6

Loading in 2 Seconds...

play fullscreen
1 / 150
sonia-roy

Kapitel 6 - PowerPoint PPT Presentation

90 Views
Download Presentation
Kapitel 6
An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.

- - - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript

  1. Kapitel 6 Zugriffsschicht: Satzzugriffsstrukturen

  2. Gegenstand des Kapitels Datenmodell Performanz Datentypen: • Satzmengen Operatoren: • Operatoren auf Mengen Mengenorientiertes Datenmodell Anfragebearbeitung Optimaler Einsatz der logischen Ressourcen Datentypen: • Sätze und Satzmengen Operatoren: • Operatoren auf Sätzen Satzorientiertes Datenmodell Satz- u. Satzmengenverwaltung Vorschau auf zukünftig benötigte Daten Datentypen: • phys. Zugriffsstrukturen auf Sätze Operatoren: • seq. Durchlauf, gezielte Suche Satzzugriffsstrukturen Zugriffsschicht Vermeiden nicht aktuell benötigter Daten Transparenter homogener Speicher Datentypen: • Seite = feste Anzahl von Bytes • Segment = var. Anzahl von Seiten Operatoren: • Anforderung/Freigabe von Seiten • Segmente anlegen/öffnen/schließen Hauptspeicherseiten u. Segmente Segment- u. Pufferverwaltung Bevorratung von Daten im Hauptspeicher (rechtzeitige Bereitstellung vor Benutzung) Dateien Datentypen: • Block = feste Anzahl von Bytes • Datei = variable Anzahl v. Blöcken Operatoren: • Dateien anlegen/öffnen/schließen • Lesen/Schreiben von Blöcken Schneller Transport zwischen Haupt- und Hintergrundspeicher Dateiverwaltung Speicherstruktur Geräteschnittstelle Geräte-E/A

  3. Datenmodell Derselbe Satz kann mehreren Zugriffstrukturen angehören Performanter Zugriff Physische DB (satzorientiert) enthält▶ Zugriffs- struktur enthält▶ Kl. Physischer Datensatz 1.. 1 0.. 0.. 1.. 1.. repräsentiert durch ▼ gespeichert in ▼ 1 1 enthält▶ enthält▶ Physische DB (seitenorientiert) Segment Seite 1 0.. 1 0.. Bei Strukturen mit Gemeinsamkeiten Anordnung Datensätze auf Seiten: Satzverwaltung

  4. Kapitel 6.1 Zugriffspfade

  5. Operatoren (1) Alle Zugriffsstrukturen müssen mindestens folgende Schnittstellenoperationen anbieten: • Einfügen eines Datensatzes in die Zugriffsstruktur, Entfernen eines Datensatzes aus der Zugriffsstruktur. • Sequenzieller Zugriff: Iterieren (scan) über alle Datensätze der Zugriffsstruktur (bspw. Operation first für den Zugriff auf den ersten Datensatz und next für den Zugriff auf den folgenden Datensatz). • Erlaubt das systematische Aufsuchen/Bearbeiten der Datensätze der Zugriffsstruktur.

  6. Operatoren (2) Optional Direkter Zugriff: Jeder Datensatz muss sich anhand eines von anderen Datensätzen unabhängigen Kriteriums bestimmen lassen. • Zugriff anhand Position. • Zugriff anhand eines Schlüsselfelds. Zusätzlich optional: • Sortierung der Datensätze anhand eines Schlüsselfelds und Iteration über die Datensätze in auf- oder absteigender Sortierreihenfolge  sequenzieller Zugriff. • Überprüfung der Eindeutigkeit von Schlüsselwerten. • Zugriff anhand mehrerer Schlüsselfelder. • Optional: Reorganisation der Zugriffsstruktur nach Performanzabfall.

  7. Zugriffspfad • Ziel: Schneller Zugriff auf aktuell benötigte Datensätze • möglichst weit gehendes Vermeiden von Zugriffen auf nicht benötigte Datensätze. • Anzahl der Zugriffe bis zum Erreichen des oder der gesuchten Datensätze ist nicht oder nur sehr schwach abhängig von der Größe der Satzmenge (Skalierbarkeit). • Zugriffspfad: • Abstrakter Begriff zur Beschreibung des Kriteriums, nach dem auf benötigte Datensätze einer Satzmenge zugegriffen wird. • Zugriffsstruktur: • Realisierung einer Satzmenge samt Zugriffspfad. • Primärdaten: Auf der Nutzerebene sichtbarer Anteil an den Datensätzen. • Sekundärdaten: Daten zu den Zugriffspfaden.

  8. Umsetzung und Leistungsbeurteilung • Lösung: • Ballen als Basistechnik. • Zugriffspfad als Vorhersagemodell. • Erfordert gesteuerte Platzierung der Datensätze. • Erreichen des Ziels beurteilt nach mittlerem oder schlechtestem Aufwand = Anzahl der Seitenzugriffe für • das Einfügen von Datensätzen, • das Entfernen von Datensätzen, • das Auffinden von Datensätzen, • das Ändern von Datensätzen.

  9. Beispiele für Zugriffspfade

  10. Kapitel 6.2 Ballen

  11. Grundgedanke • Ziel: Minimierung der Zahl der Seitenzugriffe bei erschöpfendem Aufzählen (Iterieren). • Ansatz Ballen (auch: Bündeln, engl.: clustering): Ablage von gemeinschaftlich benötigten Datensätzen auf der selben Seite  Mehrere Datensätze mit 1 Seitenzugriff. • Geballte Seiten werden nicht selbst noch einmal geballt. • Eigener Zugriffspfad auf Seitenebene, z.B. Verkettung der Seiten oder Nummern aller Seiten auf der ersten Seite.

  12. Geballte Listen Speicherung entsprechend geforderter Reihenfolge Liste aller Seiten P123 P204 P317 P123 P204 P317 4 32 Satz 6 5 22 5 24 Satz 1 64 Satz 10 12 Satz 2 Satz 7 24 Satz 11 Datensätze dieser Seite 28 Satz 3 8 Sat 8 Sa 20 z 12 16 Satz 13 Länge des Datensatzes tz 4 24 Satz 5 Satz 8 8 8 Satz 9 Satz 14 Freispeicher am Ende der Seite

  13. Unsortierte geballte Listen • Einfügen eines Datensatzes: • Position beliebig: Es wird die letzte Seite ausgewählt oder die erste Seite, die genügend freien Speicherplatz besitzt. • Position nach Eingangsreihenfolge: Es wird die letzte Seite ausgewählt. • Sequenzielle Zugriffe auf die Datensätze erfolgen entsprechend ihrer physischen Reihenfolge. • Direkte Zugriffe über die Position sind möglich, sofern im Kopf der ersten Seite die Nummern aller Seiten samt Satzanzahl vermerkt sind. • Modifikationen mit Satzverlängerung in der Mitte einer Zugriffsstruktur kann u.U. Verschiebungen von Datensätzen zur Folge haben. Diese können bei „Position nach Eingangsreihenfolge“ zahlreiche Seiten betreffen.

  14. Sortierte geballte Listen • Wertbasierter Zugriff auf Datensätze: • Suche eines Datensatzes kann durch Binärsuche erfolgen, sofern in der ersten Seite die Nummern der Seiten sortiert vermerkt sind. • Ansonsten muss im Mittel die Hälfte der Datensätze besucht werden; aufgrund der Ballung benötigt man hierzu jedoch nur N / (2B) Seitenzugriffe, wobei N die Anzahl der Datensätze und B die mittlere Anzahl von Datensätzen pro Seite (Blockungsfaktor) ist. • Vorteile auch bei relationalen Operatoren, für die es bei Sortierung besonders effiziente Algorithmen gibt: • Join-Operation. • Filterung einer Datei (Selektion von Datensätzen, die ein Selektionsprädikat erfüllen).

  15. Sortierte geballte Listen Einfügen eines Datensatzes: • Es wird anhand des Sortierkriteriums die Seite ermittelt, in die der Datensatz eingefügt werden soll. • Falls auf der Seite genügend freier Platz ist, wird der Datensatz eingefügt. Falls nicht, wird untersucht, ob die Vorgänger- oder Nachfolgerseite genügend Platz hat. Ist dort auch kein Platz vorhanden, wird eine neue Seite allokiert und in die Liste eingefügt. • Die Seiten können entweder soweit wie möglich gefüllt werden, oder beim initialen Anlegen jeder Seite wird ein bestimmter Anteil (0) freigelassen, um (über eine gewisse Zeit) das Einfügen neuer Datensätze und das Vergrößern der Datensätze auf der Seite zu beschleunigen.

  16. alter Knoten neuer Knoten Sortierte geballte Listen Einfügen eines Datensatzes: Beispiel mit 0 0,5: • Neuverteilung der Sätze auf übergelaufenen und neu allokierten Satz. • Bei Seitenverkettung geringer Aufwand, um neue Seite an der richtigen Stelle einzufügen. S1 < S2< … < Sk < Sk+1 < … < S2k Sneu S1 < S2< … < Sk Sk+1<… < Sneu< … < S2k

  17. Sortierte geballte Listen Entfernen eines Datensatzes: Gebe minimalen Füllgrad min (0,5) für die Seiten vor. • Falls nach Entfernen Füllgrad min fertig. • Andernfalls Knoten-Unterlauf: • Es wird versucht, Datensätze aus einer der Nachbarseiten in den Knoten mit Unterlauf zu verschieben. • Misslingt, wenn für beide Nachbarseiten =min. • In diesem Fall wird die Unterlauf-Seite mit einer ihrer Nachbarseiten verschmolzen. • Die frei werdende Seite wird an die Seitenverwaltung zurückgegeben.

  18. Eingebetteter Zugriffspfad • Aufgabe: Erschöpfendes Aufzählen nach Position, wenn die physische Satzablage durch Ballen nach einem anderen Zugriffspfad bereits festliegt. • Lösung: Eingebetteter Zugriffspfad: Zugriffspfad ist unmittelbarer Bestandteil der Datensätze. • Er wird dort durch Stellvertreter für die Datensätze repräsentiert. • Datensätze erhalten spezielle Felder mit Verweisen auf die Vorgänger / Nachfolger in der Ordnung. • Optionen bei der Verkettung: • Einfache Verkettung: Nur ein Zeiger auf Nachfolger. • Doppelte Verkettung: Zeiger auf Vorgänger und Nachfolger. • Ring: Letzter Datensatz verweist wieder auf den ersten Datensatz, bei doppelter Verkettung verweist Vorgängerzeiger des ersten Datensatzes auf den letzten.

  19. Kopf Liste 1 Kopf Liste 2 P123 P204 P317 Satz 1 Satz 2 Satz 3 Zusätzliche eingebettete Zugriffspfade Aufprägen beliebig vieler zusätzlicher Zugriffspfade • Bei einer Multiliste enthalten die Datensätze eine Kettungsstruktur für jede Ordnung der Datensätze außerhalb der Ballung.

  20. Kapitel 6.3 Assoziativer Zugriff durch Adressrechnen

  21. Grundgedanke • Ziel: Direktzugriff nach Schlüsselwert unter Vermeiden jeglichen weiteren Zugriffs. • Lösung Assoziativer Zugriff • Berechnung der Satzadresse aus Inhaltsbeschreibung.

  22. Kapitel 6.3.1 Hash-Funktion

  23. Hashverfahren: Grundprinzip • Transformation eines kennzeichnenden Wertes (Schlüssel) in eine intern kontrollierte, logische Adresse. • Die Transformationsfunktion wird als Hash-Funktion bezeichnet. • S: Schlüsselraum (Menge aller möglichen Schlüsselwerte einer Satzmenge). • N: Intervall der natürlichen Zahlen von 1 bis n (logischer Adressbereich). • h: S N Hash-Funktion total.

  24. Hashverfahren im Hauptspeicher • Mit dem aus dem Schlüssel berechneten Hashwert kann – im Idealfall – direkt ohne weitere Hilfsstrukturen auf den gesuchten Datensatz zugegriffen werden. • Abweichung vom Idealfall: Sei Ktdie Menge der zu einem Zeitpunkt t benutzten Schlüssel • Kt S, |Kt| |S| • Wirtschaftlich nur N  |Kt| • Zudem starke Ungleichverteilung von Kt in S möglich. • Dann ist h nicht injektiv: k, k' Kt sind synonymh(k) = h(k') • Kollision: Aufeinandertreffen synonymer Schlüssel. • Zahlreiche Verfahren unterschiedlicher Leistungsfähigkeit zur Kollisionsbehandlung bekannt.

  25. Hashverfahren bei DBS • Gute Speichernutzung: Mehrere Synonyme pro Seite  Synonyme werden unsortiert, Position beliebig geballt. • Daher: N: Intervall von Seitennummern; h(k): Seite für Datensätze mit Schlüsselwert k. • Hier Kollision: k und k' sind synonym, und h(k) ist bereits voll. • Ziel: Anzahl der Seitenzugriffe nahe 1. Daher auch hier Kollisionen unerwünscht. • Gesucht: Hash-Funktion, die stets eine gute Ausnutzung des Speicherraums N und eine gleichförmige Seitenbelegung garantieren soll. • Aus wertbasierter Satzmengensicht: gestreute Satzplatzierung.

  26. Hash-Funktion Divisionsrestverfahren (Restklassenbildung): • k S: Bitdarstellung als ganze Zahl interpretiert • h(k) = kmodq, q größte Primzahl  |N| • Es sollte gelten: • q  a bnc (a, c kleine ganze Zahlen, b Zahlensystem des Rechners), • q soll also nicht nahe einer Potenz des Zahlensystems liegen (z.B. q127), weil sonst die niedrigen Stellen des Schlüssels zu stark ins Gewicht fallen. Faltung: 1. Zerlegung von k in einzelne Bestandteile 2. Deren Verknüpfung additiv, multiplikativ oder logisch 3. Auswahl von t Bitpositionen aus dem Ergebnis, wobei 2t = |N|

  27. Hash-Funktion • Empfohlen: Divisionsrestverfahren, evtl. kombiniert mit Faltung. • Beispiel: Faltung mit XOR und Divisionsrestverfahren modulo 5 • Beispieldatei und Hashwerte für Schlüsselfeld Color: „Schlechte“ Wahl von q!

  28. Hash-Funktion Einige weitere Verfahren: • Tabellentransformation:Schlüssel wird zunächst byteweise mit Hilfe einer Tabelle mit „zufälligen“ Zeichenkombinationen umgesetzt, um Regelmäßigkeiten zu „zerstören“. • Basistransformation:Schlüssel wird zunächst als Ziffernfolge einer anderen Basis dargestellt (bei num. Schlüsseln!). Danach wieder Divisionsrestverfahren. • Codierungsmethode:Schlüssel mit n Bits Länge wird aufgefasst als Polynom vom Grad n –1 (die Bits stellen die Koeffizienten dar). Polynom wird durch Polynom vom Grad t geteilt. Der verbleibende Rest (Polynom von Grad t –1) wird als Hashadresse interpretiert. Verfahren kann mit Fehlererkennung kombiniert werden. • Zufallsmethode:Erzeugung der Hashadresse über Zufallszahlengenerator, mit Schlüssel als „Saat“.

  29. Kapitel 6.3.2 Statische Hash-Verfahren

  30. Charakterisierung Hash-Bereich Nund damith liegen fest. Forderungen an h: • Gleichförmige Schlüsselverteilung: Jede Seite soll etwa dieselbe Zahl unterschiedlicher Schlüsselwerte als Urbilder besitzen. • Gleichförmige Satzverteilung: Jede Seite soll etwa dieselbe Zahl an Sätzen aufnehmen. Operationen: • Suche: Berechneh(k), evtl. Suche gemäß Kollisionsauflösung. • Einfügen: Berechne h(k), evtl. Kollisionsauflösung. • Löschen: Suche, dann Entfernen, evtl. Bereinigung. • Statische Reorganisation. Problem: Man kennt nurS, nicht aberKt . Bei Ungleichverteilung widersprechen sich die Forderungen.

  31. Kollisionsbehandlung Überlaufbehandlung von Seiten: • Auflösung innerhalb des Hash-Bereichs: • Offene Adressierung: Lineares und quadratisches Sondieren • Auflösung durch getrennte Überlaufbereiche: • Verkettung mit zusätzlichen Seiten außerhalb Hash-Bereich. • Globalen Überlaufbereich vermeiden! • Kollisionsminderung nach Löschvorgängen: • Dynamische Reorganisation: aufwendig, hält aber Zahl der Seitenzugriffe klein. • Setzen von Löschmarken und periodische statische Reorganisation: weniger aufwendig, Zahl der Seitenzugriffe wächst jedoch bis zur Reorganisation.

  32. Beispiel für Überlaufseiten (1) • |N|=5, Seitenkapazität = 3 • Getrennter lokaler Überlaufbereich

  33. Beispiel für Überlaufseiten (2) 0 Seitennummer  20 „red“  80 „blue“ 1  90 „rose“ 2  30 „brown“ 3  40 „black“ 70 „gray“   50 „white“  60 „green“ 4  10 „yellow“

  34. Kollisionsbehandlung Überlaufbehandlung von Seiten: • Auflösung innerhalb des Hash-Bereichs: • Offene Adressierung: Lineares und nichtlineares Sondieren • Auflösung durch getrennte Überlaufbereiche: • Verkettung mit zusätzlichen Seiten außerhalb Hash-Bereich. • Globalen Überlaufbereich vermeiden! • Kollisionsverminderung nach Löschvorgängen: • Dynamische Reorganisation: aufwendig, hält aber Zahl der Seitenzugriffe klein. • Setzen von Löschmarken und periodische statische Reorganisation: weniger aufwendig, Zahl der Seitenzugriffe wächst jedoch bis zur Reorganisation.

  35. Sondieren (1) Für einen Schlüssel k wird überprüft, ob die Seite g(k,0) = h(k) noch über Platz verfügt. Ist dies nicht der Fall, so berechnet man Seiten g(k,1), g(k,2),... und untersucht diese. Beim linearen Sondieren ist g(k,i)=(h(k)+ic) mod q, (c eine Konstante, beispielsweise c=1) Bei hoher Kollisionsrate hoher Aufwand bei Platzierung und Suche!

  36. Sondieren (2) 0 Seitennummer  20 „red“  80 „blue“ 1  90 „rose“ 2  30 „brown“ Kann Quelle von Sekundärkollisionen werden! 3  40 „black“  50 „white“  60 „green“ 4  10 „yellow“ 70 „gray“ 

  37. Anpassbares Sondieren mit Separatoren Ziel: Auch bei Überlauf nur 1 Seitenzugriff. Skizze des Verfahrens (Härder/Rahm, S. 194-199): • Satz mit Schlüssel k habe die Sondierungsfolge g(k,0) (=h(k)), g(k,1), ..., g(k,n). • Erzeuge dazu gleichverteilte Signaturfolge s0(k), s1(k), ..., sn(k). (Signatur: Bitfolge fester Länge). • Jeder Seite j ist dynamischer Separator SEP(j) zugeordnet. • Suche: Sondiere bis si(k)<SEP(g(k,i)). • Seite enthält gesuchten Satz. • Liste der Separatoren im Hauptspeicher, daher erfolgt dort der Vergleich nur 1 Seitenzugriff! • Einfügen: Lokalisiere Seite wie bei der Suche. • Seite nicht voll: Einfügen. • Seite voll: Verschiebe Satz mit höchster Signatur (mehrere bei identischer Signatur, kann auch der aktuelle Satz sein): Kaskadieren möglich! • Setze SEP(g(k,i)) auf niedrigste abgewiesene Signatur.

  38. Bewertung • Wahl von Hash-Algorithmus und Überlaufbehandlung kritisch: • Beeinflusst von konkreter Anwendung (Ladereihenfolge!) und Seitenkapazität  Standardverfahren schwierig! • Such- oder Einfügeaufwand steigt stark an, sobald |Kt| in die Nähe von |N|Seitenkapazität kommt. • Jedoch: Zugriffsfaktor < 1.5 von keiner anderen Zugriffstruktur zu schlagen. Abhilfen: • Große Wahl von |N| schon von Anfang an (Platzverschwendung zu Beginn oder - bei Nichteintreten des erwarteten Wachstums - auf Dauer). • Statische Reorganisation mit völliger Neuverteilung der Adressen (sehr hoher Zeitbedarf, längere Betriebsunterbrechung, Anpassen unzähliger Verweise). • Dynamische Verfahren.

  39. Kapitel 6.3.3 Dynamische Hash-Verfahren

  40. Ziele Skalierbarkeit: Zugriffsfaktor  2 unabhängig von |Kt|. • Zahl der zur Verfügung stehenden Seiten wird kontinuierlich dem aktuellen Bedarf angepasst. • Hoher Belegungsfaktor unabhängig vom Wachstum der Schlüsselmenge.

  41. Lineares Hashing • Grundidee: Statt einer einzigen Hash-Funktion h: S Neine Familie von Hash-Funktionen hi: S {0,...,2iN-1}, i{0,1,2,...}. • Bedingungen (h0(k){0,1,2,..., N-1}): • hi+1(k) = hi(k) für etwa die Hälfte der kS. • hi+1(k) = hi(k)+ 2iN für die andere Hälfte. • Beispielsweise erfüllt für hi(k):=kmod(2iN) • Zu jedem Zeitpunkt sind für einen Hash-Bereich höchstens zwei „benachbarte“ Hash-Funktionen zuständig. • Parameter für die aktuelle Speicherung: • Level lv: „unteres“ i. • Split-Zeiger sp auf die nächste zu teilende Seite.

  42. Lineares Hashing sp lv=0, N=5, max.Blockung=4 0 1 2 3 4 Primärbereich Überlaufseiten h0h0h0h0h0 Vergrößern des Speicherbereiches: Füge neue Seite am Ende an; Verteile Sätze auf Seite sp gemäß hlv+1auf alte und neue Seite; sp:=sp+1; ifsp= 2lvNthen{lv:=lv+1; sp:=0}

  43. 010 sp 0 1 2 3 4 5 h1h0h0h0h0h1 Lineares Hashing sp lv=0, N=5, max.Blockung=4 0 1 2 3 4 Primärbereich Überlaufseiten h0h0h0h0h0

  44. sp 0 1 2 3 4 5 h1h0h0h0h0h1 Lineares Hashing Suchen nach Schlüssel k: s:= hlv(k); ifs < spthen s:= hlv+1(k); // Seite schon gesplittet, daher neue Hash-Funktion anwenden // Beispiel: k=790

  45. Bewertung • Da der Reihe nach gesplittet werden muss, werden u.U. Seiten mit niedrigem Füllgrad gesplittet. • Überlaufseiten werden nicht vermieden und u.U. zu spät beseitigt. • Split-Kriterium liegt nicht fest und belässt Spielräume einschließlich raschem Fortbewegen des Split-Zeigers. • Gesucht: Verfahren, das diese Probleme umgeht.  Bringt ein Index etwas?

  46. Kapitel 6.4 Index-Verfahren

  47. Indexteil mit Wegweisern … Satzmenge physisch gespeichert nach eigenständigem Verfahren (Ballung, Adressrechnung) Grundgedanke

  48. Kapitel 6.4.1 Zeigerfelder

  49. Zeigerfeld P123 P204 P317 Satz 2 Satz 1 Satz 3 • Das Zeigerfeld (Pointer Array) enthält für jeden Datensatz einen Eintrag („Stellvertreter“) mit einem Verweis auf den Datensatz. • Das Zeigerfeld bildet einen eigenen Datensatz. Falls es größer als eine Seite wird, wird es als großer Datensatz verwaltet.

  50. Zeigerfeld • Die Anordnung der Stellvertreter kann unabhängig von der Anordnung der Datensätze gewählt werden  z.B. Aufprägen einer logischen Ordnung auf eine physische (geballte) Ordnung. • Zugriff über Zeigerfeld: Aufwand fest 2 Seitenzugriffe. • Sequenzielle Zugriffe: Aufgreifen der Verweise der Reihe nach. • Direkte Zugriffe über die Position. • Eine (zusätzliche) Sortierung der Datensätze wird durch eine entsprechende Sortierung der Einträge des Zeigerfeldes hergestellt. • Suche eines Datensatzes über Binärsuche auf Zeigerfeld, ansonsten sequenzielles Durchsuchen. • Suche kann beschleunigt werden, wenn zu jedem Verweis der Schlüssel des entsprechenden Datensatzes in dem Zeigerfeld gespeichert wird.