我所实现的B+树是有关于《数据库系统实现》上的B+书算法的实现。利用插入法,我构建出了一个以long型数据作为键值,以Object型数据为指针的B+索引树。
有关我的程序的说明:
(1)元组数量的取值范围的含义是:本程序中我要生成“要建立元组数”那么多个元组(这里我用Student类代替)并写入文件。每个元组的键值是一个随机长整数(不重复),数量的取值范围其实是指“随机生成的键值的最大值”
(2)要建立的元组数顾名思义,也指代B+树的叶节点的数量(因为每个叶都存放一个指向元组的文件指针)[说明:因为我用RandomAccessFile来存储元组,所以元组的文件指针实际上是一个Long型的数字]
(3)每个节点能容纳的键数量--不懂得看看B+树的定义
(4)桶的数量:引入桶的目的是因为可能要生成很多个不重复的键值,要解决不重复的问题,传统的比较方法时间消耗非常大(O(N)的),引入适量的桶可以加快查找比较的时间。我使用HashSet作为桶,以实现快速建立多个不重复的键值。(当然,要是生成键值少的话就不需要很多桶了--关于桶的概念请查阅向关资料)
(5)文本框中的值是我测试使用的初始值,当你点“复位”的时候,将显示我们老师要求的数值
(6)“要查找的键值”指,你输入一个键值,程序将在书中寻找,并在文本框中给出查找路径(打印出所经过的节点的内容),最后给出你所输入的键值在不在者棵树中。
(7)程序在使用时一定要使用我给的bat文件打开,因为这样可以打开控制台(命令行),因为生成后的树中的键值信息和树的层次信息将在命令行显示。
有关的B+树插入知识:
插入原则上是第归的:(1)设法在适当的叶节点中为新建找到空闲空间,如果有的话,就把键值放在哪里,(2)如果在适当的叶节点中没有空间,就把该叶节点分裂成两个,并且把其中的键分到这两个新节点中,使每个新节点有一半或刚好超过一半的键。(3)某一层的节点分裂在其上一层看来相当于是要在这一较高的层次上插入一个新的键-指针对。因此,我们可以在这一较高层次上第归测试用这个插入策略:如果有空间,就插入;反之则分裂这个入节点且继续相熟的高层推进。(4)例外的情况是,如果试图插入键到跟节点中并且跟节点没有空间,就分裂跟节点成两个节点,在更上一层创建一个新的跟节点。这个新的跟节点有两个刚分裂成的节点作为他的子节点。
友情提示:我的所有代码由JB9生成,压缩包中将附工程文件。由于最近在看《重构》,所以代码中有些风格是从里面学的,但是目前还学艺不精,有点不伦不类,请见谅。我的全部代码放在我的邮箱,要用的到那里去下载
gondam_f91@163.com 密码是012401030
如果程序有BUG,或者看官有什么好的建议,欢迎回复,或发邮件到我的邮箱,我会很乐意与你讨论的。