Upload
cornelia-gilmore
View
213
Download
0
Embed Size (px)
DESCRIPTION
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
Citation preview
HW3: Heap-File Page
Instructors: Winston Hsu, Hao-Hua ChuFall 2010
This document is supplementary document that was created by referring Minibase Project of Univ. of WisconsinThe slide refers to http://dblab.kaist.ac.kr/Course/minibase/
Architecture of a DBMSQuery
Query Optimization and Execution
DB
Relation OperatorsFile and Access Methods
Buffer ManagementDisk Space Management
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
Page Information
short slotCnt;short freePtr; short freeSpace;short type;PageId prevPage; PageId nextPage; PageId curPage;
Data Area
slot[0]……
record … … …… … …
… ……… …
// -1 if EMPTY SLOTshort length;
// offset from data[0]short offset;
freePtr
insertRecord(case 1)
Page Information
Data Area
slot[0]
…empty
record … …
………
Page Information
Data Area
slot[0]
…Inserted slot
record … …
………
Inserted record… … … …
insertRecord(case 2)
Page Information
Data Area
slot[0]
…
record … …
………
Page Information
Data Area
slot[0]
…Inserted slot
record … …
………
Inserted record… … … …
deleteRecord
Page Information
Data Area
slot[0]
…
record …
…Removed slot
… …
…
Page Information
Data Area
slot[0]
…
record …
…empty…
……Removed
record
exchangeRecord
Page Information
Data Area
slot[0]
…
ABC …
…slot[2]
… ABCDE
…
Page Information
Data Area
………
…
slot[2]slot[0]
ABC…
…ABCDE …
…
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_f10/assignment/hfpage09.tar.gz
• tar -xvvzf hfpage09.tar.gz• make• hfpage• test_driver.C– Test code file