Record Manager

17
Record Manager Andreas Bräu, Martin Salzbrenner

description

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 - PowerPoint PPT Presentation

Transcript of Record Manager

Page 1: Record Manager

Record Manager

Andreas Bräu, Martin Salzbrenner

Page 2: Record Manager

Record Manager - Übersicht

● Datenstrukturen– Freispeicherverzeichnis– Datenseiten

● Record Manager– Funktionen

● Record Iterator● Record

Page 3: Record Manager

Freispeicherverzeichnis

● currentEntries momentan nicht in Benutzung● 2043 Einträge pro FSI-Seite bei 4kB

Seitengröße

pageId pageType

currentEntries

freeSpace freeSpaceBlockfreeSpace freeSpaceBlockfreeSpace freeSpaceBlock

...freeSpace freeSpaceBlock

Page 4: Record Manager

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

Page 5: Record Manager

Datenseiten

● 255 Records pro Seite● freeSpace, biggestFreeBlock jeweils genaue

Angabe der verwendeten Bytes● TID Konzept (tableId, pageId, slotId)

Page 6: Record Manager

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

Page 7: Record Manager

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

Page 8: Record Manager

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

Page 9: Record Manager

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

Page 10: Record Manager

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

Page 11: Record Manager

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 │││└---------------------------------------------------------------------------------------------------┘│└-------------------------------------------------------------------------------------------------------┘

Page 12: Record Manager

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 │└-------------------------------------------------------------------------------------------------------------------------┘

Page 13: Record Manager

RecordIterator

● Sperrung der Seiten erfolgt Zug um Zug● getRecordIterator (im RecordMgr)

– sucht nach erstem Record der Tabelle– Festlegung erster Record

tableId segmentId

firstPage currentPage

firstSlot currentSlot

bufferMgr recordMgr

firstRecordRead

Page 14: Record Manager

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)

Page 15: Record Manager

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

Page 16: Record Manager

Record

● Record wird bei erstem Gebrauch neu angelegt

● später Wiederverwendung möglich– nur rawData wird zerstört und neu angelegt

TupleId

rawDataTupleIdSet

rawDataLength

allocDataLength

Page 17: Record Manager

Record

● getTupleId, getRecordData, getLength, getBufferLength– öffentliche Funktionen

● setData, setTupleId– private Funktionen, RecordManager darf diese

nutzen● Veränderung der Recorddaten nur über

Konstruktor oder setData