Andreas br u martin salzbrenner
This presentation is the property of its rightful owner.
Sponsored Links
1 / 17

Record Manager PowerPoint PPT Presentation


  • 115 Views
  • Uploaded on
  • Presentation posted in: General

Andreas Bräu, Martin Salzbrenner. Record Manager. Record Manager - Übersicht. Datenstrukturen Freispeicherverzeichnis Datenseiten Record Manager Funktionen Record Iterator Record. Freispeicherverzeichnis. currentEntries momentan nicht in Benutzung

Download Presentation

Record Manager

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


Andreas br u martin salzbrenner

Andreas Bräu, Martin Salzbrenner

Record Manager


Record manager bersicht

Record Manager - Übersicht

  • Datenstrukturen

    • Freispeicherverzeichnis

    • Datenseiten

  • Record Manager

    • Funktionen

  • Record Iterator

  • Record


Freispeicherverzeichnis

Freispeicherverzeichnis

  • currentEntries momentan nicht in Benutzung

  • 2043 Einträge pro FSI-Seite bei 4kB Seitengröße


Freispeicherverzeichnis1

Freispeicherverzeichnis

  • Seitennummern werden implizit mitgeführt

  • Funktionen zur Manipulation des FSI:

    • addFsiPage(...)

    • addFreeSpaceInventoryEntry(...)

    • editFreeSpaceInventoryEntry(...)

  • Abfrage des FSI:

    • findFreeSpaceInventoryEntry(...)

    • findFreeMemoryBlock(...)

      • Suche über alle FSI-Seiten, bis entsprechende Seite gefunden


Datenseiten

Datenseiten

  • 255 Records pro Seite

  • freeSpace, biggestFreeBlock jeweils genaue Angabe der verwendeten Bytes

  • TID Konzept (tableId, pageId, slotId)


Funktionen rm

Funktionen RM

  • insert

    • einfügen eines Records in eine angegebene Tabelle

    • die pageId und die slotId der TID wird ermittelt

    • d.h. suchen einer passenden Seite / eines Slot

    • einfügen

    • FSI updaten

  • getNewPageId unperformant

    • ermitteln einer noch nicht vergebenen pageId

    • Schleife pageId solange erhöhen bis eine ungenutzte pageId gefunden

    • derzeit mit findFreeSpaceInventoryEntry

    • >unperformant für jede pageId einzeln


Funktionen rm1

Funktionen RM

  • freeAvailableSpaceInPage

    • berechnen des freien Speichers auf einer Datenseite

    • Summe des PageHeader und der Länge der Records

    • wenn 255 Records in Seite, dann wird der freie Speicher auf 0 gesetzt

  • findLargestFreeBlockInPage

    • ermitteln des größten freien Blockes einer Seite und dessen Offset

    • ordnen der Recordslots nach Offset

    • berechnen der freien Zwischenräume


Funktionen rm2

Funktionen RM

  • createTable:

    • neues Segment erstellen

    • und erste FSI-Seite (Seite 0)

  • dropTable:

    • nur durchreichen von oben

  • commit:

    • Schreiben aller veränderten Daten

    • Freigabe aller Sperren

  • rollback:

    • zurücksetzten aller Änderungen

    • Freigabe aller Sperren


Funktionen rm3

Funktionen RM

  • get:

    • springt zu der in TupleId angegebenen Seite

    • sperrt Seite

    • liest Record aus angegebenen Slot

  • remove

    • löschen eines Records

    • im Slotpagearray wird recordLength des zu löschenden Records 0 gesetzt

    • FSI Eintrag aktualisieren


Funktionen rm4

Funktionen RM

  • replace

    • ersetzten eine vorhandenen Records nur möglich, wenn neuer Record kleiner oder gleich lang wie der alte Record ist (kein Verändern der TID nötig)

    • FSI Eintrag aktualisieren

  • showPageContent

    • zeigt die Inhalte der FSI und Datenseiten an


Funktionen rm5

Funktionen RM

┌-------------------------------------------------------------------------------------------------------┐

│┌-----------------------------globaler Pageheader------------------------------------------┐│

││ Seitennummer: 3 -- Seitentyp: DataPage ││

│┌-----------------------------Slot Page Header----------------------------------------------┐│

││Anzahl der Slots auf der Seite: 16 ││

││gesamter freie Speicher der Seite: 3817 ││

││größter freier Block auf der Seite: 3817 ││

││offset des Records: 4076 -- laenge des records: 20 -- slotnummer: 0 ││

││offset des Records: 4056 -- laenge des records: 20 -- slotnummer: 1 ││

││offset des Records: 4036 -- laenge des records: 20 -- slotnummer: 2 ││

││offset des Records: 4016 -- laenge des records: 20 -- slotnummer: 3 ││

││offset des Records: 3996 -- laenge des records: 20 -- slotnummer: 4 ││

││offset des Records: 3987 -- laenge des records: 9 -- slotnummer: 5 ││

││offset des Records: 3978 -- laenge des records: 9 -- slotnummer: 6 ││

││offset des Records: 3969 -- laenge des records: 9 -- slotnummer: 7 ││

││offset des Records: 3960 -- laenge des records: 9 -- slotnummer: 8 ││

││offset des Records: 3951 -- laenge des records: 9 -- slotnummer: 9 ││

││offset des Records: 3942 -- laenge des records: 9 -- slotnummer: 10 ││

││offset des Records: 3933 -- laenge des records: 9 -- slotnummer: 11 ││

││offset des Records: 3924 -- laenge des records: 9 -- slotnummer: 12 ││

││offset des Records: 3915 -- laenge des records: 9 -- slotnummer: 13 ││

││offset des Records: 3906 -- laenge des records: 9 -- slotnummer: 14 ││

││offset des Records: 3897 -- laenge des records: 9 -- slotnummer: 15 ││

│└---------------------------------------------------------------------------------------------------┘│

└-------------------------------------------------------------------------------------------------------┘


Funktionen rm6

Funktionen RM

┌--------------------------------------------------------------------------------------------------------------------------┐

│┌-----------------------------globaler Pageheader-------------------------------------------------------------┐│

││ Seitennummer: 0 -- Seitentyp: FSIPage ││

│└----------------------------------------------------------------------------------------------------------------------┘│

│┌-------------------------------FSI Pageheader-----------------------------------------------------------------┐│

││ currentEntries: 0 -- zur Zeit nicht in Benutzung ││

│└----------------------------------------------------------------------------------------------------------------------┘│

│┌----------------------------------FSI-Tabelle--------------------------------------------------------------------┐│

││ Seite│ GFS │ LFB │ │Seite │GFS │ LFB │ │Seite│ GFS │ LFB │ │Seite│ GFS │ LFB ││

││ 1 │ 8 │ 0 │ │ 2 │ 0 │ 0 │ │ 3 │ 238 │ 238 │ │ 4 │ --- │ --- ││

││ 5 │ --- │ --- │ │ 6 │ --- │ --- │ │ 7 │ --- │ --- │ │ 8 │ --- │ --- ││

││ 9 │ --- │ --- │ │ 10 │ --- │ --- │ │ 11 │ --- │ --- │ │ 12 │ --- │ --- ││

││ 13 │ --- │ --- │ │ 14 │ --- │ --- │ │ 15 │ --- │ --- │ │ 16 │ --- │ --- ││

││ ........ ││

││ 2033│ --- │ --- │ │ 2034│ --- │ --- │ │ 2035│ --- │ --- │ │ 2036│ --- │ --- ││

││ 2037│ --- │ --- │ │ 2038│ --- │ --- │ │ 2039│ --- │ --- │ │ 2040│ --- │ --- ││

││ 2041│ --- │ --- │ │ 2042│ --- │ --- │ │ 2043│ --- │ --- │ │----- │ --- │ --- ││

│└---------------------------------------------------------------------------------------------------------------------┘│

│*GFS = Ges. freier Speicher, LFB = Largest free Block, Angabe in 16-Byte-Blöcken │

└-------------------------------------------------------------------------------------------------------------------------┘


Recorditerator

RecordIterator

  • Sperrung der Seiten erfolgt Zug um Zug

  • getRecordIterator (im RecordMgr)

    • sucht nach erstem Record der Tabelle

    • Festlegung erster Record


Recorditerator1

RecordIterator

  • findNextRecord (im RecordMgr)

    • Suche nach dem nächsten Record

      • keine Ordnung ==> Slots auf Datenseiten werden nacheinander durchgegangen

    • Unterscheidung, ob nach erstem Record gesucht wird

    • jede neu aufgeschlagene Seite wird gesperrt

    • nutzt FSI, um leere Seiten zu überspringen

    • geringe Performance, da viele get/releasePage, Spielraum für Optimierungen (direktes Operieren auf den FSI-Seiten)


Recorditerator2

RecordIterator

  • getNext

    • Suche nach nächstem Record

      • falls vorhanden, Ausgabe dessen, sonst DBJ_NOT_FOUND_WARN

  • hasNext

    • true, falls nächster Record vorhanden, sonst false


Record

Record

  • Record wird bei erstem Gebrauch neu angelegt

  • später Wiederverwendung möglich

    • nur rawData wird zerstört und neu angelegt


Record1

Record

  • getTupleId, getRecordData, getLength, getBufferLength

    • öffentliche Funktionen

  • setData, setTupleId

    • private Funktionen, RecordManager darf diese nutzen

  • Veränderung der Recorddaten nur über Konstruktor oder setData


  • Login