HW3: Heap-File Page Instructors: Winston Hsu, Hao-Hua Chu Fall 2010 This document is supplementary document that was created by referring Minibase Project of Univ. of Wisconsin The slide refers to http://dblab.kaist.ac.kr/Course/minibase/ Architecture of a DBMS Query Query Optimization and Execution Relation Operators File and Access Methods Buffer Management Disk Space Management DB Minibase • Relational Database Management System (RDBMS) – made by Wisconsin University for educational purpose • Independent implementation of each component is possible – No pain to implementing whole DBMS – Suitable to understand the internal architecture of DBMS • Components – Parser / Optimizer / Query Processor/ Heap file / B+-tree index / Buffer pool manager / Disk space management system Heap-File Page • Simple Heap-File Page Structure – Heap-File Page consists of page information, data area and slot array. – Data area in a Heap-File Page is always compacted. – We assume that the supported record data type is only character. • Operations – – – – Insert / Delete a record in a heap-file page Get a first / next record id Get the data / pointer of a record Get some information HFPage Structure short short short short PageId PageId PageId Page Information record … … … … … … freePtr Data Area // -1 if EMPTY SLOT short length; // offset from data[0] short offset; … slot[0] … … … … … … slotCnt; freePtr; freeSpace; type; prevPage; nextPage; curPage; insertRecord(case 1) Page Information record Page Information … … … … record … … … … Inserted record Data Area empty slot[0] Data Area … … … … Inserted slot slot[0] … … … … insertRecord(case 2) Page Information record Page Information … … … record … … … … … Inserted record Data Area Data Area … … slot[0] … … … slot[0] Inserted slot … … … deleteRecord Page Information Page Information record … Removed record … record … … … Data Area Data Area … … … slot[0] Removed slot … … … slot[0] empty … exchangeRecord Page Information Page Information ABC … … … ABCDE … ABCDE … ABC Data Area Data Area … … … slot[0] slot[2] … … … … slot[0] slot[2] … Return Values of APIs • Status insertRecord(char *recPtr, int recLen, RID& rid); – If there is not enough space for new record, return DONE • Status firstRecord(RID& firstRid); – If there is no record in Page, return DONE • Status nextRecord (RID curRid, RID& nextRid); – If there is no next record in Page, return DONE • Others – if slotNo or pageNo of a record Id and input parameters are not appropriate, return FAIL Other • int HFPage::available_space(void) – sizeof(slot_t) bytes must be reserved for a new slot and cannot be used by a new record. • freePtr specifies the offset of the first free bytes in data[] – Insert from it – Modify it when deleting • Check the output with sample_output – “dumpPage, this: 0x7fffbcf7fa20” is a pointer value. Ignore it. – diff your_output sample_output • If there are any questions, you can post them on ptt.cc / CSIE_DBMS. All You have to do • hfpage.C Try and Test • wget http://mll.csie.ntu.edu.tw/course/database_f 10/assignment/hfpage09.tar.gz • tar -xvvzf hfpage09.tar.gz • make • hfpage • test_driver.C – Test code file