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

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

【技术实现步骤摘要】

本专利技术涉及数据库管理系统(DBMS),尤其涉及事务隔离级别,特别是 多事务并发执行时数据可重复读的实现方法、装置及应用其的数据库管理系 统。
技术介绍
数据库管理系统中事务必须确保四种属性原子性,即事务中所有动作或 者全部执行或者全不执行; 一致性,即每个事务必须保持数据库的一致性;隔 离性,即每个事务的执行不受正在执行的其它事务的影响;持久性,即事务一 旦提交成功,所有对数据库的改变应能持久保存在存储介质上。设有事务T1、 T2,并发执行时可能存在三种冲突WR冲突,即T2可能 会读Tl刚修改过且未提交的数据,这样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的对比文件公开了一种在数据库里快速 定位数据页中记录的方法,包括在数据页的末端设置一个目录结构,该目录结构由一组记录偏移构成,记录偏移是某条记录在页里的位置偏移;该目录结构中的每个目录称之为d i r—s 1 o t,每个d i r—s 1 o t存放一个记录位置的偏移;采用快速二分法定位算法在d i r— S 1 O t中查找相关记录,在定位到某个d i r_s 1 o t后,根据该d i r—s 1 o t中存放的记 录偏移,顺序查找这相关的这一组记录,准确地定位到要找的那条记录。该方 法采用査询过程和本专利中查询过程类似,都需要从索引根节点开始,采用二 分査找定位到记录组,再遍历记录组,找到满足条件的记录,取得子节点,如 此重复重复直至到达叶子节点。但是,该专利中实现的隔离级别是可串行化读, 如果事务读到某条记录时,其它事务正在修改,则需要等待其它事务提交完成。国际公开号为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直至 定位到所述页节点。上述数据库可重复读本文档来自技高网
...

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

【技术特征摘要】
1、一种数据库可重复读实现方法,用于一种多用户、多事务并发的数据库管理系统,所述系统维护一事务列表、一回滚段及一索引树,特征在于,该方法包括步骤一,在遍历所述系统维护的事务列表时利用索引快速定位到满足条件的页,其中,所述事务列表,用于保存当前正在并发执行且未提交的事务;步骤二,遍历页记录时检查当前事务是否看得见当前记录,如果看得见,则将当前记录加入到结果集中,如果看不见则利用所述系统维护的回滚段中的撤销日志,构造出该记录的原始版本并添加到结果集中,其中所述回滚段用于记录事务所做的修改。2、 根据权利要求1所述的数据库可重复读实现方法,其特征在于,所述 系统维护一个回滚段的步骤,进一步包括步骤11,所述系统在磁盘上生成回滚段日志文件,同时在高速缓存中保 存相应页,并使每次插入一撤销日志仅针对所述高速缓存中的页; 步骤12,定期清理所述高速缓存中旧的撤销日志; 步骤13,定期将所述高速缓存中的页存在到磁盘文件中。3、 根据权利要求1所述的数据库可重复读实现方法,其特征在于,所述 回滚段的内存结构信息包括回滚段ID、表空间ID、页号。4、 根据权利要求1所述的数据库可重复读实现方法,其特征在于,所述 系统每次启动一个事务,将该事务信息插入到所述事务列表中;每次事务提交 或回滚,将该事务从所述事务列表中删除,以实现所述事务列表中只保存未提 交事务。5、 根据权利要求4所述的数据库可重复读实现方法,其特征在于,所述 事务信息包括事务ID、事务类型、指向事务列表中前后节点的指针、撤销 号、分配给事务的回滚段、插入撤销指针、更新撤销指针、读视图指针。6、 根据权利要求1所述的数据库可重复读实现方法,其特征在于,所述 检查当前事务是否看得见当前记录时,需要在查询节点中保存读视图结构,该 读视图结构保存当前事务执行时系统中并发执行的其它事务ID、最大事务ID 和最小事务ID,同时保存所述撤销日志清理相关信息,如果修改记录的事务ID 小于所述事务列表看中的最小事务ID,则当前事务看得见当前记录;如果修 改记录的事务ID大于事务列表中的最大事务ID,则当前事务看不见当前记录; 如果修改记录的事务ID等于事务列表中任一事务ID,则当前事务看不见当前 记录。7、 根据权利要求1所述的数据库可重复读实现方法,其特征在于,所述系统维护一索引树的步骤,进一步包括步骤21,接收到査询请求后,从索引树的根节点开始沿着索引树定位到 页节点;歩骤22,定位到页节点后开始构造结果集;歩骤23,遍历页中所有记录,检査当前事务中的事务ID,遍历所述读视图 中的事务列表,査看所述读视图是否看得见当前记录,如看得见,则将当前记 录加入到结果集中,如看不见,则从记录中取出回滚指针,从所述回滚指针中 解码出所述撤销日志在所...

【专利技术属性】
技术研发人员:印和平常二鹏李世亮卢勤元
申请(专利权)人:中兴通讯股份有限公司
类型:发明
国别省市:94[中国|深圳]

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1