170 likes | 385 Vues
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
E N D
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 • 2043 Einträge pro FSI-Seite bei 4kB Seitengröße
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 • 255 Records pro Seite • freeSpace, biggestFreeBlock jeweils genaue Angabe der verwendeten Bytes • TID Konzept (tableId, pageId, slotId)
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 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 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 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 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 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 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 • Sperrung der Seiten erfolgt Zug um Zug • getRecordIterator (im RecordMgr) • sucht nach erstem Record der Tabelle • Festlegung erster Record
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)
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 wird bei erstem Gebrauch neu angelegt • später Wiederverwendung möglich • nur rawData wird zerstört und neu angelegt
Record • getTupleId, getRecordData, getLength, getBufferLength • öffentliche Funktionen • setData, setTupleId • private Funktionen, RecordManager darf diese nutzen • Veränderung der Recorddaten nur über Konstruktor oder setData