首页> 中国专利> 数据库可重复读实现方法、装置及数据库管理系统

数据库可重复读实现方法、装置及数据库管理系统

摘要

本发明公开了一种数据库可重复读实现方法,用于一种多用户、多事务并发的数据库管理系统,所述系统维护一事务列表、一回滚段及一索引树,该方法包括:步骤一,在遍历所述系统维护的事务列表时利用索引快速定位到满足条件的页,其中,所述事务列表,用于保存当前正在并发执行且未提交的事务;步骤二,遍历页记录时检查当前事务是否看得见当前记录,如果看得见,则将当前记录加入到结果集中,如果看不见则利用所述系统维护的回滚段中的撤销日志,构造出该记录的原始版本并添加到结果集中,其中所述回滚段用于记录事务所做的修改。本发明还公开了一种应用上述方法的实现装置,及一种应用所述方法和装置的数据库管理系统。

著录项

  • 公开/公告号CN101127045A

    专利类型发明专利

  • 公开/公告日2008-02-20

    原文格式PDF

  • 申请/专利权人 中兴通讯股份有限公司;

    申请/专利号CN200710122416.0

  • 发明设计人 印和平;常二鹏;李世亮;卢勤元;

    申请日2007-09-25

  • 分类号G06F17/30(20060101);

  • 代理机构11006 北京律诚同业知识产权代理有限公司;

  • 代理人梁挥;祁建国

  • 地址 518057 广东省深圳市南山区高新技术产业园科技南路中兴通讯大厦

  • 入库时间 2023-12-17 19:49:57

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2017-11-10

    未缴年费专利权终止 IPC(主分类):G06F17/30 授权公告日:20100421 终止日期:20160925 申请日:20070925

    专利权的终止

  • 2010-04-21

    授权

    授权

  • 2008-04-16

    实质审查的生效

    实质审查的生效

  • 2008-02-20

    公开

    公开

说明书

技术领域

本发明涉及数据库管理系统(DBMS),尤其涉及事务隔离级别,特别是多事务并发执行时数据可重复读的实现方法、装置及应用其的数据库管理系统。

背景技术

数据库管理系统中事务必须确保四种属性:原子性,即事务中所有动作或者全部执行或者全不执行;一致性,即每个事务必须保持数据库的一致性;隔离性,即每个事务的执行不受正在执行的其它事务的影响;持久性,即事务一旦提交成功,所有对数据库的改变应能持久保存在存储介质上。

设有事务T1、T2,并发执行时可能存在三种冲突:WR冲突,即T2可能会读T1刚修改过且未提交的数据,这样T2读入的数据是脏数据,称作“脏读”;RW冲突,即T2可能会修改刚被T1读入的数据且T1尚未结束,这样如果T1再次读入同一对象,会有不同的值,也称“不可重复读”;WW冲突,即T2可能会覆写刚被T1修改过的值且T1尚未结束,这样会导致数据的不一致性。串行调度可以保证数据的一致性,但不利于系统性能,因此SQL(Structured Query Language,结构化查询语言)标准中定义了四种隔离级别:可串行化读,这种隔离级别保证事务T只读其它已提交事务的修改,在T提交之前,其它事务不得修改已被T读或修改的对象,并且,如果T基于某些搜索条件读一组对象,在T完成之前,其它事务不得修改该组对象;可重复读,这种隔离级别保证事务T只读其它已提交事务的修改,在T提交之前,其它事务不得修改已被T读或修改的对象;提交读,这种隔离级别保证事务T只读其它已提交事务的修改,在T提交之前,其它事务不得修改已被T修改的对象;未提交读,这种隔离级别保证事务T只读其它已提交事务的修改。

中国专利申请号为200310124201的对比文件公开了一种在数据库里快速定位数据页中记录的方法,包括:在数据页的末端设置一个目录结构,该目录结构由一组记录偏移构成,记录偏移是某条记录在页里的位置偏移;该目录结构中的每个目录称之为dir_slot,每个dir_slot存放一个记录位置的偏移;采用快速二分法定位算法在dir_slot中查找相关记录,在定位到某个dir_slot后,根据该dir_slot中存放的记录偏移,顺序查找这相关的这一组记录,准确地定位到要找的那条记录。该方法采用查询过程和本专利中查询过程类似,都需要从索引根节点开始,采用二分查找定位到记录组,再遍历记录组,找到满足条件的记录,取得子节点,如此重复重复直至到达叶子节点。但是,该专利中实现的隔离级别是可串行化读,如果事务读到某条记录时,其它事务正在修改,则需要等待其它事务提交完成。

国际公开号为WO2004/025519 A2的对比文件也公开了一种相关方法,如果当前记录的事务ID大于读视图中最大事务ID,说明记录是后来插入的,所以该记录不可见,如果当前记录的事务ID小于读视图中最小事务ID或介于事务列表中任意相邻两个事务ID之间,说明修改该记录的事务已提交,所以该记录可见,这与本发明是一致的;但是遇到未提交事务修改的记录,该发明仅将其标记为不可见而丢弃,本发明则是从记录中取出回滚指针,解码回滚指针获得撤销日志的地址,从而由撤销日志构造出一条读视图看得见的记录。

总之,目前的数据库管理系统都允许多用户、多事务并发执行,因此不可避免会遇到上述三种冲突。解决冲突最简单的方法是采用锁机制,读或写之前先对表加意向共享锁或意向排它锁、对记录加共享锁或排它锁,但这样损害了事务的并发性,牺牲了系统性能。

发明内容

本发明所要解决的技术问题在于,提供一种高效率的数据库可重复读的实现方法、装置及应用其的数据库管理系统,可以增大事务并发性,提高系统性能。

为了实现上述目的,本发明提供了一种数据库可重复读实现方法,用于一种多用户、多事务并发的数据库管理系统,所述系统维护一事务列表、一回滚段及一索引树,该方法包括:

步骤一,在遍历所述系统维护的事务列表时利用索引快速定位到满足条件的页,其中,所述事务列表,用于保存当前正在并发执行且未提交的事务;

步骤二,遍历页记录时检查当前事务是否看得见当前记录,如果看得见,则将当前记录加入到结果集中,如果看不见则利用所述系统维护的回滚段中的撤销日志,构造出该记录的原始版本并添加到结果集中,其中所述回滚段用于记录事务所做的修改。

上述数据库可重复读实现方法,所述系统维护一个回滚段的步骤,进一步包括:

步骤11,所述系统在磁盘上生成回滚段日志文件,同时在高速缓存中保存相应页,并使每次插入一撤销日志仅针对所述高速缓存中的页;

步骤12,定期清理所述高速缓存中旧的撤销日志;

步骤13,定期将所述高速缓存中的页存在到磁盘文件中。

上述数据库可重复读实现方法,所述回滚段的内存结构信息包括:回滚段ID、表空间ID、页号。

上述数据库可重复读实现方法,所述系统每次启动一个事务,将该事务信息插入到所述事务列表中;每次事务提交或回滚,将该事务从所述事务列表中删除,以实现所述事务列表中只保存未提交事务。

上述数据库可重复读实现方法,所述事务信息包括:事务ID、事务类型、指向事务列表中前后节点的指针、撤销号、分配给事务的回滚段、插入撤销指针、更新撤销指针、读视图指针。

上述数据库可重复读实现方法,所述检查当前事务是否看得见当前记录时,需要在查询节点中保存读视图结构,该读视图结构保存当前事务执行时系统中并发执行的其它事务ID、最大事务ID和最小事务ID,同时保存所述撤销日志清理相关信息,如果修改记录的事务ID小于所述事务列表看中的最小事务ID,则当前事务看得见当前记录;如果修改记录的事务ID大于事务列表中的最大事务ID,则当前事务看不见当前记录;如果修改记录的事务ID等于事务列表中任一事务ID,则当前事务看不见当前记录。

上述数据库可重复读实现方法,所述系统维护一索引树的步骤,进一步包括:

步骤21,接收到查询请求后,从索引树的根节点开始沿着索引树定位到页节点;

步骤22,定位到页节点后开始构造结果集;

步骤23,遍历页中所有记录,检查当前事务中的事务ID,遍历所述读视图中的事务列表,查看所述读视图是否看得见当前记录,如看得见,则将当前记录加入到结果集中,如看不见,则从记录中取出回滚指针,从所述回滚指针中解码出所述撤销日志在所述回滚段中的位置,然后从该回滚段中取出相关数据构造出前一次版本,并添加到结果集中;

步骤24,获取到所述前一个版本,检查所述读视图是否看的见该版本记录,如果看不见,再构造更前一次的版本,如此重复,直至所述读视图看得见某版本记录为止,将该版本记录加入到所述结果集中;

步骤25,检查是否有下一条记录,如果有,重复执行步骤23~24,直至遍历完数据页链表,如果没有,本次查询结束。

上述数据库可重复读实现方法,所述步骤21进一步包括:

步骤211,检查所述根节点是否在高速缓存中,如在,执行步骤212;如不在,将所述根节点换入所述高速缓存中,执行步骤212;

步骤212,检查当前节点是否是叶子节点,如不是,采用二分查找定位到满足查询条件的索引项;

步骤213,沿着所述索引项中指针定位到子节点,循环执行步骤212直至定位到所述页节点。

上述数据库可重复读实现方法,所述记录中包含回滚指针,该回滚指针中编码了回滚ID、回滚段表空间ID、页号、页内偏移、回滚类型。

上述数据库可重复读实现方法,在所述步骤11中,所述日志文件分为若干大小相等的页,所述页中存储所述撤销日志,所述撤销日志中包含:撤销类型、撤销号、表ID、各字段值,任何插入、修改、删除操作均生成一条撤销日志。

进一步的,本发明还提供了一种应用上述数据库可重复读实现方法的实现装置,用于一种多用户、多事务并发的数据库管理系统,所述装置包括:

一事务列表维护模块,用于维护一个事务列表,其中所述事务列表用于保存当前正在并发执行且未提交的事务;

一回滚段维护模块,用于维护一个回滚段,其中所述回滚段用于记录事务所做的修改;

一索引树维护模块,用于在执行查询操作时,遍历所述事务列表利用索引快速定位到满足条件的页,遍历页记录时检查当前事务是否看得见当前记录,如果看得见,则将当前记录加入到结果集中,如果看不见则利用所述回滚段中的撤销日志,构造出该记录的原始版本并添加到结果集中。

更进一步的,本发明还提供了一种应用上述方法和装置的数据库管理系统,包括一数据库可重复读实现装置,该装置包括:

一事务列表维护模块,用于维护一个事务列表,其中所述事务列表用于保存当前正在并发执行且未提交的事务;

一回滚段维护模块,用于维护一个回滚段,其中所述回滚段用于记录事务所做的修改;

一索引树维护模块,用于在执行查询操作时,遍历所述事务列表利用索引快速定位到满足条件的页,遍历页记录时检查当前事务是否看得见当前记录,如果看得见,则将当前记录加入到结果集中,如果看不见则利用所述回滚段中的撤销日志,构造出该记录的原始版本并添加到结果集中。

与现有技术相比,本发明提供的数据库可重复读实现方法,数据库管理系统对数据做修改会在回滚段中记录撤销日志,以便系统“回滚”。为了实现可重复读,本发明也利用撤销日志保存了原始数据,如果当前读视图“看不见”当前记录时,则从撤销日志中构建原始版本添加到结果集中,保证了一个事务查看相同的信息不会看到两个不同的版本,即如果一个事务在某个时刻读了一条记录,接下来自己如果没有修改,再读该记录应该得到同样的值,不管有没有其它事务修改过该记录。

因此,本发明的应用增大了事务并发性,有效的提高了系统性能。

附图说明

图1为本发明数据库可重复读的实现方法流程图;

图2为本发明的一实施例可重复读查询过程图;

图3为本发明的B-树聚集索引结构图;

图4为本发明数据库可重复读实现装置示意框图。

具体实施方式

下面结合附图和具体实施例详细描述本发明,以更进一步了解本发明之目的、方案及功效,但并非作为对本发明所附权利要求保护范围的限制。

参考图1,详细说明本发明数据库可重复读的实现方法,该方法用于一种多用户、多事务并发的数据库管理系统,其中,该系统维护一回滚段,一索引树,一事务列表和一读视图结构。

该数据库可重复读的实现方法包括:

步骤S10,在遍历所述系统维护的事务列表时利用索引快速定位到满足条件的页,其中,所述事务列表,用于保存当前正在并发执行且未提交的事务;

步骤S20,遍历页记录时检查当前事务是否看得见当前记录,如果看得见,则将当前记录加入到结果集中,如果看不见则利用所述系统维护的回滚段中的撤销日志,构造出该记录的原始版本并添加到结果集中,其中所述回滚段用于记录事务所做的修改。

在所述系统维护一个回滚段的步骤中:  系统在磁盘上生成回滚段日志文件,同时在高速缓存中保存相应页,并使每次插入一撤销日志仅针对所述高速缓存中的页;为保证系统故障重启时,可以恢复到最新状态,系统要定期清理所述高速缓存中旧的撤销日志,并定期将所述高速缓存中的页存在到磁盘文件中。

所述回滚段对应磁盘上的一个日志文件,文件划分为若干大小相等的页,页中存储撤销日志,撤销日志中包含了撤销类型、撤销号、表ID、各字段值等信息。任何插入、修改、删除操作均生成一条撤销日志,同时将回滚段ID、页号、页内偏移等信息编码成回滚指针,同时将回滚指针保存在记录中。

在所述系统维护一棵索引树的步骤进一步包括:

步骤S201,系统接收到查询请求后,从索引树的根节点开始沿着索引树定位到页节点;

步骤S202,定位到页节点后开始构造结果集;

步骤S203,遍历页中所有记录,检查当前事务中的事务ID,遍历读视图中的事务列表,查看所述读视图是否看得见当前记录,如看得见,则将当前记录加入到结果集中,如看不见,则从记录中取出回滚指针,从回滚指针中解码出撤销日志在回滚段中的位置,然后从该回滚段中取出相关数据构造出前一次版本,并添加到结果集中;

步骤S204,获取到所述前一个版本,检查读视图是否看的见该版本记录,如果看不见,再构造更前一次的版本,如此重复,直至读视图看得见某版本记录为止,将该版本记录加入到结果集中;

步骤S205,检查是否有下一条记录,如果有,重复执行步骤S203~S204,直至遍历完数据页链表,如果没有,本次查询结束。

上述步骤S201进一步包括:

步骤S211,检查所述根节点是否在高速缓存中,如在,执行步骤S212;如不在,将所述根节点换入所述高速缓存中,执行步骤S212;

步骤S212,检查当前节点是否是叶子节点,如不是,采用二分查找定位到满足查询条件的索引项;

步骤S213,沿着所述索引项中指针定位到子节点,循环执行步骤S212直至定位到所述页节点。

在所述系统维护一个事务列表的步骤中,事务列表记录当前事务执行时系统中并发执行的其它事务,按照后来者插入到队头的原则插入,同时分配一个读视图结构,该结构保存当前事务执行时系统中并发执行的其它事务的ID以及最大事务ID、最小事务ID,同时保存撤销日志清理相关信息。系统每次启动一个事务,将事务插入到事务列表中;每次事务提交或回滚,都从事务列表中删除相应的事务,保证事务列表中只保存未提交事务。其中,事务信息包括事务ID、事务类型、指向事务列表中前后节点的指针、撤销号、分配给事务的回滚段、插入(insert)撤销指针、更新(update)撤销指针、读视图指针等。

在上述步骤S202中,每次收到客户端请求,生成一个事务,构造出结果集,返回给客户端。最后结束本次事务,释放本次事务所分配的资源。

在上述步骤S203中,检查当前事务是否看得见当前记录中,如果修改记录的事务ID小于事务列表中最小事务ID,则当前事务看得见当前记录,因为读时修改记录的事务已提交;如果修改记录的事务ID大于事务列表中最大事务ID,说明修改记录的是某个后来发生的事务,所以当前事务不应该看得见当前记录;如果修改记录的事务ID等于事务列表中任一事务ID,说明修改记录的是某个未提交事务,所以当前事务不应该看得见当前记录。

图2为本发明的一实施例可重复读查询过程图,这里描述了其中可能的一种情况,即用户没有建普通索引。下面介绍其流程:

步骤S301,监听线程接收查询请求,并分配一工作线程处理查询请求。

步骤S302,工作线程执行查询分析和查询优化,生成执行计划。

步骤S303,工作线程取出查询所用的聚集索引,首先定位到聚集索引的根节点,检查根节点是否在高速缓存中,如果不在则将其换入。

步骤S304,工作线程检查当前节点是否是叶子节点,如果不是,则采用二分查找,定位出满足条件的记录组,然后在记录组中遍历记录,取得满足条件的记录,然后取出子节点,如此重复,直至定位到页节点;如果是叶节点,则从步骤S305继续执行。

步骤S305,工作线程取出当前页的下一条记录(如果是第一次访问本页,则定位到首记录),并检查读视图是否看得见当前记录,如果看得见,则将记录加入到结果集中。如果看不见,则从当前记录中取出回滚指针,从回滚指针解码出撤销日志的地址,然后读出撤销日志,并从撤销日志构造出前一次版本,再检查读视图是否看得见该版本记录,如此重复,直至读视图看得见某个版本的记录。检查是否有下一条记录(如果本页记录已遍历完,则取下一页),如果有,则重复步骤S305,直至遍历完所有记录;如果没有,执行步骤S306。

步骤S306,本次查询结束,返回结果集。

图3为B-树聚集索引结构示意图,索引由页节点构造成树,页节点分为索引页和数据页。索引页中存放数据项,数据项由索引键和指向子节点的指针组成,每若干条索引项构成一组,便于快速查找,数据页中存放实际的数据,数据按照索引键有序存放,记录中包含每个字段的偏移、标记信息(字段偏移是一字节还是二字节、记录是否被删除、记录字段数、下一记录偏移等)、字段值。

参考图4,本发明还提供了一种应用上述数据库可重复读实现方法的实现装置400,用于一种多用户、多事务并发的数据库管理系统4,所述装置包括:

一事务列表维护模块401,用于维护一个事务列表,其中所述事务列表用于保存当前正在并发执行且未提交的事务;一回滚段维护模块402,用于维护一个回滚段,其中所述回滚段用于记录事务所做的修改;一索引树维护模块403,用于在执行查询操作时,遍历所述事务列表利用索引快速定位到满足条件的页,遍历页记录时检查当前事务是否看得见当前记录,如果看得见,则将当前记录加入到结果集中,如果看不见则利用所述回滚段中的撤销日志,构造出该记录的原始版本并添加到结果集中。所述回滚段中记录撤销日志,撤销日志中包含了撤销类型、撤销号、表ID、各字段值等信息。任何插入、修改、删除操作均生成一条撤销日志,同时将回滚段ID、页号、页内偏移等信息编码成回滚指针,同时将回滚指针保存在记录中。

本发明为了实现可重复读,数据库管理系统对数据做修改会在回滚段中记录撤销日志,以便系统回滚,撤销日志中保存了原始数据,如果当前读视图看不见当前记录时,则从撤销日志中构建原始版本添加到结果集中,从而保证了一个事务查看相同的信息不会看到两个不同的版本,即如果一个事务在某个时刻读了一条记录,接下来自己如果没有修改,再读该记录应该得到同样的值,不管有没有其它事务修改过该记录。

采用这种方法,有效的提升了系统性能,当然在一定程度上牺牲了数据正确性,但对有些事务,这是可以接受的。在数据正确性和事务并发程度上做权衡,隔离级别越高,数据正确性越高,但性能也越差。

虽然本发明已以一较佳实施例揭露如上,然其并非用以限定本发明,  在不背离本发明精神及其实质的情况下,熟悉本领域的技术人员当可根据本发明作出各种相应的改变和变形,但这些相应的改变和变形都应属于本发明所附的权利要求的保护范围。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号