1 / 17

Record Manager

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

eman
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. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Andreas Bräu, Martin Salzbrenner Record Manager

  2. Record Manager - Übersicht • Datenstrukturen • Freispeicherverzeichnis • Datenseiten • Record Manager • Funktionen • Record Iterator • Record

  3. Freispeicherverzeichnis • currentEntries momentan nicht in Benutzung • 2043 Einträge pro FSI-Seite bei 4kB Seitengröße

  4. 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

  5. Datenseiten • 255 Records pro Seite • freeSpace, biggestFreeBlock jeweils genaue Angabe der verwendeten Bytes • TID Konzept (tableId, pageId, slotId)

  6. 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

  7. 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

  8. 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

  9. 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

  10. 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

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

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

  13. RecordIterator • Sperrung der Seiten erfolgt Zug um Zug • getRecordIterator (im RecordMgr) • sucht nach erstem Record der Tabelle • Festlegung erster Record

  14. 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)

  15. 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

  16. Record • Record wird bei erstem Gebrauch neu angelegt • später Wiederverwendung möglich • nur rawData wird zerstört und neu angelegt

  17. Record • getTupleId, getRecordData, getLength, getBufferLength • öffentliche Funktionen • setData, setTupleId • private Funktionen, RecordManager darf diese nutzen • Veränderung der Recorddaten nur über Konstruktor oder setData

More Related