处理数据库重做数据的方法和装置制造方法及图纸

技术编号:8800946 阅读:234 留言:0更新日期:2013-06-13 05:39
本发明专利技术实施例提供了一种处理数据库重做数据的方法和装置,所述方法包括:服务器包含的多个应用线程中每一应用线程根据修改数据库的操作生成重做数据,并将所述重做数据相应保存到为所述每一应用线程分配的缓存中,获取时序队列锁后将所述应用线程的标识保存到所述时序队列,保存结束后释放时序队列锁;数据读取线程确定数据读取条件得到满足,从所述时序队列中读取所述应用线程的标识的顺序,依次从所述时序队列中应用线程的标识对应的应用线程的缓存中读取一个重做数据到重做队列。使用本发明专利技术,通过将时序队列和数据队列分离,能够提高重做数据的处理效率,从而提升数据库系统的并发吞吐量。

【技术实现步骤摘要】

本专利技术涉及通信网络
,尤其涉及处理数据库重做数据的方法和装置
技术介绍
重做日志(redo log)是数据库操作中数据可靠性的重要保障,能够提供比文件系统更多的数据安全保护。它的基本原理是当数据库修改操作提交的时候,数据并不会即时写入到磁盘的数据文件中,而是保存在内存中,避免每次的数据库更新要求都写入数据文件,从而提高数据库更新的性能;并根据修改操作生成重做数据(redo data)并写入到磁盘成为重做日志,避免在故障的情况下,由于内存数据的丢失而导致数据丢失。当数据库操作过程出现故障时,可以通过持久化的重做日志对数据进行恢复。现有大多数数据库应用中,为了提高系统并发吞吐性能,数据库提供多线程并发处理的访问方式。虽然多个线程可以并发访问数据库,为了提高写磁盘的效率,多个重做数据在写入磁盘前,需要先缓存到重做队列(redo queue)中再依次写入磁盘。因为重做数据存在时序性限制,多个线程往重做队列中拷贝重做数据时,需要在全局的重做队列锁保护范围内来保证时序,即每次写重做数据都需要抢占重做队列锁后做耗时较大的数据拷贝。现有技术中多个线程只能以串行的方式生成和拷贝重做数据,因此存在重做数据处理效率低的缺陷,影响了大业务量并发应用下系统的吞吐量。
技术实现思路
本专利技术实施例提供了 一种处理数据库重做数据的方法和装置,用于提高重做数据的处理性能。第一方面,本专利技术实施例提供了一种处理数据库重做数据的方法,应用于服务器中,所述服务器中运行有数据读取线程以及多个应用线程,所述多个应用线程以并发的方式修改数据库,所述方法包括:所述多个应用线程中每一应用线程根据修改数据库的操作生成重做数据,并将所述重做数据相应保存到为所述每一应用线程分配的缓存中,获取时序队列锁后将所述应用线程的标识保存到时序队列,所述保存结束后释放所述时序队列锁;所述数据读取线程确定数据读取条件得到满足,从所述时序队列中读取所述应用线程的标识的顺序,依次从所述时序队列中应用线程的标识对应的应用线程的缓存中读取一个重做数据写入重做队列。在第一方面的第一种可能的实现方式中,所述数据读取条件为到达预定的时间周期,或所述时序队列的长度达到预定值,或所述应用线程的缓存数据量达到预定值。结合第一方面或第一方面的第一种可能的实现方式,在第二种可能的实现方式中:所述依次从所述时序队列中应用线程的标识对应的应用线程的缓存中读取一个重做数据写入重做队列之前,进一步包括获取所述重做队列的队列锁,以获得对所述重做队列的写入权限;所述依次从所述时序队列中应用线程的标识对应的应用线程的缓存中读取一个重做数据写入重做队列之后,进一步包括释放所述重做队列的队列锁。结合第一方面或第一方面的第一种可能的实现方式或第一方面的第二种可能的实现方式,在第三种可能的实现方式中,该方法还包括:所述依次从所述时序队列中应用线程的标识对应的应用线程的缓存中读取一个重做数据写入重做队列之前还包括获取所述时序队列的队列锁以锁定所述时序队列,以及所述依次从所述时序队列中应用线程的标识对应的应用线程的缓存中读取一个重做数据写入重做队列之后还包括释放所述时序队列的队列锁;或者所述依次从所述时序队列中应用线程的标识对应的应用线程的缓存中读取一个重做数据写入重做队列之前还包括给所述时序队列的队尾元素添加读取结束标识。结合第一方面以及第一方面的第一至第三种可能的实现方式中的任意一个,在第四种可能的实现方式中,该方法还包括:所述从所述时序队列中应用线程的标识对应的应用线程的缓存中读取一个重做数据写入重做队列之后还包括将所述应用线程的标识从所述时序队列中删除。第二方面,本专利技术实施例提供了一种处理数据库重做数据的服务器,所述服务器中运行有多个应用线程,所述多个应用线程以并发的方式修改数据库,所述服务器包括:时序队列处理单元,用于在所述多个应用线程中每一应用线程根据修改数据库的操作生成重做数据,并将所述重做数据相应保存到为所述每一应用线程分配的缓存中,获取时序队列锁后将所述应用线程的标识保存到时序队列,所述保存结束后释放所述时序队列锁以及将所述时序队列发送到重做队列处理单元;所述重做队列处理单元,用于从所述时序队列处理单元接收所述时序队列,以及确定数据读取条件得到满足后,从所述时序队列中读取所述应用线程的标识的顺序,依次从所述时序队列中应用线程的标识对应的应用线程的缓存中读取一个重做数据写入重做队列。在第一方面的第一种可能的实现方式中,所述重做队列处理单元确定满足数据读取条件具体包括:所述重做队列处理单元确定到达预定的时间周期或所述时序队列的长度达到预定值或所述线程的缓存数据量达到预定值。结合第一方面或第一方面的第一种可能的实现方式,在第二种可能的实现方式中,所述重做队列处理单元,进一步的用于:所述依次从所述时序队列中应用线程的标识对应的应用线程的缓存中读取一个重做数据写入重做队列之前,获取所述重做队列的队列锁,以获得对所述重做队列的写入权限;以及所述依次从所述时序队列中应用线程的标识对应的应用线程的缓存中读取一个重做数据写入重做队列之后释放所述重做队列的队列锁。结合第一方面或第一方面的第一种可能的实现方式或第一方面的第二种可能的实现方式,在第三种可能的实现方式中,该方法还包括,所述重做队列处理单元,进一步的用于:所述依次从所述时序队列中应用线程的标识对应的应用线程的缓存中读取一个重做数据写入重做队列之前获取所述时序队列的队列锁以锁定所述时序队列,以及所述依次从所述时序队列中应用线程的标识对应的应用线程的缓存中读取一个重做数据写入重做队列之后释放所述时序队列的队列锁;或者所述依次从所述时序队列中应用线程的标识对应的应用线程的缓存中读取一个重做数据写入重做队列之前给所述时序队列的队尾元素添加读取结束标识。结合第一方面以及第一方面的第一至第三种可能的实现方式中的任意一个,在第四种可能的实现方式中,该方法还包括:所述重做队列处理单元,在从所述时序队列中应用线程的标识对应的应用线程的缓存中读取一个重做数据写入重做队列之后进一步的还用于将所述应用线程的标识从所述时序队列中删除。由以上技术方案可以看出,由于本专利技术实施例利用应用线程生成重做数据后保存到为应用线程分配的缓存,并将应用线程的标识保存到时序队列,满足数据读取条件后才从所述时序队列中读取所述应用线程的标识的顺序依次将应用线程的缓存中的重做数据读取到重做队列,从而提高了重做数据的处理效率,提升了数据库系统的并发吞吐量。附图说明为了更清楚地说明本专利技术实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本专利技术的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。图1为本专利技术一个实施例提供的数据库重做数据的处理方法流程图;图2为本专利技术另一个实施例提供的数据库重做数据的处理方法信令流程图;图3为本专利技术一个实施例提供的数据库重做数据的处理装置结构图;图4为本专利技术一个实施例提供的基于计算机系统的数据库重做数据的处理装置结构图。具体实施例方式下面将结合本专利技术实施例中的附图,对本专利技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本专利技术本文档来自技高网...

【技术保护点】
一种处理数据库重做数据的方法,应用于服务器中,所述服务器中运行有数据读取线程以及多个应用线程,所述多个应用线程以并发的方式修改数据库,其特征在于,所述方法包括:所述多个应用线程中每一应用线程根据修改数据库的操作生成重做数据,并将所述重做数据相应保存到为所述每一应用线程分配的缓存中,获取时序队列锁后将所述应用线程的标识保存到时序队列,所述保存结束后释放所述时序队列锁;所述数据读取线程确定数据读取条件得到满足,从所述时序队列中读取所述应用线程的标识的顺序,依次从所述时序队列中应用线程的标识对应的应用线程的缓存中读取一个重做数据写入重做队列。

【技术特征摘要】
1.一种处理数据库重做数据的方法,应用于服务器中,所述服务器中运行有数据读取线程以及多个应用线程,所述多个应用线程以并发的方式修改数据库,其特征在于,所述方法包括: 所述多个应用线程中每一应用线程根据修改数据库的操作生成重做数据,并将所述重做数据相应保存到为所述每一应用线程分配的缓存中,获取时序队列锁后将所述应用线程的标识保存到时序队列,所述保存结束后释放所述时序队列锁; 所述数据读取线程确定数据读取条件得到满足,从所述时序队列中读取所述应用线程的标识的顺序,依次从所述时序队列中应用线程的标识对应的应用线程的缓存中读取一个重做数据写入重做队列。2.根据权利要求1所述的方法,其特征在于: 所述数据读取条件为到达预定的时间周期,或所述时序队列的长度达到预定值,或所述应用线程的缓存数据量达到预定值。3.根据权利要求1或2所述的方法,其特征在于: 所述依次从所述时序队列中应用线程的标识对应的应用线程的缓存中读取一个重做数据写入重做队列之前,进一步包括获取所述重做队列的队列锁,以获得对所述重做队列的写入权限; 所述依次从所述时序队列中应用线程的标识对应的应用线程的缓存中读取一个重做数据写入重做队列之后,进一步包括释放所述重做队列的队列锁。4.根据权利要求1、2或3所述的方法,其特征在于: 所述依次从所述时序队列中应用线程的标识对应的应用线程的缓存中读取一个重做数据写入重做队列之前还包括获取所述时序队列的队列锁以锁定所述时序队列,以及所述依次从所述时序队列中应用线程的标识对应的应用线程的缓存中读取一个重做数据写入重做队列之后还包括释放所述时序队列的队列锁; 或者所述依次从所述时序队列中应用线程的标识对应的应用线程的缓存中读取一个重做数据写入重做队列之前还包括给所述时序队列的队尾元素添加读取结束标识。5.根据权利要求1-4任一所述的方法,其特征在于,所述从所述时序队列中应用线程的标识对应的应用线程的缓存中读取一个重做数据写入重做队列之后还包括: 将所述应用线程的标识从所述时序队列中删除。6.一种处理数据库重做数据的服务器,所述服务器中运行有多个应用线程,所述多个应用线程以并发的方式修改数据...

【专利技术属性】
技术研发人员:王南
申请(专利权)人:华为技术有限公司
类型:发明
国别省市:

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

1