简易DBMS

这是前两天做的数据库实验,模拟DBMS的数据操作,实现File Manager、Buffer Manager、Storage Manager三个模块的功能。

总的来说是File Manager接受应用程序传递来的元组,并以Frame形式交给Buffer Manager,后者通过替换算法,将Frame转换为Block(Page)形式,转交给Storage Manager,最后由Storage Manager负责数据库文件的读写操作。

用到的主要的C/C++函数是关于内存拷贝的:

     /*
     *  @ Smart Wong USTC SSE
     *  下面这段代码是查找可用Frame时缓冲区满用到的
     *  函数形式: int Buffer_Manager::GetAvailFrame(int needsize, Frame& fr)
      
*/

    
//  最后一页大小不够了,要创建新的
    
//  创建新的
    
//  create a new block in buffer
    PageHead ph;
    ph.tuplenum 
=   0 ;
    memcpy(data_buffer,
& ph, sizeof (PageHead));
    
//  create new frame
    fr.free_flag  =   true ;
    fr 
=  blk_info_table[ 0 ];
    fr.page_id 
=  m_str.GetNewPageID();
    fr.dirty 
=   0 ;
    fr.frame_id 
=  blk_info_table.size() + 1 ;
    fr.free_size 
=  _BLOCK_SIZE  -   sizeof (PageHead);
    fr.used_size 
=   0 ;
    fr.size 
=   sizeof (Frame);
    fr.record_num 
=   0 ;
    fr.data 
=  data_buffer + _BLOCK_SIZE;
    Frag frag;
    frag.size 
=  _BLOCK_SIZE  -   sizeof (PageHead);
    frag.fr_offset 
=  _BLOCK_SIZE;  //  =================== 相对偏移量
    fr.free_frag_table.clear();
    fr.free_frag_table.push_back(frag);
    fr.r_offsetTable.clear();
    
//  create a new page in DBFile
    m_str.IncreasePages();

先写这么多吧!以后再补。

你可能感兴趣的:(简易DBMS)