【技术实现步骤摘要】
本专利技术涉及计算机数据库领域,更具体的,涉及一种数据库事务处理方法与装置。
技术介绍
数据库事务是DBMS(database management system,数据库管理系统)执行过程中的一个逻辑单位,由一个或者多个操作序列构成。它保证了多个操作之间的原子性,即要么全做,要么全不做。典型的例子就是银行的转账功能,即甲向乙转账100元,那么甲的账户减去100元和乙的账户增加100元这两次数据的操作应该算是一件事,即一个事务,否则将有可能造成数据丢失的风险。传统的数据库如Postgresql,一个事务只属于一个用户进程或线程,即当一个用户连接至数据库时,数据库将启动一个单独的用户进程服务于该用户,该用户所启动的所有事务都必须在这个进程里开始和结束,且该进程在当前操作完成前不能做其他的事情。那么当一定数量的用户登录该数据库的时候将会有很多的进程同时工作于该机器上,且过多进程或多线程之间调度对机器性能的影响是非常大的。因此,现有技术中存在因单个线程服务单个用户的模式而导致的线程利用率低下的问题。
技术实现思路
本专利技术提供一种数据库事务处理方法与装置,用于解决现有技术中存在的因单个线程服务单个用户的模式而导致的线程利用率低下的问题。为实现上述目的,根据本专利技术的一个方面,提供一种数据库事务处理方法,并采用以下技术方案:数据库事务处理方法包括:判断第一事务中的用户是否处于工作状态,得r>出第一判断结果;在所述第一判断结果为所述用户处于非工作状态时,控制所述第一事务处于暂停状态,并将所述第一事务所对应的线程给其他用户使用;判断所述用户是否返回工作状态,并得出第二判断结果;在所述第二判断结果为所述用户返回工作状态时,调用所述第一事务,并在任一空闲线程上执行所述第一事务。进一步地,所述判断第一事务中的用户是否处于工作状态包括:构造第一结构体,用于在所述第一结构体中定义所述第一事务中的全局变量为成员变量;判断所述第一事务是否启动,并得出第三判断结果;在所述第三判断结果为所述第一事务启动时,保存所述第一结构体至一预设的全局列表,然后返回一标识给所述第一事务,所述标识用于从所述全局列表中调用所述第一事务。进一步地,所述判断所述第一事务是否启动包括:判断第二结构中所述第一事务的初始状态是否发生了变化,并得到第四判断结果;在所述第四判断结果为所述初始状态发生变化时,确认所述第一事务已启动;其中,所述第二结构体为系统启动的时候构造的一个全局默认的结构体,用于定义所有事务启动时候的初始状态。进一步地,所述控制所述第一事务处于暂停状态包括:读取所述第一事务在所述线程的初始化默认值;设置第二事务的初始化值为所述默认值,其中,所述第二事务为在所述第一事务暂停后使用所述线程的事务。进一步地,所述调用所述第一事务包括:根据所述标识从所述全局列表中调出所述第一事务。进一步地,所述在任一空闲线程上执行所述第一事务之后,所述事务处理方法包括:判断所述第一事务是否结束,并得出第五判断结果;在所述第五判断结果为所述第一事务结束时,将所述第一事务从所述列表中移除。根据本专利技术的另外一个方面,提供一种数据库事务处理装置,并采用如下技术方案:数据库事务处理装置包括:第一判断模块,用于判断第一事务中的用户是否处于工作状态,得出第一判断结果;控制模块,用于在所述第一判断结果为所述用户处于非工作状态时,控制所述第一事务处于暂停状态,并将所述第一事务所对应的线程给其他用户使用;第二判断模块,判断所述用户是否返回工作状态,并得出第二判断结果;调用模块,用于在所述第二判断结果为所述用户返回工作状态时,调用所述第一事务,并在任一空闲线程上执行所述第一事务。进一步地,所述第一判断模块包括:构造模块,用于构造第一结构体,用于在所述第一结构体中定义所述第一事务中的全局变量为成员变量;第三判断模块,用于判断所述第一事务是否启动,并得出第三判断结果;保存模块,用于在所述第三判断结果为所述第一事务启动时,保存所述第一结构体至一预设的全局列表,然后返回一标识给所述第一事务,所述标识用于从所述全局列表中调用所述第一事务。进一步地,所述第三判断模块包括:第四判断模块,用于判断第二结构中所述第一事务的初始状态是否发生了变化,并得到第四判断结果;确认模块,用于在所述第四判断结果为所述初始状态发生变化时,确认所述第一事务已启动;其中,所述第二结构体为系统启动的时候构造的一个全局默认的结构体,用于定义所有事务启动时候的初始状态。进一步地,所述控制模块包括:读取模块,用于读取所述第一事务在所述线程的初始化默认值;设置模块,用于设置第二事务的初始化值为所述默认值,其中,所述第二事务为在所述第一事务暂停后使用所述线程的事务通过本专利技术的上述技术方案,可以让事务跨线程工作,将每一个活动的事务都保存起来,在需要的时候再将其拿出,附加到一个线程上接着执行。这样提高单个线程的利用率,让单个线程可不间断的服务于多个用户,总体上使得少量的线程同时服务于大量的用户,同时也提高了CPU的利用率,降低了因过多的线程调度对机器造成的性能负担。附图说明附图用来提供对本专利技术的进一步理解,构成本申请的一部分,本专利技术的示意性实施例及其说明用于解释本专利技术,并不构成对本专利技术的不当限定。在附图中:图1表示本专利技术实施例所述的数据库事务处理方法流程图;图2表示本专利技术实施例所述的数据库事务处理装置的结构示意图;图3表示本专利技术实施例所述的第一判断模块的结构示意图;图4表示本专利技术实施例所述的第三判断模块的结构示意图;图5表示本专利技术实施例所述的控制模块的结构示意图。具体实施方式以下结合附图对本专利技术的实施例进行详细说明,但是本专利技术可以由权利要求限定和覆盖的多种不同方式实施。图1表示本专利技术实施例所述的数据库事务处理方法流程图。参见图1所示,数据库事务处理方法包括:S101:判断第一事务中的用户是否处于工作状态,得出第一判断结果;S103:在所述第一判断结果为所述用户处于非工作状态时,控制所述第一事务处于暂停状态,并将所述第一事务所对应的线程给其他用户使用;S105:判断所述用户是否返回工作状态,并得出第二判断结果;S107:在所述第二判断结果为所述用户返回工作状态时,调用所述第一事务,并在任一空闲线程上执行所述第一事务。数据库事务是DBMS(database management system,数本文档来自技高网...
【技术保护点】
一种数据库事务处理方法,其特征在于,包括:判断第一事务中的用户是否处于工作状态,得出第一判断结果;在所述第一判断结果为所述用户处于非工作状态时,控制所述第一事务处于暂停状态,并将所述第一事务所对应的线程给其他用户使用;判断所述用户是否返回工作状态,并得出第二判断结果;在所述第二判断结果为所述用户返回工作状态时,调用所述第一事务,并在任一空闲线程上执行所述第一事务。
【技术特征摘要】
1.一种数据库事务处理方法,其特征在于,包括:
判断第一事务中的用户是否处于工作状态,得出第一判断结果;
在所述第一判断结果为所述用户处于非工作状态时,控制所述第一事务处
于暂停状态,并将所述第一事务所对应的线程给其他用户使用;
判断所述用户是否返回工作状态,并得出第二判断结果;
在所述第二判断结果为所述用户返回工作状态时,调用所述第一事务,并
在任一空闲线程上执行所述第一事务。
2.如权利要求1所述的数据库事务处理方法,其特征在于,所述判断第一
事务中的用户是否处于工作状态包括:
构造第一结构体,用于在所述第一结构体中定义所述第一事务中的全局变
量为成员变量;
判断所述第一事务是否启动,并得出第三判断结果;
在所述第三判断结果为所述第一事务启动时,保存所述第一结构体至一预
设的全局列表,然后返回一标识给所述第一事务,所述标识用于从所述全局列
表中调用所述第一事务。
3.如权利要求2所述的数据库事务处理方法,其特征在于,所述判断所
述第一事务是否启动包括:
判断第二结构中所述第一事务的初始状态是否发生了变化,并得到第四判
断结果;
在所述第四判断结果为所述初始状态发生变化时,确认所述第一事务已启
动;
其中,所述第二结构体为系统启动的时候构造的一个全局默认的结构体,
用于定义所有事务启动时候的所述初始状态。
4.如权利要求3所述的数据库事务处理方法,其特征在于,所述控制所
述第一事务处于暂停状态包括:
读取所述第一事务在所述线程的初始化默认值;
设置第二事务的初始化值为所述默认值,其中,所述第二事务为在所述第
\t一事务暂停后使用所述线程的事务。
5.如权利要求3所述的事务处理方法,其特征在于,所述调用所述第一
事务包括:
根据所述标识从所述全局列表中调出所述第一事务。
6.如权利要求3所述的事务处理方法,其特征在于,所述在任一空闲线
程上执行所述第一事务之后,所述事务处理方法...
【专利技术属性】
技术研发人员:何奇,郑程光,郭春庭,王浩,刘慧娟,胡选来,
申请(专利权)人:方正信息产业控股有限公司,上海方正数字出版技术有限公司,
类型:发明
国别省市:北京;11
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。