论文部分内容阅读
由于磁盘I/O的不可预测性,内存数据库技术成为了嵌入式实时数据库的最佳选择。因为实时限制的要求和内存不同于磁盘的存储特性,嵌入式实时内存数据库的设计实现与传统的数据库存在较大差别,很多机制需要进行研究和重新设计。目前主流的内存数据库索引结构没有充分利用cache性能。为此,本文分析了一种数字树技术——Judy。Judy具有访问高效、树的高度可预测、结点结构可灵活调整、内存访问次数少等优点。但是Judy的范围查询比较差,因为每次访问一个叶结点之后都要先回溯至上层结点,再向下找到下一个叶结点的入口地址,这样会导致大量cache块的填充,时间开销很大。为了改进Judy的范围查询能力,本文提出了一种新的索引结构——J#树。与Judy相比,J#树通过在叶结点中增加一个前驱指针和一个后继指针,分别指向该结点的前驱结点和后继结点。范围查询时,通过前驱或后继指针可以快速定位下一个要查询的结点,免去了层层回溯的过程,从而有效减少了cache块的填充次数。由于J#树具有优良的时空性能,本文设计了一个基于J#树的嵌入式实时内存数据库——DBSql。DBSql采用了模块化的设计思想,用户可以根据需要对其剪裁。DBSql还提供了两种接口:常用的SQL语句接口和自带的API函数接口。DBSql可以作为一个函数库链接到到应用程序中,以减少进程间的通信开销。DBSql将J#树作为内存数据的组织方式和索引机制。DBSql的其它机制都是以J#树为基础设计的。由于J#树根据结点中关键字数目而选择不同的结构,各个结点的大小比较悬殊。为了节省内存空间,采用按结点大小进行内存分配。作为一个嵌入式实时内存数据库,事务的并发控制和恢复机制非常重要。DBSql采用基于优先级抢占的两段锁协议,以满足实时事务的需要。为了维护数据库的一致性,DBSql采用事务延迟更新策略和模糊检查点策略。基于这些策略,DBSql的恢复机制得到了有效的保障。经过实验测试可知,DBSql具有比较好的存取性能,非常适合作为嵌入式实时内存数据库。