面向嵌入式数据库系统的无日志事务处理方法

文档序号:6443803阅读:182来源:国知局
专利名称:面向嵌入式数据库系统的无日志事务处理方法
技术领域
本发明涉及一种数据库系统事务处理方法,尤其涉及面向嵌入式数据库系统的无日志事务处理方法,属于数据库管理技术领域。
背景技术
随着技术的发展,嵌入式设备和移动设备在各行业得到了广泛的应用,例如手持 PDA、工控机、智能手机等。而几乎所有的嵌入式设备和移动设备都会涉及到数据管理。在嵌入式设备和移动设备上又不可能运行大型的通用数据库,因此如何实现稳定、高效的数据管理就成为摆在嵌入式应用程序开发者面前的难题。嵌入式数据库凭借其易使用、体积小、数据管理能力强等特点,在嵌入式设备中得到了广泛的应用。但是,目前的大多数嵌入式数据库都是全部沿用或部分沿用了通用数据库的设计思路,只是做了一些简化,舍去了一些高级功能,可以说是轻量级的通用数据库。 由于嵌入式设备与通用设备的差别,导致采用通用数据库技术实现的嵌入式数据库在嵌入式设备上出现水土不服的问题,例如数据库的事务处理方式。事务处理是保证数据库数据正确性的重要手段,是所有数据库都必须支持的基本功能。好的事务处理机制可以在保证数据库数据正确性的同时提高数据库的运行效率。因此,对事务处理的支持能力是评价一个数据库好坏的重要且基本的标准。拥有功能强大、占用资源少的事务处理机制的嵌入式数据库在嵌入式设备领域必然更受欢迎,得到更广泛的应用。另一方面,数据库系统普遍使用日志作为事务回滚或数据库恢复的依据。在数据库运行期间会记录多种日志,如=REDO日志、UNDO日志等。某个事务开始时,数据库会将操作以日志形式记录。如果当前的事务由于某种原因需要取消,即需要回滚时,数据库按照记录的UNDO日志取消当前事务对数据库的所有操作。如果需要对数据库进行恢复,则将REDO 日志重新执行一遍。在使用日志进行事务管理的情况下,仅仅考虑在数据库运行期间记录日志的动作就会增加大量的磁盘I/O操作。在事务执行期间对磁盘的访问必然会影响数据库的性能,而且在磁盘上保存日志文件也增加了数据库在嵌入式设备上的存储开销。这种存储开销在PC机或者服务器上基本可以忽略,但是在处理器速度较慢且磁盘资源比较紧张的嵌入式设备上,运行需要记录日志的数据库系统所增加的磁盘开销往往是难以承受的。尤其在以对性能要求较高的嵌入式应用中,需要记录日志的嵌入式数据库就更不适用了。

发明内容
本发明所要解决的技术问题在于提供一种面向嵌入式数据库(或内存数据库)系统的无日志事务处理方法。通过该方法可以实现功能强大、高效、占用资源少的事务处理机制。为实现上述的发明目的,本发明采用下述的技术方案—种面向嵌入式数据库系统的无日志事务处理方法,其特征在于
嵌入式数据库中具有两个工作区,用于维护数据库中的数据,记录用户对数据库的操作,所述两个工作区管理同一份数据对象,在所述两个工作区中包含同样多的对象元素数量,每个工作区中的元素通过索引进行定位,在事务开始时的初始状态下,同一索引值在两个工作区中所对应的对象元素指向的是同一数据对象,在提交或回滚事务时,比较两个工作区中的各对象元素是否一致,如果不一致就证明该数据对象已经被修改,则决定使更改生效或者取消更改,依次类推直到工作区中所有的对象元素均被处理。利用本发明所提供的无日志事务处理方法,可以实现如下的有益效果1.数据库在事务运行过程中,没有维护事务所需的磁盘I/O操作。如果将该机制使用在内存数据库上,则整个过程中均没有磁盘操作。事务处理将会非常高效,经测试即使在ARM处理器上,数据库的事务处理性能也可轻松达到微秒级。2.事务提交与回滚操作简单提交和回滚事务只是对比两个工作区中的不同,并释放无效数据。如果是磁盘数据库只需要将一小部分发生改变的内容写回到磁盘上,降低了磁盘I/O操作的数量。


下面结合附图和具体实施方式
对本发明作进一步的详细说明。图1为本发明所提供的无日志事务处理方法的原理示意图;图2为本无日志事务处理方法中,记录发生改变时的处理过程示意图;图3为本无日志事务处理方法中,事务提交过程的示意图。
具体实施例方式本发明所提供的无日志事务处理方法提出了一种全新概念的事务处理机制。该事务处理机制的特点在于使用两个工作区维护数据库中的数据,记录用户对数据库的操作。 两个工作区分别命名为“当前区”和“影子区”。在事务运行过程中,影子区作为当前区的备份。随着事务的运行过程,会造成两个工作区内容的不一致,该不一致的内容即为数据库运行过程中数据的改变。提交事务时,以当前区的内容为准,使数据库内容的改变生效。回滚事务时,以影子区的内容为准,取消对数据库内容的改变。上述事务处理机制无需记录日志,没有额外的磁盘开销,简单高效。在本发明的一个实施例中,该事务处理机制在嵌入式数据库中得到应用。如图1 所示,嵌入式数据库中的“双工作区”管理同一份数据对象(record Urecord 2,……, record η)。在两个工作区中包含同样多的对象(记录)元素数量,工作区中的元素通过索引进行定位。在事务开始时的初始状态下,同一索引值在两个工作区中所对应的元素指向的是同一对象。在提交或回滚事务时,通过比较两个工作区中的各元素是否一致,如果不一致就证明该对象已经被修改,则可以根据当前的操作(提交事务/回滚事务)决定是使更改生效还是取消更改,依次类推直到工作区中所有的元素均被处理。下面从工作区元素的分配、工作区内容的变更和内容不一致情况的处理三个方面对本发明所提供的事务处理机制展开详细的说明。在数据库中工作区元素的分配方面,每分配一个数据就会在工作区中分配一个元素指向该数据。这种分配只会在当前区中进行。当事务提交时,为影子区分配同样的元素; 而事务回滚时,将为当前区分配的元素回收。在数据库运行期间,会对记录进行增加、更新、删除等操作,从而造成工作区内容的变更。由于当前区和影子区中都指向的是同一份记录。如果记录的更改在记录原位置上进行,则会导致事务无法回滚,即对记录的修改立即生效,因此需要在修改前保存记录的备份。如图2所示,所有对记录的操作都在当前区指向的记录中进行。影子区指向的元素作为当前区的备份,可以用于在事务回滚时的数据恢复。具体地说,影子区中的元素指向备份数据,当前区的元素指向当前数据,这样导致当前区的元素与影子区的元素所指向的数据的位置不一致,正好可以作为判断记录是否发生改变的依据,在事务提交或者回滚时做相应的操作。在内容不一致情况的处理方面,前已述及影子区的作用可以理解为对当前区的备份,所以当数据库运行一段时间后会造成两个工作区内容的不一致。为此如图3所示,在事务提交或回滚时需要遍历两个工作区找出所有不一致的地方,并且做相应的处理。例如提交事务时如果发现有不一样的内容,由于提交事务是使改动生效,即要使影子区所指向的备份数据失效,所以应该释放影子区相应元素所指向的数据,同时使影子区的内容指向当前区元素。反之,如果执行的是回滚操作,则需要使用影子区恢复当前区,因此要释放当前区的数据,然后使当前区相应的元素指向影子区元素指向的数据。在本发明的另一个实施例中,上述事务处理机制在内存数据库中得到应用。具体的应用方式与嵌入式数据库中的应用方式基本相同,在此就不赘述了。本发明中由于使用工作区管理数据库中的数据,并且数据在应用过程中会不断增加,工作区所能容纳的元素个数又是有限的,所以最终数据个数将会超出工作区管理的范围。为此,必须提供工作区在运行状态下的动态扩展机制,使其能够在数据库运行状态下增加元素个数。在本发明的一个实施例中,使用数组实现工作区的动态扩展机制。具体说明如下在初始状态下数据库拥有两个一模一样的数组,分别作为影子区和工作区。在数据库运行期间,当数据库中的数据个数大于数组最大元素个数时,在内存中重新分配两个更大的数组(新数组的大小可以根据实际情况决定,可以采用2倍的方式扩展),然后将原数组的内容拷贝到新分配的数组中,最后释放原来的数组。由此实现工作区的动态扩展机制。另一方面,在数据库使用过程中删除记录会造成工作区中的元素的失效,即指向的记录已经被删除。该元素称为“垃圾元素”。随着数据库的使用,工作区中的垃圾元素会越来越多。如果没有对垃圾元素的回收机制(也称工作区垃圾回收机制),工作区中的元素个数只会增加,而且其中可能包含大量的垃圾元素。工作区垃圾回收机制会在适当的条件下被出发,也可以有用户调用。该机制遍历工作区,将所有垃圾元素回收,并且使相应位置的内容可以分配给新的数据。工作区垃圾回收机制可以将垃圾元素回收,使工作区中全部为有效元素,提升工作区的使用率。本发明通过使用双工作区的方式记录用户对数据库的操作,两个工作区分别命名为“当前区”和“影子区”,在事务运行过程中影子区作为当前区的备份。提交事务时根据比较两个工作区的差别将操作生效,并使用当前区覆盖影子区;回滚事务时同样通过比较两个工作区的差别将操作取消,然后使用影子区恢复当前区。这样的事务处理机制在事务运行期间不会记录日志,即不会产生除数据库文件以外的日志文件或其他文件。而且,事务的提交和回滚基本都是在内存中进行的,没有产生额外的磁盘1/0,不会占用额外的磁盘资源。因此,本发明所提供的事务处理机制具备高性能、低资源消耗的特点,更加适合嵌入式领域的应用。 以上对本发明所提供的面向嵌入式数据库系统的无日志事务处理方法进行了详细的说明。对本领域的技术人员而言,在不背离本发明实质精神的前提下对它所做的任何显而易见的改动,都将构成对本发明专利权的侵犯,将承担相应的法律责任。
权利要求
1.一种面向嵌入式数据库系统的无日志事务处理方法,其特征在于嵌入式数据库中具有两个工作区,用于维护数据库中的数据,记录用户对数据库的操作,所述两个工作区管理同一份数据对象,在所述两个工作区中包含同样多的对象元素数量,每个工作区中的元素通过索引进行定位,在事务开始时的初始状态下,同一索引值在两个工作区中所对应的对象元素指向的是同一数据对象,在提交或回滚事务时,比较两个工作区中的各对象元素是否一致,如果不一致就证明该数据对象已经被修改,则决定使更改生效或者取消更改,依次类推直到工作区中所有的对象元素均被处理。
2.如权利要求1所述的面向嵌入式数据库系统的无日志事务处理方法,其特征在于 决定使更改生效或者取消更改时,如果执行的是回滚操作,则取消更改;如果执行的是提交事务,则使更改生效。
3.如权利要求1的所述的面向嵌入式数据库系统的无日志事务处理方法,其特征在于决定使更改生效或者取消更改时,如果执行的是回滚操作,则需要使用影子区恢复当前区,释放当前区的数据,然后使当前区相应的元素指向影子区元素指向的数据;如果执行的是提交事务操作,则使影子区所指向的备份数据失效,释放影子区相应元素所指向的数据,同时使影子区的内容指向当前区元素。
4.如权利要求1的所述的面向嵌入式数据库系统的无日志事务处理方法,其特征在于在初始状态下,两个工作区是一样的数组;在数据库运行期间,当数据库中的数据个数大于数组最大元素个数时,在内存中重新分配两个更大的数组,然后将原数组的内容拷贝到新分配的数组中,最后释放原来的数组。
5.如权利要求1的所述的面向嵌入式数据库系统的无日志事务处理方法,其特征在于还包括工作区垃圾回收机制,所述工作区垃圾回收机制是遍历工作区,将所有垃圾元素回收,并且使相应位置的内容可以分配给新的数据,其中,垃圾元素是指在数据库使用过程中删除记录会造成的工作区中的失效元素。
全文摘要
本发明提供一种面向嵌入式数据库系统的无日志事务处理方法,嵌入式数据库中具有两个工作区,用于维护数据库中的数据,记录用户对数据库的操作,两个工作区管理同一份数据对象,在两个工作区中包含同样多的对象元素数量,每个工作区中的元素通过索引进行定位,在事务开始时的初始状态下,同一索引值在两个工作区中所对应的对象元素指向的是同一数据对象,在提交或回滚事务时,比较两个工作区中的各对象元素是否一致,如果不一致就证明该数据对象已经被修改,则决定使更改生效或者取消更改,依次类推直到工作区中所有的对象元素均被处理。功能强大、高效、占用资源少的事务处理机制。
文档编号G06F17/30GK102402623SQ20111044816
公开日2012年4月4日 申请日期2011年12月28日 优先权日2011年12月28日
发明者刘建立, 寇立涛, 李恒, 杨经正, 陈东 申请人:北京人大金仓信息技术股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1