4 自主知识产权数据库--系统实现
4.1 开发环境
目前比较流行的软件开发语言有Java,C#,VB,C,C++等语言。与C语言相比,二者都有较好的可移植性,同时C++是面向对象的程序设计语言,是C语言的一个向上兼容扩充,具有C语言的高效和面向对象语言的快速开发的特点。而与Java,C#或VB等基于虚拟机或解释性的语言相比,虽然它们能够给开发人员带来更快速的开发,但是这种开发的快速却带来了执行效率的大大降低,而数据库是基于系统底层的一项技术,对执行效率有严格的要求,综合考虑运行效率,开发效率和移植性等因素,这里选择C++语言来作为系统实现的首选语言。编译器选择 Microsoft Visual Studio C++ .Net 。
4.2 第一层实现
4.2.1 代码文护与更新
2005届张蓉,曹亚玲同学完成了CreateTable(),InsertOneRecord(),DeleteOneRecord(),FindSomRecord(),UpdateOneRecord(),UpdateSomeRecord(),DeleteSomeRecord(),DeletetOneFiled(),InsertOneFiled()等函数的定义和基本实现。
对CreateTable()进行了部分更新,为第一层添加了几种数据类型(如 short, long, float, double, char),并实现将各字段名及各字段数据类型存入建库信息。
对InsertOneRecord()进行了大量修改,使其能够实现插入记录时,保证数据记录文件中每页的利用率至少为50%。实现思想是这样的:页内记录按照主关键字大小由小到大链式存储,第一级索引中的页头结点中记录了该页的最大关键字。当插入一条记录时,程序先获得待插记录的关键字,并在第一级索引(目前为链式存储页头结点,各页头结点按页关键字大小,由小到大顺序链式存储)中查找并比较待插入的记录的关键字是否小于页中的最大关键字,如果找到待插入关键字小于某页的最大关键字,则将待插入记录插入该页;否则,将待插入记录插入记录页的最后一页,并修改该页的最大关键字。
新增页分裂函数SplitPage()。该函数主要实现页内记录已存储满时,将该页记录分裂成两页存储。实现思想为:先从索引文件中的空页链头中取出一空页(如果没有空页,则在文件尾部新建4空页),然后将满页中按关键字排序的后半段记录存入新页中(页内记录是按关键字由小到大链式存储),最后修改第一级索引链表。
新增函数ReturnAllRows()。该函数实现遍历数据库中的所有记录,与FindSomeRecord()函数类似,提供快速遍历。
第一层实现代码见:FirstLayer.h 和 FirstLayer.cpp 。
4.2.2 B+树索引
完成B+树算法[7][11][13]的实现。将B+树算法封装在类CBPTreeIndex 类中。B+树结点结构的定义为:
typedef struct BPTNode
{
int keyNum; //B+树中关键字个数
long lAddress; //自己节点在索引文件中的位置
long lParent; //父结点在文件中索引的位置
KeyType key[m+1][KSIZE]; //0 空间未用,关键字数组
long lPtr[m+1]; //子树在索引文件位置数组
Record rec[m+1]; //0 空间未用,该数组存储对应关键字,在数据文件中的起始位置
BPTNode() //构造函数
{
keyNum=0;
lAddress=-1;
lParent=-1;
for(int i =0;i<(m+1); i++)
lPtr[i]=-1;
}
}BPTNode,*PBPTNode;
提供以下八个方法对B+索引树进行操作(其他方法为类内部实现,对外隐藏):
bool CreateBPTreeIndex(FILE *_file, long _lIndexStartPos, long _lIndexLength );
//此函数为索引文件创建B+树索引。file:(in) 文件指针,
上一页 [1] [2] [3] [4] [5] [6] [7] [8] [9] 下一页