一种数据记录并发操作请求的控制方法及装置
技术领域
本申请涉及计算机技术领域,尤其涉及一种数据记录并发操作请求的控制方法及装置。
背景技术
在数据库操作中,对于热点数据可能存在大规模的并发操作,如果这些并发操作只是读取数据,数据库服务器一般还可以支持,但如果需要对数据进行修改或者删除,为了保证数据记录的正确性,需要对数据库的操作进行必要的控制。
目前,对于数据库中数据记录的操作,如果涉及到对数据记录的修改或者删除,需要在客户端发送的请求中增加行锁指令,服务器会根据该指令锁定该数据记录。在数据记录锁定期间,其他对该数据记录的并发请求不能直接对该数据记录进行修改和删除,只能读取该数据记录。一般而言,数据记录是指数据库中的一行数据,锁定该数据记录的锁称为行锁或者行级锁。
分账对于目前网络购物网站而言,非常重要。用户在购物的过程中,可能在购物网站的多个入住商户购买了商品并进行一次性的支付。在完成支付之后,入住商户需要与购物网站进行分账,将属于自己的金额划出。在用户所购买的商品涉及过多的商户时,分账的过程会存在大规模的并发请求,如何处理分账过程中的并发请求是网络购物网站需要解决的问题之一。
发明内容
有鉴于此,本申请实施例提供了一种确定清算渠道的方法及装置,用于解决现有技术中无法动态确定清算渠道的问题。
本申请实施例采用下述技术方案:
本申请实施例提供了一种数据记录并发操作请求的控制方法,包括:
接收数据记录操作请求,其中该数据记录请求包含行锁指令;
确定所述数据记录是否被锁定;如果所述数据记录被锁定,则将所述数据记录操作请求放入调度队列,否则锁定所述数据记录或者将所述数据记录操作请求放入调度队列。
可选地,确定所述数据记录是否被锁定包括:
确定所述数据记录操作请求的计数器的值与初始值相比是否发生改变,如果计数器的值发生改变则确定所述数据记录被锁定,并保持所述数据记录操作请求的计数器的值,否则确定所述数据记录未被锁定,并改变所述数据记录操作请求的计数器的值。
可选地,该方法还包括:
被锁定的数据记录操作完毕后,将所述数据记录操作请求的计数器的值恢复为初始值。
可选地,确定所述数据记录是否被锁定包括:
确定所述数据记录操作请求的计数器的值与调度队列中数据记录操作请求的数量是否相同,如果不同则确定所述数据记录被锁定,并继续改变数据记录操作请求的计数器的值,否则确定所述数据记录未被锁定,并改变所述数据记录操作请求的计数器的值。
可选地,被锁定的数据记录操作完毕后,改变所述数据记录操作请求的计数器的值。
可选地,所述操作为修改或删除。
可选地,所述数据记录操作请求的计数器为加法计数器或者减法计数器。
可选地,该方法还包括:
被锁定的数据记录操作完毕后,释放所述数据记录。
可选地,根据调度方式对调度队列中的数据记录请求进行调度包括:
被锁定的数据记录操作完毕后,从调度队列中选择一个数据记录操作请求;
锁定所述数据记录并操作。
可选地,该方法还包括:
以先进先出的方式从调度队列中选择一个数据记录操作请求。
可选地,所述从调度队列中选择一个数据记录操作请求包括:
以后进先出的方式从调度队列中选择一个数据记录操作请求。
可选地,所述调度队列为顺序队列或者循环队列。
本申请实施例提供了一种数据记录并发操作请求的控制方法,包括:
确定已发送的数据记录操作请求是否被处理完毕,如果是则发送新的数据记录操作请求,否则等待已发送的数据记录操作请求被处理完毕;
其中,所述已发送的数据记录操作请求包括行锁指令,所述新的数据记录操作请求包括行锁指令;
所述已发送的数据记录操作请求以及所述新的数据记录操作请求用于操作相同的数据记录。
可选地,所述确定已发送的数据记录操作请求是否被处理完毕包括:
确定所述数据记录操作请求的计数器的值与初始值相比是否发生改变,如果数据记录操作请求的计数器的值发生改变则确定已发送的数据记录操作请求未被处理完毕,否则确定已发送的数据记录操作请求被处理完毕。
可选地,该方法还包括:
收到已发送的数据记录操作请求的响应后,将所述数据记录操作请求的计数器的值恢复为初始值。
本申请实施例提供了一种数据记录并发操作请求的控制装置,包括:
接收模块,用于接收数据记录操作请求,其中该数据记录请求包含行锁指令;
确定模块,用于确定所述数据记录是否被锁定;如果所述数据记录被锁定,则将所述数据记录操作请求放入调度队列,否则锁定所述数据记录或者将所述数据记录操作请求放入调度队列。
可选地,所述确定模块,还用于确定所述数据记录操作请求的计数器的值与初始值相比是否发生改变,如果计数器的值发生改变则确定所述数据记录被锁定,否则确定所述数据记录未被锁定;
该装置还包括计数器控制模块,用于在所述数据记录被锁定时保持所述数据记录操作请求的计数器的值,在所述数据记录未被锁定时改变所述数据记录操作请求的计数器的值。
可选地,计数器控制模块,还用于在被锁定的数据记录操作完毕后,将所述数据记录操作请求的计数器的值恢复为初始值。
可选地,所述确定模块,还用于确定所述数据记录操作请求的计数器的值与调度队列中数据记录操作请求的数量是否相同,如果不同则确定所述数据记录被锁定,否则确定所述数据记录未被锁定;
该装置还包括计数器控制模块,用于根据接收的数据记录操作请求或者处理完毕的数据记录操作请求改变数据记录操作请求的计数器的值。
可选地,所述操作为修改或删除。
可选地,所述数据记录操作请求的计数器为加法计数器或者减法计数器。
可选地,该装置还包括:释放模块,用于在被锁定的数据记录操作完毕后,释放所述数据记录。
可选地,该装置还包括:选择模块,用于在被锁定的数据记录操作完毕后,从调度队列中选择一个数据记录操作请求;
所述确定模块,还用锁定所选择的数据记录操作请求。
可选地,所述选择模块,还用于以先进先出的方式从调度队列中选择一个数据记录操作请求。
可选地,所述选择模块,还用于以后进先出的方式从调度队列中选择一个数据记录操作请求。
可选地,所述调度队列为顺序队列或者循环队列。
本申请实施例提供了一种数据记录并发操作请求的控制装置,包括:
确定模块,用于确定已发送的数据记录操作请求是否被处理完毕;
发送模块,用于在已发送的数据记录操作请求被处理完毕时,发送新的数据记录操作请求;
等待模块,用于在已发送的数据记录操作请求未被处理完毕时,等待已发送的数据记录操作请求被处理完毕;
其中,所述已发送的数据记录操作请求包括行锁指令,所述新的数据记录操作请求包括行锁指令。
可选地,确定模块,还用于确定所述数据记录操作请求的计数器的值与初始值相比是否发生改变,如果数据记录操作请求的计数器的值发生改变则确定已发送的数据记录操作请求未被处理完毕,否则确定已发送的数据记录操作请求被处理完毕。
可选地,该装置还包括:初始化模块,用于收到已发送的数据记录操作请求的响应后,将所述数据记录操作请求的计数器的值恢复为初始值。
本申请实施例提供了一种数据记录并发操作请求的控制装置,包括:处理器和存储器,所述存储器存储有程序;
所述处理器,用于执行所述程序以实现所述的方法。
本申请实施例采用的上述至少一个技术方案能够达到以下有益效果:本申请通过并发请求串行处理,能够避免透支问题,并且能够提高数据记录操作的成功率,从而实现安全有保障地进行并发请求的串行处理,不破坏原业务处理逻辑中的锁控制机制。
附图说明
此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:
图1为本申请实施例提供的数据记录并发操作请求的控制方法示意图;
图2为本申请实施例提供的数据记录并发操作请求的控制方法示意图;
图3为本申请第一实施例提供的数据记录并发操作请求的控制方法示意图;
图4为本申请第二实施例提供的数据记录并发操作请求的控制方法示意图;
图5为本申请第三实施例提供的数据记录并发操作请求的控制方法示意图;
图6为本申请第四实施例提供的数据记录并发操作请求的控制装置示意图;
图7为本申请第五实施例提供的数据记录并发操作请求的控制装置示意图;
图8为本申请第五实施例提供的数据记录并发操作请求的控制装置示意图。
具体实施方式
为使本申请的目的、技术方案和优点更加清楚,下面将结合本申请具体实施例及相应的附图对本申请技术方案进行清楚、完整地描述。显然,所描述的实施例仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
以下结合附图,详细说明本申请各实施例提供的技术方案。
为了解决并发过程中,数据记录的修改或者删除所存在的问题,现有技术中具有如下两种技术方案:
第一种技术方案:在数据记录被锁定时,并发的数据记录操作请求读取该数据记录,并增加一条流水记录。数据库服务器在等待一定的时间之后,可以对流水记录进行汇总,并进而更新对应的数据记录。但是,由于数据记录(也称为主数据记录,与流水记录区别开来)的更新滞后,可能存在入账和出账不匹配等问题。例如在扣款的过程中,商户扣款的总额超出了用户支付的总额,数据库服务器并不能及时发现,从而导致入账总额和出账总额不一致。
第二种方案:在数据记录被锁定时,并发的数据记录操作请求读取该数据记录,并读取该数据记录的版本;商户在对该数据记录进行更新时,商户会将版本的记录增加1,在该数据记录的版本比数据库里的版本记录高时才允许更新,否则更新失败。
现有技术中的上述两种技术方案存在一定的问题,例如第一种方案会发生透支,而第二种方案的更新失败率比较高。
图1示出了本申请实施例提供的数据记录并发操作请求的控制方法示例图,具体包括:
步骤S105,接收数据记录操作请求,其中该数据记录请求包含行锁指令;在实施本申请技术方案的过程中,为了确保数据库中数据记录修改或者删除的正确性,数据库对数据记录操作进行响应时,需要对数据记录进行锁定,避免其他数据记录的操作请求对该数据记录进行修改。
具有行锁指令的数据操作请求的示例如下:
select*from gl_account_document where id=80128for update;
update gl_account_document set value=30where id=80128;
步骤S110,确定所述数据记录是否被锁定;
数据记录锁定(LockType),可用于锁定数据记录,这样当一个更新开始之前就可以去检查数据的锁定属性。
步骤S115,如果所述数据记录被锁定,则将所述数据记录操作请求放入调度队列;
调度队列的功能就是用于储存待处理的数据,待当前数据被处理完毕后,从队列中按照某种规则选取下一个即将进行处理的数据。
如果数据记录还在锁定状态,为避免更新冲突,新的数据记录操作请求需要等待,因此,将需要等待的数据记录操作请求放入调度队列中,等待数据记录处理完毕后,再从调度队列中调取最先存入的数据进行锁定处理。
步骤S120,锁定所述数据记录或者将所述数据记录操作请求放入调度队列。
当接收到一个新的数据记录操作请求时,在已经判定数据记录未被锁定时,继续判断调度队列中是否存在待处理的数据记录操作请求,如果不存在,则锁定新的数据记录;若存在,则应该优先处理调度队列中的数据记录操作请求,并将新的数据记录操作请求放入调度队列中。
例如:收到数据记录操作请求D,通过判定目前没有被锁定的数据记录,调度队列X中也不存在待处理的数据记录操作请求,此时,锁定数据记录D;当调度队列X中存在数据记录操作请求A,此时,应该优先将调度队列X中的数据记录A调取出来进行锁定处理,并将数据记录操作请求D存入调度队列中。
客户端将数据操作请求发送至服务器后,服务器会根据用户的数据记录操作请求按照指令逐条地发送给数据库引擎进行执行,数据库引擎是数据库服务器的一部分,其负责对数据库进行直接操作。引擎执行后会向服务器返回指令执行的结果,例如用户发送的操作请求中包含行锁指令,服务器会将该指令发送至数据库引擎,数据库引擎对该指令执行锁定,并返回锁定的结果,例如锁定成功。
本申请实施例中引入了调度队列,如果调度队列为空且数据记录未被锁定,则可以直接执行数据记录操作请求来锁定数据记录。如果调度队列非空且数据记录未被锁定,可以将数据记录操作请求放入调度队列,按照调度方式进行调度。可选地,如果调度队列非空且数据记录未被锁定,也可以将数据记录锁定。
本申请实施例中,为了便于服务器判断数据记录是否被锁定,服务器可以根据数据记录操作请求来设置计数器。
可选地,该计数器可以只有两个值,例如0和1;例如,在数据记录没有被锁定时,其值为0,在数据记录被锁定时,其值为1。
数据记录使用的计数器如下表所示:
ID |
计数器值 |
80128 |
1 |
80129 |
0 |
80130 |
0 |
在使用上述类型的计数器时,计数器实际上标识两种状态,即数据记录是否被锁定。数据库服务器需要根据数据记录操作请求来改变计数器的值,例如在数据记录没有被锁定时,服务器接收到该数据记录的操作请求,通过核查操作请求中的指令,确定该数据记录需要锁定,则可以将该数据记录对应的计数器值增加1;相应地,在根据数据记录的操作请求对该数据记录操作完毕之后,可以将该计数器值减1。
上述示例中使用的计数器为加法计数器,本领域技术人员可以知晓,该计数器还可以为减法计数器。也就是说,在数据记录没有被锁定时,服务器接收到该数据记录的操作请求,通过核查操作请求中的指令,确定该数据记录需要锁定,则可以将该数据记录对应的计数器值减1,即计数器的初始值为1,在将其减1之后变为0。相应地,在该数据记录的操作完毕之后,可以将计数器的值加1,即将计数器的值由0变为1。
可替换地,数据库服务器还可以直接将数据记录操作请求发送至数据库引擎后,根据数据库引擎反馈的锁定结果来进行计数。例如服务器在接收到数据记录操作请求后,如果该数据记录没有被锁定,将该操作请求中的对该数据记录的行锁指令发送至数据库引擎,数据库引擎执行该指令后返回锁定结果,如果锁定成功,则数据库服务器将该数据记录的计数器的值由0改变为1。在对操作请求处理完毕后,将计数器的值由1改变为0。
可选地,当服务器收到数据记录操作请求后,可以直接查看该数据记录的计数器,如果相对于初始值发生改变,例如由0变为1,则说明已经有一个数据记录操作请求正被处理,且该数据记录被锁定。在这种情况下,可以将该数据记录操作请求放入调度队列,在正被处理的数据记录请求处理完毕之后,将该数据记录操作请求从调度队列中调出,按照其指令逐条发送给数据库引擎处理。服务器可以正被处理的数据记录请求处理完毕之后将计数器的值改变0。
可选地,调度队列可以为循环队列或者顺序队列,服务器在从调度队列中调度数据记录操作请求时,调度方式可以按照先进先出或者后进先出的方式进行调度。
可替换地,数据库服务器也可以不使用计数器,而是在收到数据记录的操作请求时,直接根据数据记录的标识查询该数据记录的状态(该状态基于数据库引擎的响应结果),如果被锁定,则可以将该数据记录操作请求放入调度队列。
可替换地,数据库服务器可以使用计数器来记录调度队列中的数据记录操作请求以及正被处理的数据记录操作请求之和。例如,如果在接收到数据记录操作请求之后,将计数器加1,并将该数据记录操作请求按照指令逐条发送至数据引擎处理;如果后续再收到数据记录操作请求,则直接修改计数器的值,例如每收到一条数据记录操作请求,则将计数器的值加1。相应地,在处理完一条数据记录的操作请求之后,将计数器的值减1。在这种情况下,如果收到新的数据记录操作请求,则将计数器值加1,在计数器值不为零的情况下,将该数据记录操作请求放入调度队列。例如,当前存在一个正在被处理的数据记录操作请求A,调度队列中存在数据记录操作请求B和C,此时,计数器数值显示为003,在这种情况下,如果收到数据记录请求D,由于计数器数值不为零,因此,将数据记录请求D放入调度队列中,此时计数器数值变为004。
可替换地,在知晓调度队列容量的情况下,例如最大容量是16,则也可以使用减法计数器,也就是说计数器的初始值是16,收到一个数据记录操作请求,减法计数器的值减1,处理完一个数据记录操作请求,减法计数器的值加1。
可以看出,在使用计数器时,由于计数器的值为调度队列中的数据记录操作请求以及正被处理的数据记录操作请求之和,如果计数器的值与调度队列中操作请求的数量相同,则表示正被处理的数据记录操作请求数为零,即数据记录未被锁定;如果计数器的值与调度队列中操作请求的数量不同,就表明数据记录被锁定,数据记录操作请求需要放入调度队列等待调度。
上述本申请实施例提供的技术方案是在服务器端进行并发数据记录操作请求的处理方法示意图,在实际使用过程中,同一个客户端也可以来识别是否数据记录是否被锁定。
图2示出了本申请实施例提供的数据记录并发操作请求的控制方法示例图,具体包括:
步骤S205,查询数据记录操作请求的计数器值;可选地,可以使用初始值为1的减法计数器,在进行计数时,一旦发送了数据记录的操作请求,则将计数器的值减1。计数器的示例如下:
ID |
计数器值 |
80128 |
0 |
80129 |
1 |
80130 |
1 |
其中,发送数据记录操作请求时,并利用计数器对发送的数据记录操作请求计数,即将计数器值由1该变为0;接收到数据记录操作请求的响应时,将计数器的值加1,即将计数器的值由0变为1。
步骤S210,确定计数器的值相对于初始值是否发生了改变;
步骤S215,如果发生了改变,例如由1变为0,则说明已经发送针对该数据记录的操作请求,则等待已发送的数据记录操作请求被处理完毕;
步骤S220,如果计数器的相对于初始值未发生改变,则发送新的数据记录操作请求。
具体而言,等待已发送的数据记录操作请求被处理完毕包括:
等待一段时间后,再次查询计数器值,如果计数器值相对于初始值发生改变,则继续等待,如果恢复为初始值,则可以发送新的数据记录操作请求。
需要说明的是,上述实施例所提及的数据记录可以是相同的一个数据记录,也可以相同的数个记录。其中所谓相同的数据记录是指标识相同的数据记录。
第一实施例
图3示出了本申请第一实施例提供的数据记录并发操作请求的控制方法示例图,其中数据记录为订单记录,订单ID为0001,订单金额100,其中A商户商品的金额为20,B商户商品的金额为80,该方法具体包括:
步骤S305,接收针对A商户的分账请求,其中需要扣款20,该分账请求示例如下:
select*from order_list where id=0001for update;
update order_list set value=value-20where id=0001;
步骤S310,将行锁指令发送至数据库引擎,数据库引擎锁定数据记录,该数据记录的标识为0001;
步骤S315,接收到锁定结果后,服务器将针对该数据记录操作请求的计数器修改为1;
步骤S320,服务器收到针对商户B的分账请求,该分账请求示例如下:
select*from order_list where id=0001for update;
update order_list set value=value-80where id=0001;
步骤S325,服务器检查计数器的值为1,确认该数据记录已被锁定,将针对B账户的分账请求放入调度队列;
步骤S330,服务器将更新指令发送至数据库引擎,数据库服务器将金额修改为80后返回;
步骤S335,数据库引擎释放该数据记录;
步骤S340,服务器将计数器的值减1,即计数器的值为0;
步骤S345,服务器根据计数器的值确认数据记录已被释放,从调度队列中调出针对B商户的数据记录操作请求;
步骤S350,将行锁指令发送至数据库引擎,数据库引擎锁定数据记录,该数据记录的标识为0001;
步骤S355,接收到锁定结果后,服务器将针对该数据记录操作请求的计数器修改为1;
步骤S360,服务器将更新指令发送至数据库引擎,数据库服务器将金额修改为0后返回;
步骤S365,数据库引擎释放该数据记录;
步骤S370,服务器将计数器的值减1,即计数器的值为0。
通过上述过程,可以实现将订单中的总金额分别入账到两个商户的账户中。
第二实施例
图4示出了本申请第二实施例提供的数据记录并发操作请求的控制方法示例图,其中数据记录为订单记录,订单ID为0001,订单金额100,其中A商户商品的金额为20,B商户商品的金额为80,该方法具体包括:
步骤405,接收针对A商户的分账请求,其中需要扣款20,该分账请求示例如下:
select*from order_list where id=0001for update;
update order_list set value=value-20where id=0001;
步骤S410,服务器核查该分账请求,确认包含了行锁指令,将针对该数据记录操作请求的计数器修改为1,锁定的数据记录的标识为0001;
步骤S415,将行锁指令发送至数据库引擎,数据库引擎锁定数据记录,并返回锁定结果,例如锁定成功;
步骤S420,服务器收到针对商户B的分账请求,该分账请求示例如下:
select*from order_list where id=0001for update;
update order_list set value=value-80where id=0001;
步骤S425,服务器检查计数器的值为1,表明已经有针对该数据记录的操作请求正在执行,确认该数据记录已被锁定,将针对B账户的分账请求放入调度队列;
步骤S430,服务器将计数器的值修改为2;
步骤S435,服务器将针对A商户的分账请求的更新指令发送至数据库引擎,数据库服务器将金额修改为80后返回;
步骤S440,数据库引擎释放该数据记录;
步骤S445,服务器将计数器的值减1,即计数器的值为1;
步骤S450,服务器根据计数器的值和队列中数据记录操作请求的数量确认数据记录已被释放,从调度队列中调出针对B商户的数据记录操作请求;调度队列中操作请求的数量与计数器的数量相同,可以确认对应的数据记录已经释放;
步骤S455,将行锁指令发送至数据库引擎,数据库引擎锁定数据记录,该数据记录的标识为0001;
步骤S460,服务器将更新指令发送至数据库引擎,数据库服务器将金额修改为0后返回;
步骤S465,数据库引擎释放该数据记录;
步骤S470,服务器将计数器的值减1,即计数器的值为0。
通过上述过程,可以实现将订单中的总金额分别入账到两个商户的账户中。
第三实施例
图5示出了本申请第三实施例提供的数据记录并发操作请求的控制方法示例图,其中数据记录为订单记录,订单ID为0001,订单金额100,其中A商户商品的金额为20,B商户商品的金额为80,该方法具体包括:
步骤505,确定数据记录操作请求的计数器值为0;假设已经发送了针对A商户的分账请求,示例如下:
select*from order_list where id=0001for update;
update order_list set value=value-20where id=0001;
在使用初始值为1的减法计数器的情况下,此时计数器值为0。
步骤S510,等待针对A商户的分账请求处理完毕;
步骤S515,接收到针对A商户的分账请求的响应,将订单0001对应的金额修改80;
步骤S520,将计数器的值加1,即计数器的值改变为1;
步骤S525,确认计数器的值恢复为初始值,发送针对商户B的分账请求,该分账请求示例如下:
select*from order_list where id=0001for update;
update order_list set value=value-80where id=0001;
步骤S530,将计数器的值减1,即将计数器的值改变为0;
步骤S535,接收到针对B商户的分账请求的响应,将订单0001对应的金额修改0;
步骤S540,将计数器的值加1,即计数器的值改变为1。
通过上述流程,可以将同一个用户所发送的并发请求减少,从而也可以减少并发的数量。
第四实施例
图6是本申请实施例提供的一种数据记录并发操作请求的控制装置示意图,包括:接收模块,用于接收数据记录操作请求,其中该数据记录请求包含行锁指令;确定模块,用于确定所述数据记录是否被锁定;如果所述数据记录被锁定,则将所述数据记录操作请求放入调度队列,否则锁定所述数据记录或者将所述数据记录操作请求放入调度队列。可选地,该装置还包括:该装置还包括计数器控制模块,用于在所述数据记录被锁定时保持所述数据记录操作请求的计数器的值,在所述数据记录未被锁定时改变所述数据记录操作请求的计数器的值;和/或在被锁定的数据记录操作完毕后,将所述数据记录操作请求的计数器的值恢复为初始值;和/或根据接收的数据记录操作请求或者处理完毕的数据记录操作请求改变数据记录操作请求的计数器的值。可选地,还包括释放模块,用于在被锁定的数据记录操作完毕后,释放所述数据记录。可选地,该装置还包括:选择模块,用于在被锁定的数据记录操作完毕后,从调度队列中选择一个数据记录操作请求。
第五实施例
图7是本申请实施例提供的一种数据记录并发操作请求的控制装置,包括:确定模块,用于确定已发送的数据记录操作请求是否被处理完毕;发送模块,用于在已发送的数据记录操作请求被处理完毕时,发送新的数据记录操作请求;等待模块,用于在已发送的数据记录操作请求未被处理完毕时,等待已发送的数据记录操作请求被处理完毕;其中,所述已发送的数据记录操作请求包括行锁指令,所述新的数据记录操作请求包括行锁指令。可选地,该装置还包括:初始化模块,用于收到已发送的数据记录操作请求的响应后,将所述数据记录操作请求的计数器的值恢复为初始值。
第六实施例
图8是本申请实施例提供了一种数据记录并发操作请求的控制装置,包括:处理器和存储器,所述存储器存储有程序;所述处理器,用于执行所述程序以实现本申请实施例提供的方法。
在20世纪90年代,对于一个技术的改进可以很明显地区分是硬件上的改进(例如,对二极管、晶体管、开关等电路结构的改进)还是软件上的改进(对于方法流程的改进)。然而,随着技术的发展,当今的很多方法流程的改进已经可以视为硬件电路结构的直接改进。设计人员几乎都通过将改进的方法流程编程到硬件电路中来得到相应的硬件电路结构。因此,不能说一个方法流程的改进就不能用硬件实体模块来实现。例如,可编程逻辑器件(Programmable Logic Device,PLD)(例如现场可编程门阵列(Field Programmable GateArray,FPGA))就是这样一种集成电路,其逻辑功能由用户对器件编程来确定。由设计人员自行编程来把一个数字系统“集成”在一片PLD上,而不需要请芯片制造厂商来设计和制作专用的集成电路芯片。而且,如今,取代手工地制作集成电路芯片,这种编程也多半改用“逻辑编译器(logic compiler)”软件来实现,它与程序开发撰写时所用的软件编译器相类似,而要编译之前的原始代码也得用特定的编程语言来撰写,此称之为硬件描述语言(Hardware Description Language,HDL),而HDL也并非仅有一种,而是有许多种,如ABEL(Advanced Boolean Expression Language)、AHDL(Altera Hardware DescriptionLanguage)、Confluence、CUPL(Cornell University Programming Language)、HDCal、JHDL(Java Hardware Description Language)、Lava、Lola、MyHDL、PALASM、RHDL(RubyHardware Description Language)等,目前最普遍使用的是VHDL(Very-High-SpeedIntegrated Circuit Hardware Description Language)与Verilog。本领域技术人员也应该清楚,只需要将方法流程用上述几种硬件描述语言稍作逻辑编程并编程到集成电路中,就可以很容易得到实现该逻辑方法流程的硬件电路。
控制器可以按任何适当的方式实现,例如,控制器可以采取例如微处理器或处理器以及存储可由该(微)处理器执行的计算机可读程序代码(例如软件或固件)的计算机可读介质、逻辑门、开关、专用集成电路(Application Specific Integrated Circuit,ASIC)、可编程逻辑控制器和嵌入微控制器的形式,控制器的例子包括但不限于以下微控制器:ARC 625D、Atmel AT91SAM、Microchip PIC18F26K20以及Silicone Labs C8051F320,存储器控制器还可以被实现为存储器的控制逻辑的一部分。本领域技术人员也知道,除了以纯计算机可读程序代码方式实现控制器以外,完全可以通过将方法步骤进行逻辑编程来使得控制器以逻辑门、开关、专用集成电路、可编程逻辑控制器和嵌入微控制器等的形式来实现相同功能。因此这种控制器可以被认为是一种硬件部件,而对其内包括的用于实现各种功能的装置也可以视为硬件部件内的结构。或者甚至,可以将用于实现各种功能的装置视为既可以是实现方法的软件模块又可以是硬件部件内的结构。
上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机。具体的,计算机例如可以为个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任何设备的组合。
为了描述的方便,描述以上装置时以功能分为各种单元分别描述。当然,在实施本申请时可以把各单元的功能在同一个或多个软件和/或硬件中实现。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
本申请可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本申请,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
以上所述仅为本申请的实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。