具体实施方式
为使本申请实施例的目的、技术方案和优点更加清楚明白,下面结合实施例和附图,对本申请实施例做进一步详细说明。在此,本申请实施例的示意性实施例及其说明用于解释本申请实施例,但并不作为对本申请实施例的限定。
下面结合附图,对本申请实施例的具体实施方式作进一步的详细说明。
参考图1所示,本申请实施例的数据处理方法包括以下步骤:
S101、接收通信发起方发送的针对指定数据库分片的访问请求。
本申请实施方式的执行主体可以为一个服务器。
本申请的一个实施方式中,通信发起方可以为具有运算和通信交互功能的电子设备,例如业务服务器等;本申请的另一个实施方式中,通信发起方也可以为运行于该电子设备中,为数据处理和通信交互提供支持的软体,例如应用的服务端等。
本申请的一个实施方式中,通信发起方并不具体限定其数量,可以为一个,也可以为多个,或者为由若干个组成的集群。
本申请的一个实施方式中,数据库分片是指将整个数据库按照预设的分片规则划分成多个分库,每分库称为一个数据库分片。
本申请的一个实施方式中,通信发起方可以接收或生成访问请求,并确定所述访问请求针对指定数据库分片,然后对外提供针对指定数据库分片的访问请求。其中,所述接收访问请求,例如可以是接收用户发起的访问请求,比如电子支付平台的转账系统接收用户提交的转账请求等。所述生成访问请求可以是根据预设的业务处理逻辑而生成的访问请求,例如网购平台的订单系统在用户提交订单后,生成一个订单写入请求等。
本申请的一个实施方式中,所述通信发起方可以根据数据库分片的分片规则,来确定所述访问请求针对指定数据库分片。
在一个示例性实施方式中,各个数据库分片可以是基于用户标识(user ID)哈希(Hash)取模方式进行划分的,即对用户标识进行哈希取模运算,得到哈希值,然后将该用户的数据划分至与该哈希值对应的数据库分片,例如哈希值为2,则将该用户的数据划分至0002数据库分片。这样,每个数据库分片与哈希值形成映射关系。对应的,所述通信发起方确定所述访问请求针对指定数据库分片可以包括:
首先对访问请求所包含的用户标识进行哈希取模运算,得到哈希值;
然后根据预设的数据库分片与哈希值的映射关系,确定所述访问请求针对指定数据库分片。
在另一个示例性实施方式中,各个数据库分片可以是基于用户标识的标识分段进行划分的。例如将用户标识的1~1000标识分段对应数据库分片01,1001~2000标识分段对应数据库分片02,以此类推。这样,每个数据库分片与标识分段形成映射关系。
对应的,所述通信发起方确定所述访问请求针对指定数据库分片可以包括:
首先确定访问请求所包含的用户标识所属的标识分段;
然后根据预设的数据库分片与标识分段的映射关系,确定所述访问请求针对指定数据库分片。
当然,数据库分片的划分规则有很多,以上仅是举例说明,在本申请其他实施方式中,也可以采用其他的数据库分片的划分规则划分数据库。对应的,所述通信发起方可根据相应的分片规则来确定访问请求针对指定数据库分片。
本申请的一个实施方式中,所述访问请求可以为写请求,也可以为读请求等。由于通常情况下,不同的业务系统使用的数据库也不同,因此,本申请实施方式中,同一个请求队列中的访问请求一般是相同类型的访问请求,例如都是同一抽奖活动中的中奖结果写请求,或都是同一电子优惠券发放活动中的电子优惠券获取请求等。
S102、确定当前是否存在所述数据库分片的请求队列;如果当前不存在所述数据库分片的请求队列,则执行步骤S103及其后续步骤,否则,执行步骤S104及其后续步骤。
本申请的一个实施方式中,为便于后续可批量提交访问请求,并有利降低对数据库的操作次数,针对指定数据库分片的访问请求可添加至对应的数据库分片的请求队列中。如图3所示,例如当确定一个访问请求的目的地是数据库分片1时,应当首先判断当前是否在数据库分片1的请求队列。在一个示例性实施方式中,当为某个数据库分片创建一个请求队列时,就会在请求队列与数据库分片的映射关系表中,增加相应的记录;因此,通过查找该映射关系表,可以确定当前是否存在特定数据库分片的请求队列。
S103、为所述数据库分片创建一个请求队列。
本申请的一个实施方式中,所述为所述数据库分片创建一个请求队列是指:创建一个所述数据库分片专属的请求队列,以用于缓存针对该数据库分片的访问请求。
S104、将所述访问请求添加至所述请求队列。
S105、在满足预设的第一触发条件时,将所述请求队列中指定范围内的访问请求出队,并作为一个事务提交至所述数据库分片。
本申请的一个实施方式中,所述满足预设的第一触发条件可以为:所述请求队列中的访问请求的数量达到预设阈值。所述预设阈值例如可以为1000个、2000个或者5000个等等。
本申请的另一个实施方式中,所述满足预设的第一触发条件可以为:所述请求队列达到预设的元素出队周期,所述元素出队周期例如可以为5毫秒、10毫秒、20毫秒等等,其中,每个请求队列的元素出队周期可以自该请求队列创建时间开始计算。
本申请的一个优选实施方式中,所述满足预设的第一触发条件可以为:所述请求队列中的访问请求的数量达到预设的阈值,或者所述请求队列达到预设的元素出队周期(即同时设置两个逻辑关系为或的触发条件,只要满足其中的任何一个就可以触发)。在高并发时期,由于访问请求量较大,如果仅设置了元素出队周期这一个触发条件(两个触发条件的逻辑关系为或),可能还未到元素出队周期时,队列就已经溢出,如果同时还设置了阈值触发条件,则可以很好的防止队列溢出;在非高并发时期,如果仅设置了阈值这一触发条件,由于访问请求量偏低,队列内缓存的访问请求的数量容易迟迟达不到阈值而无法触发,从而影响了访问请求提交的及时性,而如果同时设置元素出队周期触发条件(两个触发条件的逻辑关系为或),则可以有效保证了访问请求提交的及时性。
本申请的一个实施方式中,所述将所述请求队列中指定范围内的访问请求出队可以是将请求队列中的全部访问请求出队;也可以是请求队列中的一部分访问请求出队,例如请求队列中的前200个访问请求;具体可以根据实际需要设定。
本申请的一个实施方式中,所述作为一个事务提交至所述数据库分片,可以这样理解:例如请求队列中出队的访问请求为500个,由于这500个访问请求的目的地为同一个数据库分片,因此,可以将这500个访问请求一次性提交至该数据库分片,从而可以有效降低对数据库的操作次数。如果这500个访问请求全都提交成功,则认为该事务提交成功,否则,只要有未提交成功的,则认为该事务提交失败,即500个访问请求全都提交失败。其中,所述的提交成功,例如可以是在提交后的设定时间内,返回了针对访问请求的成功处理结果。所述的提交失败,例如可以是在提交后的设定时间内未返回响应或返回了处理失败的响应。
在本申请的一个实施方式中,在步骤S105之后,还可以包括以下步骤:
S106、接收所述数据库分片针对所述事务返回的处理结果,并据此确定对应访问请求的访问响应。
本申请的一个实施方式中,所述数据库分片针对所述事务返回的处理结果中包括各个对应访问请求的处理结果,例如作为一个事务一次性提交至某一数据库分片的访问请求为100个,则该数据库分片针对该事务返回的处理结果中,包含了这100个访问请求的处理结果,于是可以根据这100个访问请求的处理结果,确定其中每个访问请求的访问响应。
S107、确定每个访问响应所对应的通信发起方。
本申请的一个实施方式中,每个访问请求均是携带有源地址信息的,对应的每个访问响应所携带的目的地址信息,即为对应访问请求的源地址信息。由此,可以根据每个访问响应所携带的目的地址信息,确定其对应的通信发起方。
S108、确定当前是否存在每个访问响应所对应的通信发起方的响应队列。如果当前不存在某一访问响应所对应的通信发起方的响应队列,则执行步骤S110及其后续步骤,否则,执行步骤S109及其后续步骤。
本申请的一个实施方式中,与上述步骤S102类似,为便于后续批量提交访问响应,需将目的地为同一通信方的访问响应,添加至该的通信发起方的响应队列中。如图4所示,例如当确定一个访问响应的目的地为业务服务器1时,应当首先判断当前是否在业务服务器1的响应队列。在一个示例性实施方式中,当为某个业务服务器1创建一个响应队列时,就会在响应队列与业务服务器的映射关系表中,增加相应的记录;因此,通过查找该映射关系表,可以确定当前是否存在特定业务服务器的响应队列。
S109、为不存在响应队列的通信发起方创建一个响应队列。
本申请的一个实施方式中,所述为不存在响应队列的通信发起方创建一个响应队列是指:创建一个不存在响应队列的通信发起方专属的请求队列,以用于缓存目的地为该通信发起方的访问响应。
S110、将访问响应添加至相应的响应队列。
S111、对于每个访问响应所对应的通信发起方的响应队列,在满足预设第二触发条件时,将其中指定范围内的访问响应出队,并作为一个事务返回给对应的通信发起方。
本申请的一个实施方式中,所述满足预设的第二触发条件可以为:所述响应队列中的访问响应的数量达到预设阈值。所述预设阈值例如可以为500个、1000个或者2000个等等。
本申请的另一个实施方式中,所述满足预设的第一触发条件可以为:所述响应队列达到预设的元素出队周期,所述元素出队周期例如可以为5毫秒、15毫秒、20毫秒等等,其中,每个响应队列的元素出队周期可以自该响应队列创建时间开始计算。
本申请的一个优选实施方式中,所述满足预设的第一触发条件可以为:所述响应队列中的访问响应的数量达到预设的阈值,或者所述响应队列达到预设的元素出队周期(即同时设置两个逻辑关系为或的触发条件,只要满足其中的任何一个就可以触发)。
如图2所示,为本申请另一个实施方式的数据处理方法,其包括以下步骤:
S201、接收访问请求,并根据数据库的分片规则确定所述访问请求所针对的数据库分片。
本申请实施方式的执行主体可以为一个服务器。
本申请实施方式接收到的是通信发起方发送的访问请求,然后根据数据库的分片规则确定所述访问请求所针对的数据库分片。与图1所示数据处理方法不同在于,确定访问请求所针对的数据库分片的任务不是由通信发起方完成的,而是由本申请实施方式的执行主体来完成。至于根据数据库的分片规则确定访问请求所针对的数据库分片,可参见图1所示数据处理方法的步骤S101,在此不再赘述。
S202、确定当前是否存在所述数据库分片的请求队列;如果当前不存在所述数据库分片的请求队列,则执行步骤S203及其后续步骤,否则,执行步骤S204及其后续步骤。
S203、为所述数据库分片创建一个请求队列。
本申请的一个实施方式中,所述为所述数据库分片创建一个请求队列是指:创建一个所述数据库分片专属的请求队列,以用于缓存针对该数据库分片的访问请求。
S204、将所述访问请求添加至所述请求队列。
S205、在满足预设的第一触发条件时,将所述请求队列中指定范围内的访问请求出队,并作为一个事务提交至所述数据库分片。
在本申请的一个实施方式中,在步骤S205之后,还可以包括以下步骤:
S206、接收所述数据库分片针对所述事务返回的处理结果,并据此确定对应访问请求的访问响应。
S207、确定每个访问响应所对应的通信发起方。
本申请的一个实施方式中,每个访问请求均是携带有源地址信息的,对应的每个访问响应所携带的目的地址信息,即为对应访问请求的源地址信息。由此,可以根据每个访问响应所携带的目的地址信息,确定其对应的通信发起方。
S208、确定当前是否存在每个访问响应所对应的通信发起方的响应队列。如果当前不存在某一访问响应所对应的通信发起方的响应队列,则执行步骤S210及其后续步骤,否则,执行步骤S209及其后续步骤。
S209、为不存在响应队列的通信发起方创建一个响应队列。
本申请的一个实施方式中,所述为不存在响应队列的通信发起方创建一个响应队列是指:创建一个通信发起方专属的请求队列,以用于缓存目的地为该通信发起方的访问响应。
S210、将访问响应添加至相应的响应队列。
S211、对于每个访问响应所对应的通信发起方的响应队列,在满足预设第二触发条件时,将其中指定范围内的访问响应出队,并作为一个事务返回给对应的通信发起方。
本申请实施方式的S201~S211的具体细节,请参见图1所示数据处理方法的S101~S111,在此不再赘述。
虽然上文描述的过程流程包括以特定顺序出现的多个操作,但是,应当清楚了解,这些过程可以包括更多或更少的操作,这些操作可以顺序执行或并行执行(例如使用并行处理器或多线程环境)。
下面介绍本申请图1所示数据处理方法一种应用场景:
参考图5所示,为某第三方电子支付平台的百万红包抽奖业务的系统架构,业务系统接收用户的抽奖请求并与抽奖系统交互,以获得抽奖结果。
当用户中奖时,业务系统需将中奖结果交由抽奖系统落地至数据库。业务系统在发起中奖结果写入请求前,先根据数据库分片的分片规则确定中奖结果写入请所对应的数据库分片,然后发起针对该数据库分片的中奖结果写入请求。
当接收到业务系统发送的针对指定数据库分片的中奖结果写入请求时,抽奖系统先确定当前是否存在该数据库分片的写入请求队列,如果存在,则将所述中奖结果写入请求添加至该写入请求队列中,并等待提交结果;如果不存在,则为该数据库分片创建一个写入请求队列,将所述中奖结果写入请求添加至该写入请求队列中,并等待提交结果。
在满足触发条件时(例如写入请求队列中缓存的中奖结果写入请求的数量达到阈值),抽奖系统将所述写入请求队列中的中奖结果写入请求全部出队,并作为一个事务提交至对应的数据库分片。
事务提交后,数据库分片会返回提交结果至抽奖系统,抽奖系统并据此提交结果确定对应中奖结果写入请求的中奖结果写入响应,并确定每个中奖结果写入响应所对应的业务系统;
抽奖系统确定当前是否存在每个中奖结果写入响应所对应的业务系统的写入响应队列;如果存在,则抽奖系统将对应的中奖结果写入响应添加至相应的写入响应队列;
对于每个中奖结果写入响应所对应的业务系统的写入响应队列,在满足触发条件(例如写入响应队列中缓存的中奖结果写入响应的数量达到阈值)时,抽奖系统将其中指定范围内的中奖结果写入响应出队,并作为一个事务返回给对应的业务系统;再由业务系统根据中奖结果写入响应通知用户中奖情况。
参考图6所示,为本申请一实施方式的数据处理装置,其包括:
访问获取模块61,用于获取针对指定数据库分片的访问请求;
队列确认模块62,用于确定当前是否存在所述数据库分片的与所述访问请求场景相同的请求队列,如果存在,则将所述访问请求添加至所述请求队列;
访问提交模块63,用于在满足预设的第一触发条件时,将所述请求队列中指定范围内的访问请求出队,并作为一个事务提交至所述数据库分片。
本申请实施实施方式的数据处理装置与上述数据处理方法对应,因此,有关于本申请实施实施方式的数据处理装置的细节内容,请参见上述数据处理方法,在此不再赘述。
参见图7所示,本申请实施方式的服务器在硬件层面可以包括处理器、内部总线、存储器和内存,当然还可能包括其他业务所需要的硬件。处理器从存储器中读取对应的计算机程序到内存中然后运行,在逻辑层面上形成数据处理装置。当然,除了软件实现方式之外,本申请并不排除其他实现方式,比如逻辑器件抑或软硬件结合的方式等等,也就是说以下处理流程的执行主体并不限定于各个逻辑单元,也可以是硬件或逻辑器件。其中,所述数据处理装置被所述处理器执行时,执行如下步骤:
获取针对指定数据库分片的访问请求;
确定当前是否存在所述数据库分片的与所述访问请求场景相同的请求队列,如果存在,则将所述访问请求添加至所述请求队列;
在满足预设的第一触发条件时,将所述请求队列中指定范围内的访问请求出队,并作为一个事务提交至所述数据库分片。
本申请实施实施方式的服务器中,处理器所执行的步骤与上述数据处理方法对应,因此,有关于所述处理器所执行的步骤的细节内容,请参见上述数据处理方法,在此不再赘述。
结合图8所示,在一个应用场景下,上述图7所示的服务器可以是以分布式集群的方式存在。
本申请以上实施例可将针对同一个数据库分片的访问请求缓存到同一个请求队列中;在满足预设的触发条件时,将请求队列中指定范围内的访问请求出队;由于请求队列中的访问请求的目的地是同一个数据库分片,从而可以将请求队列中指定范围内的访问请求,作为一个事务提交至对应的数据库分片。因而,本申请实施例可有效降低了对数据库的操作次数,提高了系统的吞吐量。
在20世纪90年代,对于一个技术的改进可以很明显地区分是硬件上的改进(例如,对二极管、晶体管、开关等电路结构的改进)还是软件上的改进(对于方法流程的改进)。然而,随着技术的发展,当今的很多方法流程的改进已经可以视为硬件电路结构的直接改进。设计人员几乎都通过将改进的方法流程编程到硬件电路中来得到相应的硬件电路结构。因此,不能说一个方法流程的改进就不能用硬件实体模块来实现。例如,可编程逻辑器件(Programmable Logic Device,PLD)(例如现场可编程门阵列(Field Programmable GateArray,FPGA))就是这样一种集成电路,其逻辑功能由用户对器件编程来确定。由设计人员自行编程来把一个数字系统“集成”在一片PLD上,而不需要请芯片制造厂商来设计和制作专用的集成电路芯片2。而且,如今,取代手工地制作集成电路芯片,这种编程也多半改用“逻辑编译器(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)与Verilog2。本领域技术人员也应该清楚,只需要将方法流程用上述几种硬件描述语言稍作逻辑编程并编程到集成电路中,就可以很容易得到实现该逻辑方法流程的硬件电路。
本领域技术人员也知道,除了以纯计算机可读程序代码方式实现控制器以外,完全可以通过将方法步骤进行逻辑编程来使得控制器以逻辑门、开关、专用集成电路、可编程逻辑控制器和嵌入微控制器等的形式来实现相同功能。因此这种控制器可以被认为是一种硬件部件,而对其内包括的用于实现各种功能的装置也可以视为硬件部件内的结构。或者甚至,可以将用于实现各种功能的装置视为既可以是实现方法的软件模块又可以是硬件部件内的结构。
通过以上的实施方式的描述可知,本领域的技术人员可以清楚地了解到本申请可借助软件加必需的通用硬件平台的方式来实现。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施方式或者实施方式的某些部分所述的方法。
本说明书中的各个实施方式均采用递进的方式描述,各个实施方式之间相同相似的部分互相参见即可,每个实施方式重点说明的都是与其他实施方式的不同之处。
本申请可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本申请,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。
以上所述的具体实施例,对本申请的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本申请实施例的具体实施例而已,并不用于限定本申请的保护范围,凡在本申请的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。