查询请求的处理方法、设备和介质转让专利

申请号 : CN201810936221.8

文献号 : CN110858204A

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 王凡龙凤陈乐君唐堂谭正颜理

申请人 : 中国移动通信集团重庆有限公司中国移动通信集团有限公司

摘要 :

本发明公开了一种查询请求的处理方法、设备和介质。该方法包括:将第一变量设置为第一状态,所述第一状态用于表示数据库系统中有数据对象变更需求;根据所述第一状态,将与待变更的数据对象相关的查询请求放入缓存队列;对所述待变更的数据对象进行变更;若所述待变更的数据对象成功完成变更,则将所述缓存队列中的查询请求发送给所述数据库系统。本发明公开的查询请求的处理方法,能够在数据对象变更期间缓存与待变更的数据对象相关的查询请求,从而可以在数据对象完成变更后对数据库系统中变更的数据对象进行访问,避免了通过中断业务访问的方式来对数据对象变更,提升了用户的使用体验。

权利要求 :

1.一种查询请求的处理方法,其特征在于,包括:将第一变量设置为第一状态,所述第一状态用于表示数据库系统中有数据对象变更需求;

根据所述第一状态,将与待变更的数据对象相关的查询请求放入缓存队列;

对所述待变更的数据对象进行变更;

若所述待变更的数据对象成功完成变更,则将所述缓存队列中的查询请求发送给所述数据库系统。

2.根据权利要求1所述的方法,其特征在于,所述对所述待变更的数据对象进行变更,包括:当所述待变更的数据对象和所述待变更的数据对象的副本满足预设的数据对象同步条件时,使用所述待变更的数据对象的副本,对所述待变更的数据对象进行变更。

3.根据权利要求2所述的方法,其特征在于,还包括:若所述待变更的数据对象和所述待变更的数据对象的副本不满足所述数据对象同步条件,且所述缓存队列中查询请求的长度大于预设长度,则结束所述数据对象的变更;

或者,

若所述待变更的数据对象和所述待变更的数据对象的副本不满足所述数据对象同步条件,且所述第一变量处于所述第一状态的持续时间达到预设时间,则结束所述数据对象的变更。

4.根据权利要求3所述的方法,其特征在于,所述结束所述数据对象的变更之后,还包括:将所述第一变量设置为第二状态,所述第二状态用于表示所述数据库系统中没有数据对象变更需求。

5.根据权利要求1所述的方法,其特征在于,所述将所述缓存队列中的查询请求发送给所述数据库系统之后,还包括:将所述第一变量设置为第二状态,所述第二状态用于表示所述数据库系统中没有数据对象变更需求。

6.根据权利要求2所述的方法,其特征在于,所述将第一变量设置为第一状态,包括:在所述待变更的数据对象和所述待变更的数据对象的副本满足预设的数据变更条件后,将所述第一变量设置为所述第一状态。

7.根据权利要求1所述的方法,其特征在于,还包括:若第二变量处于第三状态,则将所述第二变量设置为第四状态,所述第三状态用于表示所述缓存队列为空,所述第四状态用于表示所述缓存队列中包括查询请求。

8.根据权利要求7所述的方法,其特征在于,还包括:若所述待变更的数据对象成功完成变更,则将所述第二变量设置为第五状态,所述第五状态用于表示数据对象完成变更;

所述将所述缓存队列中的查询请求发送给所述数据库系统之后,还包括:将所述第二变量设置为所述第三状态。

9.根据权利要求8所述的方法,其特征在于,所述将所述第二变量设置为所述第三状态,包括:停止向所述缓存队列中放入查询请求,并将接收到的所有查询请求放入到透传队列中;

将所述第二变量设置为所述第三状态;

若所述透传队列中包括与所述待变更的数据对象相关的查询请求,则将所述第二变量设置为所述第三状态之后,将所述透传队列中与所述待变更的数据对象相关的查询请求发送给所述数据库系统。

10.根据权利要求1所述的方法,其特征在于,所述设置第一变量在第一状态之后,还包括:根据所述第一状态,将与所述待变更的数据对象不相关的查询请求放入透传队列;

将所述透传队列中的与所述待变更的数据对象不相关的查询请求发送给所述数据库系统。

11.一种用于处理查询请求的设备,其特征在于,包括:第一设置模块,用于将第一变量设置为第一状态,所述第一状态用于表示数据库系统中有数据对象变更需求;

第一存放模块,用于根据所述第一状态,将与待变更的数据对象相关的查询请求放入缓存队列;

变更模块,用于对所述待变更的数据对象进行变更;

第一发送模块,用于若所述待变更的数据对象成功完成变更,则将所述缓存队列中的查询请求发送给所述数据库系统。

12.一种用于处理查询请求的设备,其特征在于,包括:至少一个处理器、至少一个存储器以及存储在所述存储器中的计算机程序指令,当所述计算机程序指令被所述处理器执行时实现如权利要求1-10中任一项所述的方法。

13.一种计算机可读存储介质,其上存储有计算机程序指令,其特征在于,当所述计算机程序指令被处理器执行时实现如权利要求1-10中任一项所述的方法。

说明书 :

查询请求的处理方法、设备和介质

技术领域

[0001] 本发明属于计算机技术领域,尤其涉及一种查询请求的处理方法、用于处理查询请求的设备和计算机可读存储介质。

背景技术

[0002] 如果对数据对象变更,比如在应用程序版本发布时对数据对象进行大规模的变更,可以通过中断业务访问,在业务访问中断期间来对数据对象变更,当数据对象完成变更后恢复业务访问,这种属于离线变更的方法。
[0003] 但是,由于在对数据对象变更期间无法接收到结构化查询语言(Structured Query Language,SQL)请求,也就无法对数据库系统进行业务访问,而且如果对数据对象的更新频率比较高,就需要频繁地中断业务访问,特别是当频繁地中断企业关键业务的访问时,会给企业带来不好的使用体验。

发明内容

[0004] 本发明实施例提供了一种查询请求的处理方法、设备和介质,能够在不中断业务访问的情况下对数据对象进行变更。
[0005] 第一方面,本发明实施例提供一种查询请求的处理方法,包括:
[0006] 将第一变量设置为第一状态,所述第一状态用于表示数据库系统中有数据对象变更需求;
[0007] 根据所述第一状态,将与待变更的数据对象相关的查询请求放入缓存队列;
[0008] 对所述待变更的数据对象进行变更;
[0009] 若所述待变更的数据对象成功完成变更,则将所述缓存队列中的查询请求发送给所述数据库系统。
[0010] 第二方面,本发明实施例提供一种用于处理查询请求的设备,包括:
[0011] 第一设置模块,用于将第一变量设置为第一状态,所述第一状态用于表示数据库系统中有数据对象变更需求;
[0012] 第一存放模块,用于根据所述第一状态,将与待变更的数据对象相关的查询请求放入缓存队列;
[0013] 变更模块,用于对所述待变更的数据对象进行变更;
[0014] 第一发送模块,用于若所述待变更的数据对象成功完成变更,则将所述缓存队列中的查询请求发送给所述数据库系统。
[0015] 第三方面,本发明实施例提供一种用于处理查询请求的设备,包括:至少一个处理器、至少一个存储器以及存储在所述存储器中的计算机程序指令,当所述计算机程序指令被所述处理器执行时实现如上述的方法。
[0016] 第四方面,本发明实施例提供一种计算机可读存储介质,其上存储有计算机程序指令,当所述计算机程序指令被处理器执行时实现上述的方法。
[0017] 与现有技术相比,本申请实施例提供的查询请求的处理方法、设备、介质,如果需要对数据对象变更,通过将与待变更的数据对象相关的查询请求放入到缓存队列中进行缓存,在数据对象变更完成后,将缓存队列中的查询请求发送给数据库系统。可见,在数据对象变更期间能缓存与待变更的数据对象相关的查询请求,并且在数据对象完成变更后可以对数据库系统中变更的数据对象进行访问。在相关技术方案中,在数据对象变更期间无法接收到查询请求,也就无法对数据库系统进行业务访问,因此本发明实施例相比于相关技术中的方案而言不会中断对数据库系统的业务访问,提升了用户的使用体验。

附图说明

[0018] 为了更清楚地说明本发明实施例的技术方案,下面将对本发明实施例中所需要使用的附图作简单地介绍,显而易见地,下面所描述的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0019] 图1示出了本发明一实施例的查询请求的处理方法的示意性流程图;
[0020] 图2示出了本发明另一实施例的查询请求的处理方法的示意性逻辑结构图;
[0021] 图3示出了本发明一实施例的对象变更方法的示意性流程图;
[0022] 图4示出了本发明一实施例的存放查询请求的方法的示意性流程图;
[0023] 图5示出了本发明一实施例的处理缓存队列中的查询请求的方法的示意性流程图;
[0024] 图6示出了本发明一实施例的处理透传队列中的查询请求的方法的示意性流程图;
[0025] 图7示出了本发明一实施例的用于处理查询请求的设备的示意性框图;
[0026] 图8示出了本发明另一实施例的用于处理查询请求的设备的示意性结构图。

具体实施方式

[0027] 下面将详细描述本发明的各个方面的特征和示例性实施例。在下面的详细描述中,提出了许多具体细节,以便提供对本发明的全面理解。但是,对于本领域技术人员来说很明显的是,本发明可以在不需要这些具体细节中的一些细节的情况下实施。下面对实施例的描述仅仅是为了通过示出本发明的示例来提供对本发明的更好的理解。
[0028] 需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。下面将结合附图对实施例进行详细描述。
[0029] 图1示出了本发明一实施例的查询请求的处理方法100的示意性流程图。该方法包括以下步骤:S101至S104。
[0030] S101,将第一变量设置为第一状态,第一状态用于表示数据库系统中有数据对象变更需求。
[0031] 作为一个示例,通过为第一变量赋值,将第一变量设置为第一状态。
[0032] 比如,设置第一变量的值为1,当第一变量的值为1时,表示数据库系统中有数据对象变更需求。
[0033] 需要说明的是,在此并不限定何时将第一变量设置为第一状态。
[0034] 比如,可以当接收到用户输入待变更的数据对象的名称时,说明有数据对象变更需求,将第一变量设置为第一状态。
[0035] 再比如,可以当接收到来自用户的变更指令时,将第一变量设置为第一状态。
[0036] S102,根据第一状态,将与待变更的数据对象相关的查询请求放入缓存队列。
[0037] 作为一个示例,查询请求可以是SQL请求,查询请求还可以是其它的查询请求,在此并不对查询请求做出具体地限定。
[0038] 作为一个示例,在将第一变量设置为第一状态之后,将预定义的数据对象名变量设置为待变更的数据对象的名称,根据数据对象名变量对接收到的来自应用的查询请求划分成两类,这两类分别是与待变更的数据对象相关的查询请求和与待变更的数据对象不相关的查询请求。
[0039] 比如,待变更的数据对象是表A,将数据对象名变量设置为表A的名称;接收到来自应用的查询请求;若该查询请求中包含数据对象名变量的信息,则该查询请求是与待变更的数据对象相关的查询请求;若该查询请求中不包含数据对象名变量的信息,则该查询请求是与待变更的数据对象不相关的查询请求。
[0040] S103,对待变更的数据对象进行变更。
[0041] 需要说明的是,在此并不限定开始执行S102和S103的顺序,可以先开始执行S102,再开始执行S103;或者S102和S103同时开始执行;或者先开始执行S103,再开始执行S102。
[0042] S104,若待变更的数据对象成功完成变更,则将缓存队列中的查询请求发送给数据库系统。
[0043] 作为一个示例,通过先将缓存队列中的查询请求存放到透传队列,再将透传队列中的查询请求发送给数据库系统,实现了将缓存队列中的查询请求发送给数据库系统。
[0044] 作为另一个示例,将缓存队列中的查询请求直接发送给数据库系统,不经过透传队列。
[0045] 根据本发明实施例的查询请求的处理方法100,如果需要对数据对象变更,通过将与待变更的数据对象相关的查询请求放入到缓存队列中进行缓存,在数据对象变更完成后,将缓存队列中的查询请求发送给数据库系统。可见,在数据对象变更期间能缓存与待变更的数据对象相关的查询请求,并且在数据对象完成变更后可以对数据库系统中变更的数据对象进行访问。在相关技术方案中,在数据对象变更期间无法接收到查询请求,也就无法对数据库系统进行业务访问,因此本发明实施例相比于相关技术中的方案而言不会中断对数据库系统的业务访问,提升用户的使用体验。
[0046] 在本发明的一个实施例中,S103包括:
[0047] 当待变更的数据对象和待变更的数据对象的副本满足预设的数据对象同步条件时,使用待变更的数据对象的副本,对待变更的数据对象进行变更。
[0048] 需要说明的是,可以预先建立待变更的数据对象的副本,比如由用户预先建立待变更的数据对象的副本。待变更的数据对象的副本的名称可以是待变更的数据对象的名称+tmp,tmp用于表示副本。待变更的数据对象和待变更的数据对象的副本之间可以建立映射转换。待变更的数据对象和待变更的数据对象的副本之间的对象结构一致或不一致。根据待变更的数据对象,向待变更的数据对象的副本中添加数据,以使待变更的数据对象和待变更的数据对象的副本保持同步。
[0049] 比如,数据对象的副本中包括时间点a之前生成的数据,当数据对象更新时,将数据对象中在时间点a之后生成的数据写入到数据对象的副本中,以维持数据对象和数据对象的副本之间同步。
[0050] 作为一个示例,数据对象同步条件包括:待变更的数据对象中最新数据的生成时间点与待变更的数据对象的副本中最新数据的生成时间点相同。
[0051] 比如,待变更的数据对象为数据对象A,待变更的数据对象的副本为数据对象A1,数据对象A中最新数据的生成时间点是当天下午3点整,数据对象的副本A1中最新数据的生成时间点是当天下午3点0分1秒,那么数据对象A和数据对象的副本A1之间不同步。
[0052] 作为一个示例,数据对象同步条件包括:待变更的数据对象中最新数据的生成时间点距离待变更的数据对象的副本中最新数据的生成时间点的间隔小于第一预设时间。
[0053] 比如,待变更的数据对象为数据对象B,待变更的数据对象的副本为数据对象B1,第一预设时间为5秒,数据对象B中最新数据的生成时间点是当天下午3点整,数据对象的副本B1中最新数据的生成时间点是当天下午3点0分7秒,数据对象B距离数据对象的副本B1相差7秒大于第一预设时间,因此数据对象B和数据对象的副本B1之间不同步。
[0054] 作为一个示例,通过向数据库系统发送基于数据定义语言(DataDefinition Language,DDL)的变更指令,该变更指令用于对待变更的数据对象进行变更。
[0055] 需要说明的是,数据库系统接收基于DDL的变更指令后,将待变更的数据对象的名称更改成其他的名称,将待变更的数据对象的副本的名称改成待变更的数据对象的原名称。
[0056] 比如,待变更的数据对象的名称是M,待变更的数据对象的副本的名称是M1,将待变更的数据对象的名称由M改为M+old,将待变更的数据对象的副本的名称改为M。
[0057] 根据本发明实施例的查询请求的处理方法,当待变更的数据对象和待变更的数据对象的副本满足预设的数据对象同步条件时,说明待变更的数据对象和待变更的数据对象的副本中的数据相同或基本相同,对待变更的数据对象进行变更,从而保证了变更后的数据对象和变更前的数据对象中的数据相同或基本相同,避免数据对象变更前后差距很大。
[0058] 在本发明的一个实施例中,查询请求的处理方法还包括:
[0059] 若待变更的数据对象和待变更的数据对象的副本不满足数据对象同步条件,且缓存队列中查询请求的长度大于预设长度,则结束数据对象的变更。
[0060] 需要说明的是,第一变量设置在第一状态后,当待变更的数据对象和待变更的数据对象的副本不满足数据对象同步条件时,需要等待,直到待变更的数据对象和待变更的数据对象的副本满足数据对象同步条件时对待变更的数据对象进行变更。在等待过程中,缓存队列中的查询请求会越来越多,若缓存队列中查询请求的长度大于预设长度,说明缓存队列将要溢出,则待变更的数据对象变更失败,结束数据对象的变更。
[0061] 或者,若待变更的数据对象和待变更的数据对象的副本不满足数据对象同步条件,且第一变量处于第一状态的持续时间达到预设时间,则结束数据对象的变更。
[0062] 需要说明的是,第一变量设置在第一状态后,如果待变更的数据对象和待变更的数据对象的副本满足数据对象同步条件,可以对待变更的数据对象进行变更;如果待变更的数据对象和待变更的数据对象的副本不满足数据对象同步条件,需要等待,直到待变更的数据对象和待变更的数据对象的副本满足数据对象同步条件时对待变更的数据对象进行变更。若第一变量设置在第一状态,则开始对第一变量在第一状态的持续时间进行计时,计时的结果即为等待的时间,若等待的时间达到预设时间,说明等待了很长时间,待变更的数据对象和待变更的数据对象的副本依然不满足数据对象同步条件,则结束数据对象的变更。
[0063] 根据本发明实施例的查询请求的处理方法,当缓存队列将要溢出时,说明与待变更的数据对象相关的所有查询请求并不能全部存放到缓存队列中,也就不能将与待变更的数据对象相关的所有查询请求发送给数据库系统,结束数据对象的变更,避免由于与待变更的数据对象相关的部分查询请求未缓存而给业务访问带来影响。当第一变量在第一状态的持续时间达到预设时间时,说明等待待变更的数据对象和待变更的数据对象的副本同步的时间比较长,结束数据对象的变更,避免访问待变更的数据对象需要很长时间,从而保证用户的使用体验。
[0064] 在本发明的一个实施例中,结束数据对象的变更之后,查询请求的处理方法还包括:
[0065] 将第一变量设置为第二状态,第二状态用于表示数据库系统中没有数据对象变更需求。
[0066] 作为一个示例,通过为第一变量赋值,将第一变量设置为第二状态。
[0067] 比如,设置第一变量的值为0,当第一变量的值为0时,表示数据库系统中没有数据对象变更需求。
[0068] 根据本发明实施例的查询请求的处理方法,当数据对象变更失败,结束数据对象的变更之后,将第一变量设置为第二状态下,以根据第一变量在第二状态下获知数据库系统中没有数据对象变更需求,便于进行下一步的处理。
[0069] 在本发明的一个实施例中,查询请求的处理方法还包括:
[0070] 若缓存队列中查询请求的长度大于预设长度,则设置第一变量在第六状态,第六状态用于表示缓存队列溢出或者表示缓存队列将要溢出。
[0071] 作为一个示例,通过为第一变量赋值,设置第一变量在第六状态。
[0072] 比如,设置第一变量的值为2,当第一变量的值为2时,表示缓存队列溢出或者表示缓存队列将要溢出。
[0073] 在本发明的一个实施例中,S104之后,查询请求的处理方法还包括:
[0074] 将第一变量设置为第二状态,第二状态用于表示数据库系统中没有数据对象变更需求。
[0075] 根据本发明实施例的查询请求的处理方法,当数据对象成功完成变更,而且缓存队列中的查询请求发送给数据库系统之后,将第一变量在第二状态,即将第一变量设置成初始状态,便于下一次进行数据对象的变更。
[0076] 在本发明的一个实施例中,S101包括:
[0077] 在待变更的数据对象和待变更的数据对象的副本满足预设的数据变更条件后,将第一变量设置为第一状态。
[0078] 作为一个示例,数据变更条件包括:待变更的数据对象中最新数据的生成时间点距离待变更的数据对象的副本中最新数据的生成时间点的间隔小于第二预设时间。
[0079] 比如,待变更的数据对象为数据对象A,待变更的数据对象的副本为数据对象A1,第二预设时间位10秒,数据对象A中最新数据的生成时间点是当天下午3点整,数据对象的副本A1中最新数据的生成时间点是当天下午3点0分9秒,那么数据对象A和数据对象的副本A1之间满足数据变更条件。
[0080] 根据本发明实施例的查询请求的处理方法,当待变更的数据对象和待变更的数据对象的副本之间的差距比较小时,等待待变更的数据对象和待变更的数据对象的副本之间同步的时间比较短,因此,将第一变量设置为第一状态,开始进入数据对象变更的流程,从而使得数据对象更新的成功率比较高。
[0081] 在本发明的一个实施例中,在S101之后,查询请求的处理方法还包括:
[0082] 若第二变量处于第三状态,则将第二变量设置为第四状态,第三状态用于表示缓存队列为空,第四状态用于表示缓存队列中包括查询请求。
[0083] 需要说明的是,在S101之后,说明与待变更的数据对象相关的查询请求会进入缓存队列,在待变更的数据对象成功完成变更之前,将第二变量设置为第四状态,以表示缓存队列中包括查询请求,缓存队列并未为空。
[0084] 在本发明的一个实施例中,查询请求的处理方法还包括:
[0085] 若待变更的数据对象成功完成变更,则将第二变量设置为第五状态,第五状态用于表示数据对象完成变更。
[0086] S104之后,还包括:
[0087] 将第二变量设置为第三状态。
[0088] 需要说明的是,若待变更的数据对象成功完成变更,则会即刻将第二变量从第四状态设置成第五状态。在此并不限定将第二变量设置为第五状态和开始执行S104的顺序,需要注意的是,将第二变量设置为第五状态所花费的时间很短,S104中通常需要发送多个查询请求给数据库系统,因此,还未执行完S104,已经完成将第二变量设置为第五状态。
[0089] 在本发明的一个实施例中,将第二变量设置为第三状态,包括:
[0090] 停止向缓存队列中放入查询请求,并将接收到的所有查询请求放入到透传队列中;将第二变量设置为第三状态;若透传队列中包括与待变更的数据对象相关的查询请求,则等将第二变量设置为第三状态之后,将透传队列中与待变更的数据对象相关的查询请求发送给数据库系统。
[0091] 根据本发明实施例的查询请求的处理方法,当缓存队列中的所有查询请求分别发送到数据库系统中之后,恢复了对数据库系统的正常访问,停止向缓存队列中放查询请求,并将接收到的所有查询请求放入到透传队列中。第二变量在第五状态时,透传队列中可能包括与变更的数据对象相关的查询请求。可以理解的是,由于待变更的数据对象完成变更,因此,此处使用变更的数据对象进行说明,而非使用待变更的数据对象,即此处出现的变更的数据对象就是上述中的待变更的数据对象。若透传队列中包括与变更的数据对象相关的查询请求,先不将透传队列中的与变更的数据对象相关的查询请求发送给数据库系统,而是等到将第二变量设置为第三状态之后,即恢复了对数据库系统的正常访问之后,将透传队列中与变更的数据对象相关的查询请求发送给数据库系统。
[0092] 在本发明的一个实施例中,S101之后,查询请求的处理方法还包括:
[0093] 根据第一状态,将与待变更的数据对象不相关的查询请求放入透传队列;将透传队列中的与待变更的数据对象不相关的查询请求发送给数据库系统。
[0094] 需要说明的是,当第一变量在第一状态下,接收到的查询请求包括与待变更的数据对象相关的查询请求和与待变更的数据对象不相关的查询请求,将与待变更的数据对象相关的查询请求放入缓存队列,将与待变更的数据对象不相关的查询请求放入透传队列。将透传队列中的与待变更的数据对象不相关的查询请求发送给数据库系统,从而实现了在数据对象变更期间可以对数据库系统中的不进行变更的数据对象进行访问,因此数据对象变更不会影响对数据库系统中不进行变更的数据对象的访问,进一步地提升了用户体验。
[0095] 图2示出了本发明另一实施例的SQL请求的处理方法的示意性逻辑结构图。该方法由数据同步程序、SQL拦截解析程序、对象变更程序、缓存转发程序和透传程序实现。该实施例中以查询请求为SQL请求为例进行说明。
[0096] 通过数据同步程序实现待变更的数据对象和待变更的数据对象的副本之间的同步。
[0097] 通过SQL拦截解析程序拦截来自外部应用的SQL请求,并根据第一变量和第二变量将SQL请求放入缓存队列和透传队列。
[0098] 通过对象变更程序对待变更的数据对象进行变更。
[0099] 通过缓存转发程序将缓存队列中的SQL请求转发给数据库系统。
[0100] 通过透传程序将透传队列中的SQL请求转发给数据库系统。
[0101] 第一变量为0表示数据库系统中没有数据对象变更需求;第一变量为1表示数据库系统中有数据对象变更需求;第一变量为2表示缓存队列溢出。
[0102] 第二变量为0表示缓存队列为空;第二变量为1表示缓存队列中包括SQL请求;第二变量为2表示数据对象完成变更。
[0103] 基于图2,图3示出了本发明一实施例的对象变更方法的示意性流程图。该方法可以由对象变更程序实现。该方法包括S301至S308。
[0104] S301,获取用户输入的待变更的数据对象的名称。
[0105] S302,判断第一变量是否为2,在判断结果为是时,说明上一次进行数据对象变更时缓存队列溢出,执行步骤S303,在判断结果为否时,执行步骤304。
[0106] S303,将第一变量设置为0,即对第一变量进行初始化。
[0107] S304,判断数据对象和数据对象的副本之间的同步延迟gap是否满足数据变更条件,在判断结果为是时,执行步骤305,在判断结果为否时,返回步骤S302。同步延迟gap指的是待变更的数据对象中最新数据的生成时间点距离待变更的数据对象的副本中最新数据的生成时间点的间隔。
[0108] S305,将第一变量设置为1,将数据对象变量设置为待变更的数据对象的名称,根据数据对象变量区分与待变更的数据对象相关的SQL请求和与待变更的数据对象不相关的SQL请求。
[0109] S306,判断数据对象和数据对象的副本之间的同步延迟gap是否为0,在判断结果为是时,执行步骤S307,在判断结果为否时,说明需要等待数据对象和数据对象的副本同步,并执行步骤S308。
[0110] S307,对待变更的数据对象进行变更。
[0111] S308,判断第一变量是否为2,在判断结果为是时,说明在等待数据对象和数据对象的副本同步的过程中,由于等待同步的时间过长导致缓存队列溢出,待变更的数据对象变更失败,结束待变更的数据对象的变更,返回步骤S303,在判断结果为否时,返回步骤S306。
[0112] 基于图2,图4示出了本发明一实施例的存放SQL请求的方法的示意性流程图。该方法可以由SQL拦截解析程序实现。该方法包括S401至S411。
[0113] S401,判断第一变量是否为1,在判断结果为是时,执行步骤S402,在判断结果为否时,说明没有数据对象变更需求,执行步骤S409。
[0114] S402,判断第二变量是否为2,在判断结果为是时,执行步骤S403,在判断结果为否时,执行步骤S404。
[0115] S403,当数据对象成功完成变更,将缓存队列中的所有SQL请求放入到透传队列,然后将透传队列中的SQL请求发送给数据库系统,从而实现了将缓存队列中的所有SQL请求分别发送给数据库系统。可以理解的是,可以将缓存队列中的所有SQL请求直接发送给数据库系统,而不需要经过透传队列。
[0116] S404,判断第二变量是否为1,在判断结果为是时,执行步骤S405,在判断结果为否时,执行步骤S406使得第二变量为1。
[0117] S405,判断缓存队列中SQL请求的长度是否超长,即判断缓存队列中SQL请求的长度是否大于预设长度,在判断结果为是时,执行步骤S407,在判断结果为否时,执行步骤S408。
[0118] S406,将第二变量设置为1。
[0119] S407,当缓存队列中SQL请求的长度超长时,将第一变量设置为2,将第二变量设置为2,说明数据对象变更失败。
[0120] S408,将接收到来自应用的SQL请求中与待变更的数据对象相关的SQL请求放入缓存队列,将接收到来自应用的SQL请求中与待变更的数据对象不相关的SQL请求放入透传队列。
[0121] S409,数据库系统中没有数据对象变更需求时,将接收到的所有SQL请求放入到透传队列。
[0122] S410,判断第二变量是否为0,在判断结果为是时,返回步骤S401,在判断结果为否时,执行步骤S411。
[0123] S411,将第二变量设置为0,需要说明的是,如果第二变量是1,则先将第二变量设置为2,再将第二变量设置为0;如果第二变量是2,直接将第二变量设置为0。
[0124] 基于图2,图5示出了本发明一实施例的处理缓存队列中的SQL请求的方法的示意性流程图。该方法可以由缓存转发程序实现。该方法包括S501和S502。
[0125] S501,判断第二变量是否为2,在判断结果为是时,执行步骤S502,在判断结果为否时,返回步骤S501。
[0126] S502,将缓存队列中的所有SQL请求发送给数据库系统,直到缓存队列为空时为止,将第二变量设置为0。
[0127] 基于图2,图6示出了本发明一实施例的处理透传队列中的SQL请求的方法的示意性流程图。该方法可以由透传程序实现。该方法包括S601至S603。
[0128] S601,判断第二变量是否为2,在判断结果为是时,执行步骤S602,在判断结果为否时,执行步骤S603。
[0129] S602,将透传队列中与变更的数据对象不相关的SQL请求发送给数据库系统,将透传队列中与变更的数据对象相关的SQL请求暂不处理。
[0130] S603,将透传队列中与变更的数据对象相关的SQL请求发送给数据库系统。
[0131] 需要说明的是,当第二变量为2时,停止向缓存队列中放SQL请求,并将接收到的所有SQL请求放入到透传队列中,因此透传队列中可能包括与变更的数据对象相关的SQL请求。当透传队列中包括与变更的数据对象相关的SQL请求时,透传队列中的与变更的数据对象相关的SQL请求暂不处理,等到第二变量为0时,即第二变量恢复到初始值时,将透传队列中与变更的数据对象相关的SQL请求发送给数据库系统。
[0132] 图7示出了本发明一实施例的用于处理查询请求的设备的示意性框图。该设备700包括:第一设置模块701、第一存放模块702、变更模块703和第一发送模块704。
[0133] 第一设置模块701,用于将第一变量设置为第一状态,第一状态用于表示数据库系统中有数据对象变更需求。
[0134] 第一存放模块702,用于根据第一状态,将与待变更的数据对象相关的查询请求放入缓存队列。
[0135] 变更模块703,用于对待变更的数据对象进行变更。
[0136] 第一发送模块704,用于若待变更的数据对象成功完成变更,则将缓存队列中的查询请求发送给数据库系统。
[0137] 在本发明的一个实施例中,变更模块703用于,
[0138] 当待变更的数据对象和待变更的数据对象的副本满足预设的数据对象同步条件时,使用待变更的数据对象的副本,对待变更的数据对象进行变更。
[0139] 在本发明的一个实施例中,变更模块703还用于,
[0140] 若待变更的数据对象和待变更的数据对象的副本不满足数据对象同步条件,且缓存队列中查询请求的长度大于预设长度,则结束数据对象的变更。
[0141] 或者,
[0142] 若待变更的数据对象和待变更的数据对象的副本不满足数据对象同步条件,且第一变量处于第一状态的持续时间达到预设时间,则结束数据对象的变更。
[0143] 在本发明的一个实施例中,设备700还包括:
[0144] 第二设置模块,用于将第一变量设置为第二状态,第二状态用于表示数据库系统中没有数据对象变更需求。
[0145] 在本发明的一个实施例中,第一设置模块701用于,
[0146] 在待变更的数据对象和待变更的数据对象的副本满足预设的数据变更条件后,将第一变量设置为第一状态。
[0147] 在本发明的一个实施例中,设备700还包括:
[0148] 第三设置模块,用于当第二变量在第三状态时,将第二变量设置为第四状态,第三状态用于表示缓存队列为空,第四状态用于表示查询请求正在进入缓存队列。
[0149] 在本发明的一个实施例中,设备700还包括:
[0150] 第四设置模块,用于若待变更的数据对象成功完成变更,则将第二变量设置为第五状态,第五状态用于表示数据对象完成变更。
[0151] 第五设置模块,用于将第二变量设置为第三状态。
[0152] 在本发明的一个实施例中,第五设置模块包括:
[0153] 发送单元,用于停止向缓存队列中放查询请求,并将接收到的所有查询请求放入到透传队列中。
[0154] 设置单元,用于将第二变量设置为第三状态;
[0155] 发送单元还用于,若透传队列中包括与待变更的数据对象相关的查询请求,则等设置单元将第二变量设置为第三状态之后,将透传队列中与待变更的数据对象相关的查询请求发送给数据库系统。
[0156] 在本发明的一个实施例中,设备700还包括:
[0157] 第二存放模块,用于根据第一状态,将与待变更的数据对象不相关的查询请求放入透传队列;
[0158] 第二发送模块,用于将透传队列中的与待变更的数据对象不相关的查询请求发送给数据库系统。
[0159] 图8示出了本发明另一实施例的用于处理查询请求的设备的示意性结构图。该设备800包括:输入设备801、输入接口802、处理器803、存储器804、输出接口805、以及输出设备806。
[0160] 其中,输入接口802、处理器803、存储器804、以及输出接口805通过总线810相互连接,输入设备801和输出设备806分别通过输入接口802和输出接口805与总线810连接,进而与计算设备800的其他组件连接。
[0161] 具体地,输入设备801接收来自外部的输入信息,并通过输入接口802将输入信息传送到处理器803;处理器803基于存储器804中存储的计算机可执行指令对输入信息进行处理以生成输出信息,将输出信息临时或者永久地存储在存储器804中,然后通过输出接口805将输出信息传送到输出设备806;输出设备806将输出信息输出到计算设备800的外部供用户使用。
[0162] 计算设备800可以执行本申请上述的方法中的各步骤。
[0163] 处理器803可以是一个或多个中央处理器(英文:Central Processing Unit,CPU)。在处理器601或处理器701是一个CPU的情况下,该CPU可以是单核CPU,也可以是多核CPU。
[0164] 存储器804可以是但不限于随机存储存储器(Random Access Memory,RAM)、只读存储器(Read-Only Memory,ROM),可擦除可编程只读存储器(Erasable Programmable Read Only Memory,EPROM)、光盘只读存储器(Compact Disc Read-Only Memory,CD-ROM)、硬盘等中的一种或多种。存储器504用于存储程序代码。
[0165] 可以理解的是,在本申请实施例中,图7提供的任一模块或全部模块的功能可以用图8所示的中央处理器803实现。
[0166] 在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用全部或部分地以计算机程序产品的形式实现,所述计算机程序产品包括一个或多个计算机指令。在计算机上加载或执行所述计算机程序指令时,全部或部分地产生按照本发明实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(Digital Subscriber Line,DSL)或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输)。所述计算机可读取存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,DVD)、或者半导体介质(例如固态硬盘Solid State Disk(SSD))等。
[0167] 根据本发明一实施例提供的用于处理查询请求的设备,该设备包括:至少一个处理器、至少一个存储器以及存储在所述存储器中的计算机程序指令,当所述计算机程序指令被所述处理器执行时实现上述的方法。
[0168] 根据本发明一实施例提供的计算机可读存储介质,其上存储有计算机程序指令,当所述计算机程序指令被处理器执行时实现上述的方法。
[0169] 以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到各种等效的修改或替换,这些修改或替换都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求的保护范围为准。