1 / 11
文档名称:

基于API的嵌入式DBMS实验1-4.doc

格式:doc   页数:11
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

基于API的嵌入式DBMS实验1-4.doc

上传人:janny 2011/5/11 文件大小:0 KB

下载得到文件列表

基于API的嵌入式DBMS实验1-4.doc

文档介绍

文档介绍:基于API的嵌入式DBMS实验
:
本实验由卜红建(SA04225136)和夏少华(SA04225135)合作完成。分工如下表:
实验一
实验二
实验三
实验四
卜红建完成的工作
db_open()
db_close()
db_store()
db_createindex()
db_dropindex()
NestedLoopJoin()
锁管理器
夏少华完成的工作
db_firstkey()
db_nextkey()
db_print()
db_indexscan()
IndexJoin()
锁管理器
:
在本课程实验中,我们将建立一个简单的基于API的嵌入式DBMS(姑且命名为ADB)。ADB以API库形式嵌入到应用程序中运行,所有DBMS操作均以API函数方式实现。实际上就是做一个手机电话簿后台数据库系统,以及如何实现这个电话薄的查找,删除,和插入等工作,并且具有并发锁事务管理等扩展功能。该数据库可以广泛应用于手机/PDA等嵌入式应用中。
本软件系统是基于C++构建的,因为没有用到特别的硬件支持,也不需要特别的驱动程序。中断除了系统的正常中断外,还需要注意事务管理的问题,当由于异常而必须中断时,需要将用户的操作当成一个事务来处理,这需要一些支持,可以调用软件中的事务管理功能来实现这一要求。
:
:
存储管理:
记录都以“KEY+DATA”方式表示,为固定格式变长记录(Fixed Format and Variable Length)。记录由两部分构成,可理解为两个字段。因此不需要保存数据库模式,因为所有数据库的模式都是一样的。KEY与DATA都以字节流(byte string)存储。
数据库块大小为8KB,记录不允许跨块存储。记录在数据文件无序组织,为数据文件建立密集索引.
页管理:
数据库初始分配一页,(初始为页块的大小)存入索引文件的第一块。
打开数据库:
输入所要打开的数据库名,打开该数据库,若它不存在,则创建以该数据库名为名的数据库;若存在,则将数据库的初始内容与索引读进内存,输入相应的操作对数据库进行读写.
插入记录:
扫描每页的剩余空间信息,若扫描的当前页能插入,,分配新的一页,,调整该页的剩余空间信息与页数,并更新索引.
删除记录:
在索引中找到关键字所在的页号,从硬盘读入此页到内存,删除关键字所对应的记录,,此页剩余空间信息等于页块的大小,则收回此页,将此页后的每一页前移一页,删除记录的索引,并调整移动页中的记录的索引.
:
①DBT类,用于表示块中记录的结构:
DBT类如下:
class DBT
{ public:
string data; //字节流
int size; //字节流长度
char *buff;// 用于后面的char*()函数;
DBT();
DBT(string& getdata,int& getsize);
DBT(string& getdata);
string getstring();
int stringsize();
int totalsize();
DBT operator=(DBT& object);
DBT operator=(string& object);
friend ostream& operator<<(ostream& stream,DBT& object);
friend istream& operator>>(istream& stream,DBT& object);
int operator==(DBT& object);
operator char*();
};
②DB类,用于表示数据库的属性与操作
DB类可以简单表示如下:
class DB
{public:
int pagesize;//数据库块大小,8KB
int pagecondition[11];
int pageno;//数据库现有的页数,初始分配一页
int metapage; //数据库首页号
char buff[100];
char indexbuff[100];
DBT my_key;//当前记录的key
DBT my_data;//当前记录的data
int mykeyblock;//当前记录的key的块号
int mykeyoffset;//当前记录的data的偏移
string dbna