嵌入式内存数据库的内存页面管理调度方法

文档序号:6443785阅读:162来源:国知局
专利名称:嵌入式内存数据库的内存页面管理调度方法
技术领域
本发明涉及一种内存页面管理调度方法,尤其涉及一种针对嵌入式设备空间有限的主存储器进行内存页面逻辑扩展和缓冲管理的方法,属于数据库存储管理技术领域。
背景技术
目前在国内嵌入式内存数据库市场上占主导地位的嵌入式内存数据库产品均为进口的国外数据库产品,譬如Oracle公司的TimesTen, McObject公司的extremedb和 Sybase公司的UltraLite等。由于国外嵌入式内存数据库厂商为了限制核心技术外流,对国内市场只提供最终产品和服务,而对于产品的核心技术资料和源代码进行严密的保护。国内也存在一些嵌入式内存数据库产品,但主要都是针对内存模式开发的纯内存数据库系统,并且都是把磁盘文件作为内存数据库内存镜像的一个备份文件。系统在运行时只可以将内存数据库中被改变的数据备份到磁盘文件中,而不能从磁盘文件动态的加载数据到内存数据库中。这样会导致容量超过内存几个数量级的磁盘空间不能在数据库运行期间被灵活的使用。纯内存数据库的最大限制是创建的数据库大小最大不能超过内存容量的大小。这在内存比较小的嵌入式设备应用中是非常不利的限制,尤其在需要存储多媒体数据时数据库大小很容易超出嵌入式设备内存的容量。在内存数据库中数据存储的基本单位是页面,空闲页面管理的好坏,直接关系到系统性能的高低。在数据量大和数据组织形式多的情况下,表现尤其突出。钟宝荣、袁文亮在《内存数据库中空闲页面管理的方法研究》(《计算机工程与设计》2007年第7期)中介绍了针对内存数据库中空闲页面的两种管理方法可用空间表和位示图法,并进行了详细的论述,描述了两种不同的数据结构,重点对空闲页面的管理策略进行了讨论,对不同系统选择数据库管理提供了有效的参考依据。

发明内容
本发明所要解决的技术问题在于提供一种嵌入式内存数据库的内存页面管理调度方法。为实现上述的发明目的,本发明采用下述的技术方案—种嵌入式内存数据库的内存页面管理调度方法,所述内存数据库的内存空间划分成以页为单位的多个块,且每个页的大小与数据库磁盘文件页的大小完全相同,每个磁盘文件页与内存页建立映射,其特征在于包括以下步骤步骤1 系统获取要读写的数据库文件的偏移量,并进行偏移量与页号映射。步骤2 检测是否有哈希冲突,如果有则进行相应的哈希冲突解决处理;如果没有则进入下一步骤;步骤3 检查内存中是否有可以装载数据的页面如果没有则根据页面调度算法从内存中选择出可以数据交换的内存页;如果有则进入下一步骤;
步骤5 将新的数据内容写到内存页中。通过本发明可以使嵌入式内存数据库既能实现接近于全内存数据库的性能,又可以使数据库的存储容量达到磁盘的数据容量,使嵌入式内存数据库摆脱了嵌入式设备内存资源的限制。并且对用户不透明,无需用户管理。


下面结合附图和具体实施方式
对本发明作进一步的详细说明。图1为本发明的系统框图;图2为页面管理的框图;图3为文件偏移量到页号的映射关系示意图;图4为哈希冲突检测示意图;图5为页面装载时没有空闲页情况的示意图;图6为从空闲链表中删除最久未被使用的页的示意图;图7为更新哈希表并清除无效哈希值的示意图。
具体实施例方式在本发明中,利用了已经被证明了的数据访问的时间局部性原理和空间局部性原理来解决内存空间不足的问题。此局部性原理在操作系统的虚拟内存实现技术中已经被很好的采用,并且经过实验验证了其对解决内存空间不足的有效性。局部性原理是指CPU在访问存储器时,无论是存取指令还是存取数据,所访问的存储单元都趋于聚集在一个较小的连续区域中。时间局部性是指如果一个信息项正在被访问,那么在近期它很可能还会被再次访问。程序循环、堆栈等是产生时间局部性的原因。空间局部性是指在最近的将来将要用到的信息很可能与现在正在使用的信息在空间地址上是临近的。内存数据库就是基于这样的考虑而提出来的。本发明提供一种嵌入式内存数据库的内存页面管理与调度方法。此方法使内存空间作为数据库文件的一部分活跃页面的缓冲区,从而使嵌入式内存数据库可以创建的数据库大小远远超过内存空间的限制。此方法使嵌入式内存数据库既能实现接近于全内存数据库的性能,又可以使数据库的存储容量达到磁盘的数据容量。对于内存有限的嵌入式设备, 此方法可以极大的改善用户可打开和操作的数据库尺寸及处理性能。本发明将系统按功能划分为页面管理部分、页面装载部分和页面调度部分,如图1 所示。页面装载部分又可被划分为文件偏移与页号映射模块、页面加载模块和哈希冲突检测与解决模块这三个模块。其中页面管理部分在数据库启动时被调用,用来在内存中分配缓冲区空间,并以页为单位对缓冲区空间进行管理。页面装载部分是在进行数据操作而且此数据所在的页没有在缓冲区中时被调用,其被用来将磁盘文件中的数据页加载到缓冲区中的空闲页中。如果当前要访问的数据页的哈希值已被其他数据页占据并且此页还没有和其他页共享此哈希值,则进行冲突处理。冲突处理模块会给此数据页分配新的内存页,并将此内存页的结构添加到对应冲突链表的头部。页面调度部分是在进行数据页装载并且所有页均已被使用时被调用,其将某页写回数据库文件,以腾出空间读入当前要操作的数据页。 页面调度时,系统找到最近未被使用页作为被替换页,将被替换页写回数据库文件。然后将请求的数据页写入到被替换页,完成页面换出换入。 页面管理部分页面管理部分将内存以页为单位划分成多个页面,并且将磁盘中数据库数据同样以页为单位进行管理;以页面为单位在内存和磁盘之间建立映射关系并使用哈希表管理磁盘页与内存页的映射关系。页面管理部分通过创建一个页数组I^age []来管理所有的内存页,如图2所示。每个页数组都有前驱指针prev和后继指针next,每个页数组对应内存缓冲区中的一个页。其中每个页数组元素保存每个内存页的状态信息。页按使用状态可被分为三种类型空白页、 空闲页和使用页。页面管理部分按照页的使用状态将这三种页链接成相应的空白页链表、 空闲页链表或使用页链表。其中空白页表示没有载入过磁盘文件的数据;空闲页表示已经载入了磁盘文件的数据而页的访问计数为0,即当前没有被使用过;使用页表示已载入了磁盘数据页且访问计数也大于0,即当前在被使用。初始状态时所有的缓冲区的页均为空闲页,由空闲链表管理。 页面装载部分页面装载部分被划分为三个子模块,这三个子模块分别是数据库偏移与页号映射模块、页面加载模块和哈希冲突检测与解决模块。A.文件偏移与页号映射模块页面装载部分通过哈希表存放文件偏移与页号的映射表,实现文件偏移量到页号的映射,如图3所示。哈希表作为一个整型的数组,数组的值代表缓冲区中内存页的页号, 初始值为0。根据文件偏移量计算得到的哈希值作为哈希数组的下标,通过该项的值得到文件偏移量对应的缓冲区页。如图3所示,文件偏移量(地址)得到的哈希值为3,则对应缓冲区中的第3个页。这样就实现了从文件偏移量到缓冲区内存地址间的映射。B.哈希冲突检测与解决模块在文件偏移与页号映射模块进行偏移量与页号的映射时,如果已经有一个或多个偏移量(页)映射为同一个哈希值时,则产生哈希冲突,需要由哈希冲突检测与解决模块进行冲突处理。检测并处理完冲突后,就进行页面装载处理。哈希冲突的检测方法通过文件偏移地址计算出对应的哈希值,通过此哈希值获得对应页的一个冲突链表。如果此链表不为空并且链表中没有一项的偏移地址与要装载页的偏移地址相同,则说明检测到冲突,如图4所示。冲突解决的方法检查当前页的文件偏移地址域是否与文件偏移量相同,如相同说明当前页即为已载入的文件偏移地址所在的页。否则按页的collision域查找冲突链中的下一个页。当下一页的collision域的值为0,说明是冲突页链的最后一个。如果页的文件偏移地址域与要访问的偏移地址仍然不同,说明要访问的偏移地址所在的页没有载入。分配新页,将新页作为冲突链表的第一个节点,并且让当前查找的哈希数组项指向新页的页号。C.页面装载模块在文件偏移与页号映射模块进行偏移量与页号的映射时,得到的内存页,其页标志为没有被装载的情况下,页面装载模块读取磁盘文件上的数据并加载到此内存页中,并将哈希表中此项的加载标志设为已加载。
页面调度部分页面调度模块在有新的页要装载进内存并且在当前已经没有空页的情况下被调用,如图5所示。页面调度的原则是调度最长时间没有被使用的页。具体页面替换过程分为以下几步1、将最久未被使用的空闲页从链表中删除;如图6所示。2、如果该页的内容发生改变,将该页的内容写回磁盘;3、装载新数据,更新哈希值;4、清除失效的哈希表的值。如图7所示。本发明的嵌入式内存数据库的内存页面管理与调度方法包括以下步骤步骤1 系统获取要读写的数据库文件的偏移量,并进行偏移量与页号映射。步骤2 进行相应的哈希冲突处理。步骤3 检查内存中是否有可以装载数据的页面如果没有则根据页面调度算法从内存中选择出可以数据交换的内存页,步骤4 根据页的使用情况决定内存页的数据库是否需要写回磁盘。步骤5:将新的数据内容写到内存页中。供嵌入式内存数据库访问。本发明将数据库申请的内存空间划分成以页为单位的多个块,并保证每个内存页的大小与数据库磁盘文件页的大小完全相同。其将数据库申请的内存空间作为数据库磁盘文件的缓冲区,并通过页面的管理调度方法来建立每个磁盘页与内存页的映射,并通过哈希链表来完成磁盘页面的换入和换出。嵌入式内存数据库中内存页面的管理调度方法还提供了多个磁盘页共用一个内存缓冲区页的冲突检测和解决方法,这使得比内存空间大的多的数据库磁盘文件也可以被创建和进行增加、删除、修改和查找操作,并且使得嵌入式内存数据库可以存储比内存空间大的多的数据而性能却非常接近纯内存数据库。下面详细说明被调用的各个模块内部的详细实施流程。本发明的嵌入式内存数据库内存页面的管理与调度方法中,在数据库启动时,本发明页面管理部分会被调用,进行数据库初始化。页面管理部分在内存中分配缓冲区空间, 并以页为单位对缓冲区空间进行管理。并将所有的缓冲区页均设为空闲页(由空闲链表管理)。本发明的嵌入式内存数据库内存页面的管理与调度方法中的数据读写流程是1)应用程序读写数据库数据请求;2)系统获取要读写的数据库文件的偏移量;3)映射计算出偏移量对应的哈希项和内存页号。即,文件偏移-页号映射模块通过数据库文件的偏移量计算出哈希表的索引(通过哈希表实现文件偏移量到页号的映射) 得到偏移量对应的哈希项和内存页号;4)检测哈希映射是否冲突。发生冲突的情况下进入哈希冲突处理步骤;否则进入下一步;5)检查内存中是否有可以装载数据的页面。步骤如下51)如果没有空白页,则启动页面调度算法获得一空白页;将偏移量所在磁盘页数据写入此空白内存页,更新此空白页结构;然后更新哈希表,将哈希表当前页对应的项的值更新为此空白页的页号;
7
52)如果有空白页,则从空白页链表中取出一页,假设页号为X,空闲页链表头指向下一个空白页;将偏移量所在磁盘页数据写入内存页X,更新page[X]数组;然后更新哈希表,将哈希表当前页对应的项的值更新为X ;6)如果当前哈希项已被此磁盘文件页使用,则不用重新加载;7)哈希冲突处理。如果当前哈希项被其他磁盘文件页使用(则说明检测到冲突), 则分配新内存页;将新内存页作为冲突链表的第一个节点;8)将新页的结构加入到哈希表的当前元素指向的冲突链表中,即将新页的页号保存到哈希表的当前元素中;9)根据页的使用情况决定内存页的数据库是否需要写回磁盘,将新的数据内容写到内存页中。通过在KingbaseReal嵌入式内存数据库中实施嵌入式内存数据库内存页面的管理和调度方法,可以得到如下有益效果本发明实现了嵌入式内存数据库的内存页面的管理调度方法,通过三个部分的协同工作来完成内存缓冲区页面的调度。该体系结构不仅解决了国内嵌入式内存数据库产品对虚拟内存技术不支持的问题,而且也解决了国外数据库厂商对内存数据库虚拟内存技术垄断的问题。对于嵌入式数据库应用程序开发商而言,由于嵌入式设备上的内存容量非常有限。很多嵌入式设备都只有几十兆字节或几兆字节有的甚至只有几百K字节。对于这种内存容量有限的嵌入式设备,通过采用实施了嵌入式内存数据库内存页面管理调度方法的内存数据库,可以提供大尺寸、低成本和高性能的数据库服务。避免了纯内存数据库因内存不足而导致无法创建大尺寸的数据库,以及大尺寸的数据库文件无法加载进内存的问题。对于使用嵌入式数据库来存储多媒体数据的用户而言,由于多媒体数据具有数据尺寸大的特点,因此通过采用实施了嵌入式内存数据库内存页面管理调度方法的内存数据库来将当前需要处理的多媒体数据加载到内存缓冲区中,而将当前处理完的多媒体数据放回到磁盘文件中,这样可以极大的提高数据库系统的多媒体数据处理能力。本发明使嵌入式内存数据库摆脱了嵌入式设备内存资源的限制。并且对用户不透明,无需用户管理。对于使用数据库接口的应用程序员来说,对实施了嵌入式内存数据库内存页面管理调度方法的内存数据库和没有实施嵌入式内存数据库内存页面管理调度方法的内存数据库的访问方式几乎没有变化。对于数据库的其他操作跟原来的操作完全相同, 这极大的简化了用户操作此种数据库的复杂程度。以上对本发明所提供的嵌入式内存数据库的内存页面管理调度方法进行了详细的说明。对本领域的技术人员而言,在不背离本发明实质精神的前提下对它所做的任何显而易见的改动,都将构成对本发明专利权的侵犯,将承担相应的法律责任。
权利要求
1.一种嵌入式内存数据库的内存页面管理调度方法,所述内存数据库的内存空间划分成以页为单位的多个块,且每个页的大小与数据库磁盘文件页的大小完全相同,每个磁盘文件页与内存页建立映射,其特征在于包括以下步骤步骤1 系统获取要读写的数据库文件的偏移量,并进行偏移量与页号映射; 步骤2 检测是否有哈希冲突,如果有则进行相应的哈希冲突解决处理;如果没有则进入下一步骤;步骤3 检查内存中是否有可以装载数据的页面如果没有则根据页面调度算法从内存中选择出可以数据交换的内存页;如果有则进入下一步骤;步骤5:将新的数据内容写到内存页中。
2.如权利要求1所述的嵌入式内存数据库的内存页面管理调度方法,其特征在于 在步骤1中根据文件偏移量计算得到的哈希值作为哈希数组的下标,通过该项的值得到文件偏移量对应的缓冲区页。
3.如权利要求1所述的嵌入式内存数据库的内存页面管理调度方法,其特征在于 步骤2中通过文件偏移地址计算出对应的哈希值,通过此哈希值获得对应页的一个冲突链表,如果此链表不为空并且链表中没有一项的偏移地址与要装载页的偏移地址相同, 判定为检测到哈希冲突。
4.如权利要求1所述的嵌入式内存数据库的内存页面管理调度方法,其特征在于 步骤2中包括以下步骤检查当前页的文件偏移地址域是否与文件偏移量相同,如相同则说明当前页即为已载入的文件偏移地址所在的页;否则按页的冲突域查找冲突链中的下一个页;当下一页的冲突域的值为0,说明是冲突页链的最后一个;如果页的文件偏移地址域与要访问的偏移地址仍然不同,说明要访问的偏移地址所在的页没有载入。
5.如权利要求3所述的嵌入式内存数据库的内存页面管理调度方法,其特征在于哈希冲突解决处理是指分配新内存页,将新内存页作为冲突链表的第一个节点,并且让当前查找的哈希数组项指向新页的页号。
6.如权利要求4所述的嵌入式内存数据库的内存页面管理调度方法,其特征在于 如果当前哈希值已被此磁盘文件页使用,则不用重新加载。
7.如权利要求6所述的嵌入式内存数据库的内存页面管理调度方法,其特征在于 步骤3中,如果检查到没有空白页,则启动页面调度算法获得一空白页;将偏移量所在磁盘页数据写入此空白内存页,更新此空白页结构;然后更新哈希表,将哈希表当前页对应的项的值更新为此空白页的页号。
8.如权利要求7所述的嵌入式内存数据库的内存页面管理调度方法,其特征在于 步骤3中,如果检查到有空白页,则从空白页链表中取出一页,假设页号为X,空闲页链表头指向下一个空白页;将偏移量所在磁盘页数据写入内存页X,更新page[X]数组;然后更新哈希表,将哈希表当前页对应的项的值更新为X。
9.如权利要求3所述的嵌入式内存数据库的内存页面管理调度方法,其特征在于还包括页面替换步骤将最久未被使用的空闲页从链表中删除;如果该页的内容发生改变,将该页的内容写回磁盘;装载新数据,更新哈希值;清除失效的哈希表的值。
10.如权利要求1所述的嵌入式内存数据库的内存页面管理调度方法,其特征在于步骤3和步骤5之间还包括步骤4 根据页的使用情况决定内存页的数据库是否需要写回磁盘,并进入下一步骤。
全文摘要
本发明提供一种嵌入式内存数据库的内存页面管理调度方法,内存数据库的内存空间划分成以页为单位的多个块,且每个页的大小与数据库磁盘文件页的大小完全相同,每个磁盘文件页与内存页建立映射,包括以下步骤步骤1系统获取要读写的数据库文件的偏移量,并进行偏移量与页号映射。步骤2检测是否有哈希冲突,如果有则进行相应的哈希冲突解决处理;如果没有则进入下一步骤;步骤3检查内存中是否有可以装载数据的页面,如果没有则从内存中选择出可以数据交换的内存页;如果有则进入下一步骤;步骤5将新的数据内容写到内存页中。通过本发明可以使嵌入式内存数据库摆脱了嵌入式设备内存资源的限制。
文档编号G06F17/30GK102402622SQ20111044799
公开日2012年4月4日 申请日期2011年12月27日 优先权日2011年12月27日
发明者刘建立, 寇立涛, 李恒, 杨经正, 陈东 申请人:北京人大金仓信息技术股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1