处理数据库事务的方法、客户端和服务器技术

技术编号:17032797 阅读:49 留言:0更新日期:2018-01-13 19:20
本发明专利技术提供一种处理数据库事务的方法、客户端与服务器,该方法包括:服务器接收客户端发送用于请求目标数据的数据库访问请求;向客户端发送目标数据的第一版本,第一版本为服务器当前存储的目标数据的版本,服务器中只保存目标数据的最近一次提交更新的版本;接收客户端基于第一版本执行完第一事务后发送的事务提交请求,事务提交请求中包括用于记录第一事务的数据操作的日志;根据日志,在确定第一事务的数据操作与服务器当前存储的目标数据的版本不存在数据冲突的情况下,按照第一事务的数据操作修改服务器当前存储的目标数据的版本,获得目标数据的提交更新的版本。本发明专利技术实现了无锁事务机制,降低数据库的存储管理复杂度。

【技术实现步骤摘要】
处理数据库事务的方法、客户端和服务器
本专利技术涉及数据库
,并且更具体地,涉及一种处理数据库事务的方法、客户端和服务器。
技术介绍
当多个用户同时访问数据库时,会产生多个事务并发操作同一数据的情况,若对这种并发操作不加控制就可能会产生在数据库中存取不正确数据的问题,破坏事务与数据库的一致性。封锁是实现并发控制的一个非常重要的技术。所谓封锁就是事务T对某个数据操作之前,先向系统发出对其加锁的请求,加锁后事务T就对该数据有了一定的控制,在事务T释放它的锁之前,其他事务均不能对该数据进行操作。封锁对象的大小称为封锁粒度。封锁对象可以是逻辑单元,也可以是物理单元。上述封锁的技术也称为锁机制(Lock)。在锁机制中,读会阻塞写,写也会阻塞读,当封锁粒度较大时,会降低数据库的访问实时性,导致修改同一数据时阻塞较大。而且同一数据的读写冲突会产生功能长时间阻塞,容易产生死锁问题,需要定期做死锁检测。针对锁机制存在的问题,当前技术提出了多版本并发控制(MultiversionConcurrencyControl,MVCC)的事务机制。一般把基于锁的并发控制机制称为悲观机制,而把MVCC机制称为乐观机制。在MVCC中,为同一数据维护多个版本(每个版本对应一个时间戳),即这个数据被修改提交一次就生成一个新的版本,同一数据的多个版本之间的串行化使用时间戳(或版本号)或事务标识ID的方式来支持。对于要对该数据进行读操作的事务T来说,总是可以提供时间戳与事务T的开始时刻相一致的版本,不管这个事务T执行的时间有多长,该事务T始终看到的是该数据的同一个版本,即使在该事务T执行期间该数据被其他事务修改了,该事务T也不会出现“脏”读或幻读的现象。因此,MVCC通过为同一数据维护多个版本,实现了读操作与写操作并发而互不影响,也可以支持多个读操作并发而互不影响。但是,为同一数据维护多个版本的方式并不能解决并发的写操作与写操作之间的冲突。在MVCC中,还是利用加锁的方式解决来写操作的冲突问题。如果一个事务对一个数据执行写操作,该数据就被锁定,在该事务释放它的锁之前,其他事务均不能对该数据进行操作,即多个写操作会串行执行,因此不会存在冲突。上述可知,现有的MVCC机制相对于传统的锁机制,避免了读阻塞写,写阻塞读,但是还是无法避免写阻塞写。此外,在现有的MVCC技术中,由于需要存储同一数据的多个版本,导致数据库的存储管理较为复杂,而且还需要定期清理不再需要的版本以回收空间,也增加了额外的开销。
技术实现思路
本专利技术提供了一种处理数据库事务的方法、客户端和服务器,实现了一种能够支持多个读操作和/或写操作同时并发的无锁事务机制,并且能够降低数据库的存储管理复杂度。第一方面提供了一种处理数据库事务的方法,该方法包括:服务器接收客户端发送的数据库访问请求,所述数据库访问请求用于请求目标数据;所述服务器基于所述数据库访问请求,向所述客户端发送所述目标数据的第一版本,所述第一版本为所述服务器当前存储的所述目标数据的版本,所述服务器只保存所述目标数据的最近一次提交更新的版本;所述服务器接收所述客户端基于所述第一版本执行完第一事务后发送的事务提交请求,所述事务提交请求用于请求提交所述第一事务,所述事务提交请求中包括用于记录所述第一事务的数据操作的日志;所述服务器根据所述日志,在确定所述第一事务的数据操作与所述服务器当前存储的所述目标数据的版本不存在数据冲突的情况下,按照所述第一事务的数据操作修改所述服务器当前存储的所述目标数据的版本,获得所述目标数据的提交更新的版本,以完成所述第一事务的提交。在本专利技术技术方案中,所述服务器只保存所述目标数据的最近一次提交更新的版本,因此,所述服务器当前存储的所述目标数据的版本自然是所述目标数据的最近一次提交更新的版本。本专利技术中描述的所述服务器当前存储的所述目标数据的版本是动态的概念,例如在时刻t1,所述服务器当前存储的所述目标数据的版本指的是t1对应的当前时刻所述服务器存储的所述目标数据的版本;在时刻t2,所述服务器当前存储的所述目标数据的版本指的是t2对应的当前时刻所述服务器存储的所述目标数据的版本。所述目标数据的最近一次提交更新的版本指的是所述目标数据的最近一次经过要提交的事务的修改操作之后的版本,即所述目标数据的最近一次提交更新的版本满足事务与数据库的一致性。所述第一事务的数据操作与所述服务器当前存储的所述目标数据的版本不存在数据冲突指的是,所述第一事务的数据操作与所述服务器当前存储的所述目标数据的版本的最近一次修改操作之间没有冲突,使得按照第一事务的数据操作修改所述服务器当前存储的目标数据的版本,不会破坏事务与数据库的一致性。在本专利技术技术方案中,服务器接收到客户端发送的请求目标数据的数据库访问请求后,通过向客户端发送目标数据的第一版本,该第一版本为服务器当前存储的目标数据的版本,且该版本为目标数据的最近一次提交更新的版本,使得可以在客户端本地缓存中基于该第一版本完成事务的执行;在接收到客户端发送的事务提交请求时,在确定要提交的事务的数据操作与服务器中当前存储的该目标数据的版本不存在数据冲突的情况下,按照要提交的事务的数据操作修改服务器当前存储的该目标数据的版本,获得该目标数据的提交更新的版本,以完成事务的提交。应理解,通过向客户端发送目标数据的第一版本,使得在客户端执行事务,能够保证并发事务之间的隔离性,即实现了并发的读操作之间没有影响,并发的读操作与写操作之间也没有影响,并发的写操作与写操作之间也没有影响。在服务器提交事务,并在确定待提交的事务的数据操作与服务器当前存储的目标数据的版本不存在数据冲突的情况下,才执行事务的提交,能够保证事务与数据库的一致性。此外,通过在客户端基于目标数据的第一版本执行事务,使得服务器上对该目标数据无需维护多个版本,只需维护该目标数据的最近一次提交更新的版本即可,相对于现有的MVCC技术,本专利技术能够有效降低数据库的存储管理复杂度,从而减小服务器的存储负担。因此,本专利技术提供了一种能够支持多个读操作和/或写操作同时并发的无锁事务机制,并且能够有效降低数据库的存储管理复杂度。结合第一方面,在第一方面的第一种可能的实现方式中,所述第一事务的数据操作包括插入操作,所述日记中包括所述插入操作对应的主关键字(PrimaryKey),所述方法还包括:在所述服务器当前存储的所述目标数据的版本中不存在所述主关键字的情况下,所述服务器确定所述第一事务的数据操作与所述服务器当前存储的所述目标数据的版本不存在数据冲突。具体地,所述服务器当前存储的所述目标数据的版本中不存在所述插入操作对应的主关键字指的是,所述服务器当前存储的所述目标数据的版本中的所有记录的主关键字的值均与所述插入操作对应的主关键字的值不同。应理解,主关键字(PrimaryKey)通常是表中的一个或多个字段,它的值用于唯一标识表中的某一条记录。主关键字是一种唯一关键字,表定义的一部分。主关键字的值不可重复,例如,关系数据库管理系统MicrosoftOfficeAccess在表中添加新记录时,会自动检查该新记录的主关键字的值,不允许该新记录的主关键字的值与表中其他记录的主关键字的值重复。主关键字也不可为空(NULL)。主关键字能够加快数据本文档来自技高网
...
处理数据库事务的方法、客户端和服务器

【技术保护点】
一种处理数据库事务的方法,其特征在于,包括:服务器接收客户端发送的数据库访问请求,所述数据库访问请求用于请求目标数据;所述服务器基于所述数据库访问请求,向所述客户端发送所述目标数据的第一版本,所述第一版本为所述服务器当前存储的所述目标数据的版本,所述服务器中只保存所述目标数据的最近一次提交更新的版本;所述服务器接收所述客户端基于所述第一版本执行完第一事务后发送的事务提交请求,所述事务提交请求用于请求提交所述第一事务,所述事务提交请求中包括用于记录所述第一事务的数据操作的日志;所述服务器根据所述日志,在确定所述第一事务的数据操作与所述服务器当前存储的所述目标数据的版本不存在数据冲突的情况下,按照所述第一事务的数据操作修改所述服务器当前存储的所述目标数据的版本,获得所述目标数据的提交更新的版本,以完成所述第一事务的提交。

【技术特征摘要】
1.一种处理数据库事务的方法,其特征在于,包括:服务器接收客户端发送的数据库访问请求,所述数据库访问请求用于请求目标数据;所述服务器基于所述数据库访问请求,向所述客户端发送所述目标数据的第一版本,所述第一版本为所述服务器当前存储的所述目标数据的版本,所述服务器中只保存所述目标数据的最近一次提交更新的版本;所述服务器接收所述客户端基于所述第一版本执行完第一事务后发送的事务提交请求,所述事务提交请求用于请求提交所述第一事务,所述事务提交请求中包括用于记录所述第一事务的数据操作的日志;所述服务器根据所述日志,在确定所述第一事务的数据操作与所述服务器当前存储的所述目标数据的版本不存在数据冲突的情况下,按照所述第一事务的数据操作修改所述服务器当前存储的所述目标数据的版本,获得所述目标数据的提交更新的版本,以完成所述第一事务的提交。2.根据权利要求1所述的方法,其特征在于,所述第一事务的数据操作包括插入操作,所述日记中包括所述插入操作对应的主关键字,所述方法还包括:在所述服务器当前存储的所述目标数据的版本中不存在所述主关键字的情况下,所述服务器确定所述第一事务的数据操作与所述服务器当前存储的所述目标数据的版本不存在数据冲突。3.根据权利要求1所述的方法,其特征在于,所述第一事务的数据操作包括更新操作或删除操作,所述事务提交请求中还包括所述第一版本的时间戳,所述方法还包括:在所述服务器当前存储的所述目标数据的版本的时间戳与所述第一版本的时间戳一致的情况下,所述服务器确定所述第一事务的数据操作与所述服务器当前存储的所述目标数据的版本不存在数据冲突。4.根据权利要求1至3中任一项所述的方法,其特征在于,在所述服务器获得所述目标数据的提交更新的版本之后,所述方法还包括:所述服务器为所述目标数据的提交更新的版本设置新的时间戳。5.根据权利要求1至4中任一项所述的方法,其特征在于,所述方法还包括:在确定所述第一事务的数据操作与所述服务器当前存储的所述目标数据的版本存在数据冲突的情况下,所述服务器向所述客户端发送用于指示所述第一事务的提交无效的响应。6.一种处理数据库事务的方法,其特征在于,包括:客户端获取用于请求执行第一事务的事务请求,所述第一事务要基于目标数据进行执行;所述客户端向服务器发送用于请求所述目标数据的数据库访问请求;所述客户端接收所述服务器发送的所述目标数据的第一版本,所述第一版本为所述服务器当前存储的所述目标数据的版本,所述服务器当前存储的所述目标数据的版本为所述目标数据的最近一次提交更新的版本;所述客户端基于所述第一版本执行所述第一事务;在执行完所述第一事务后,所述客户端向所述服务器发送事务提交请求,所述事务提交请求用于请求提交所述第一事务,所述事务提交请求中包括用于记录所述第一事务的数据操作的日志,以使得所述客户端根据所述日志,在确定所述第一事务的数据操作与所述服务器当前存储的所述目标数据的版本不存在数据冲突的情况下,按照所述第一事务的数据操作修改所述服务器当前存储的所述目标数据的版本,获得所述目标数据的提交更新的版本,以完成所述第一事务的提交。7.根据权利要求6所述的方法,其特征在于,所述第一事务的数据操作包括插入操作,所述日记中包括所述插入操作对应的主关键字。8.根据权利要求6所述的方法,其特征在于,所述第一事务的数据操作包括更新操作或删除操作,所述事务提交请求中还包括所述第一版本的时间戳。9.一种服务器,其特征在于,包括:接收模块,用于接收客户端发...

【专利技术属性】
技术研发人员:彭勇飞
申请(专利权)人:华为技术有限公司
类型:发明
国别省市:广东,44

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

1