数据库操作请求分配方法、设备和系统与流程

文档序号:11995414阅读:158来源:国知局
数据库操作请求分配方法、设备和系统与流程
本发明涉及数据库技术,尤其涉及一种数据库操作请求分配方法、设备和系统。

背景技术:
随着计算机网络的快速发展,出现了具有大量用户的网络应用,这些网络应用需要存储大量的用户数据以及相关数据。先前的单台数据存储服务器的数据存储方式已经不能满足当前网络应用的数据存储要求。目前数据库在使用中普遍采用主-从架构,一般来说,有一个主数据库服务器、多个从数据库服务器,所有的写操作都由主数据库服务器来执行,而从数据库服务器承担绝大部分的读操作。由于对于大多数应用而言,读操作的次数远远多于写操作,因此这种架构是有其合理性的。然而,存在这样的问题:每个从数据库服务器一般都存储有相同的数据,那么为了确定具体的每个读操作请求应该由哪个从数据库服务器来执行,就需要制定负载均衡策略。如果负载均衡策略不合理,就会造成某些从数据库压力很大,而某些从数据库又存在空闲,从而无法合理利用数据库集群的系统资源。目前,普遍采用的负载均衡策略是由应用编写人员自行控制负责均衡。应用在启动时分别建立到主数据库服务器和多个从数据库服务器的数据库连接,当要执行读操作时,由应用编写人员所编写的程序实现的负载均衡逻辑来决定把这次读操作分配给哪一个从数据库服务器(一般是采用轮询方式,即依次选取每个从数据库服务器),然后调用相应的从数据库服务器上的数据库连接,将操作请求发出去,并等待操作结果返回。上述方案的主要缺点是负载均衡逻辑需要应用编写人员自己来编写和实现,而且在使用过程中也需要由应用编写人员自己来控制,这样应用的开发成本就会很高。其次,为了实现并应用负载均衡,应用编写人员还需要对数据库服务器集群有比较深入的了解,学习成本也很高。另外,在数据库集群架构发生变化、例如从数据库服务器数量增减或从数据库服务器性能变化时,内建在应用中的负载均衡逻辑也需要作出相应的修改以适应这种变化,这就使得应用的维护成本很高。另一种方案是将所有从数据库服务器挂接于一台Linux虚拟服务器之后,由Linux虚拟服务器根据某种负载均衡算法,将应用发来的读操作请求导向某个从数据库服务器。此方案不需要应用编写人员关心负载均衡逻辑的具体实现算法,降低了开发成本。然而,各从数据库服务器的权重只能预先设置好,而不能根据各服务器的负载和网络等情况动态调整,因此,不能达到最优的系统资源利用率。

技术实现要素:
鉴于上述问题,提出了本发明,以便提供一种克服上述问题或者至少部分地解决上述问题的数据库操作请求分配方法、设备和系统。依据本发明的一个方面,提供了一种将数据库操作请求分配给多个数据库服务器之一的操作请求分配方法,其中每个数据库服务器具有代表该数据库服务器处理操作请求能力的相关联的权重,该方法包括步骤:接收对于数据库的操作请求;为该操作请求设置操作权重;在该多个数据库服务器中查询其相关联的权重满足为该操作请求设置的操作权重的数据库服务器;以及将该操作请求分配给所查询到的数据库服务器。可选地,在根据本发明的实施例的操作请求分配方法中,在为该操作请求设置操作权重的步骤中,将该多个数据库服务器相关联的权重中的最大权重设置为该操作请求的操作权重。可选地,在根据本发明的实施例的操作请求分配方法中,在该多个数据库服务器中查询其相关联的权重满足为该操作请求设置的操作权重的数据库服务器的步骤中,在该多个数据库服务器中依次查询,直到查询到其相关联的权重大于或者等于该操作权重的数据库服务器为止。可选地,在根据本发明的实施例的操作请求分配方法中,在该多个数据库服务器中依次查询的步骤包括:根据该多个数据库服务器构造数据库服务器队列;在数据库服务器队列中,将针对上一次的操作请求所查询到的数据库服务器的下一个数据库服务器作为初始数据库服务器,开始依次进行查询;在针对上一次的操作请求所查询到的数据库服务器为数据库服务器队列中的最后一个数据库服务器的情况下,将数据库服务器队列中的第一个数据库服务器作为初始数据库服务器,开始依次进行查询。可选地,根据本发明的实施例的操作请求分配方法还包括:在所查询到的数据库服务器为数据库服务器队列中的最后一个数据库服务器的情况下,降低要为下一个操作请求设置的操作权重;检查为下一个操作请求设置的操作权重是否为零,在该操作权重为零的情况下,将为下一个操作请求设置的操作权重设置为该多个数据库服务器相关联的权重中的最大权重。可选地,根据本发明的实施例的操作请求分配方法还包括:检测该多个数据库服务器中的各个数据库服务器的网络响应时间和/或网络延迟时间;根据检测结果,来调整各个数据库服务器相关联的权重。可选地,在根据本发明的实施例的操作请求分配方法中,该数据库服务器为从数据库服务器和/或主数据库服务器。依据本发明的另一方面,还提供了一种将数据库操作请求分配给多个数据库服务器之一的操作请求分配设备,其中每个数据库服务器具有代表该数据库服务器处理操作请求能力的相关联的权重,该操作请求分配设备包括:应用接口,适于从应用服务器接收对于数据库的操作请求;操作权重设置器,适于为该操作请求设置操作权重;服务器查询器,适于在该多个数据库服务器中查询其相关联的权重满足为该操作请求设置的操作权重的数据库服务器;以及数据库接口,适于将该操作请求分配给所查询到的数据库服务器。可选地,在根据本发明的实施例的操作请求分配设备中,该操作权重设置器将该多个数据库服务器相关联的权重中的最大权重设置为该操作请求的操作权重。可选地,在根据本发明的实施例的操作请求分配设备中,该服务器查询器在该多个数据库服务器中依次查询,直到查询到其相关联的权重大于或者等于该操作权重的数据库服务器为止。可选地,在根据本发明的实施例的操作请求分配设备中,当在该多个数据库服务器中依次查询时,该服务器查询器:根据该多个数据库服务器构造数据库服务器队列;在数据库服务器队列中,将针对上一次的操作请求所查询到的数据库服务器的下一个数据库服务器作为初始数据库服务器,开始依次进行查询;在针对上一次的操作请求所查询到的数据库服务器为数据库服务器队列中的最后一个数据库服务器的情况下,将数据库服务器队列中的第一个数据库服务器作为初始数据库服务器,开始依次进行查询。可选地,根据本发明的实施例的操作请求分配设备还包括操作权重调整器,适于:在所查询到的数据库服务器为数据库服务器队列中的最后一个数据库服务器的情况下,降低要为下一个操作请求设置的操作权重;检查为下一个操作请求设置的操作权重是否为零,在该操作权重为零的情况下,将为下一个操作请求设置的操作权重设置为该多个数据库服务器相关联的权重中的最大权重。可选地,在根据本发明的实施例的操作请求分配设备中,该操作权重调整器还适于:检测该多个数据库服务器中的各个数据库服务器的网络响应时间和/或网络延迟时间;根据检测结果,来调整各个数据库服务器相关联的权重。可选地,在根据本发明的实施例的操作请求分配设备中,该数据库服务器为从数据库服务器和/或主数据库服务器。依据本发明的又一方面,还提供了一种数据库操作请求分配系统,包括:上述根据本发明的操作请求分配设备;一个或者多个应用服务器,适于向该操作请求分配设备发送对于数据库的操作请求;以及一个或者多个数据库服务器,适于接收该操作请求分配设备分配的操作请求。本发明提供了上述数据库操作请求分配方法、设备和系统。根据本发明的实施例,可以为所接收的对于数据库的操作请求设置操作权重,在该多个数据库服务器中查询权重满足该操作权重的数据库服务器,并且将该操作请求分配给所查询到的数据库服务器。由此,实现了自动的负载均衡逻辑,使应用编写人员不再需要负责负载均衡逻辑的具体实现,可以专注于编写业务码,降低了开发成本;应用编写人员也不再需要对于数据库集群有深入的了解,降低了学习成本。另外,可以检测各数据库服务器的负载和网络状况,并以此为依据动态调整各数据库服务器的权重,从整体上降低了系统的响应时间,使系统的运行效率更高。而且,当数据库服务器数量或权重发生变化时,只需要相应地修改并加载配置信息,而应用的代码不需要作任何更改,这一点在应用数量较多或数据库服务器集群架构经常调整的情况下尤为重要。上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。附图说明通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:图1是根据本发明的实施例的将数据库操作请求分配给多个数据库服务器之一的操作请求分配方法的流程图;图2是根据本发明的一个实施例的上述数据库操作请求分配方法的各步骤的流程图;图3是根据本发明的一个实施例的上述数据库操作请求分配方法布置的系统的结构示意图;以及图4是根据本发明的将数据库操作请求分配给多个数据库服务器之一的操作请求分配设备和系统的框图。具体实施方式下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。图1示意性地图示了根据本发明的实施例的将数据库操作请求分配给多个数据库服务器之一的操作请求分配方法的流程图,并且图2示意性地图示了根据本发明的一个实施例的上述数据库操作请求分配方法的各步骤的流程图。下面将结合图1和图2对本发明进行详细的描述。根据本发明的实施例,数据库例如可以是MySQL数据库。在下文中,以MySQL数据库为例,对本发明的原理进行描述,然而,这只是为了示例的目的,本发明的范围并不限于此,本发明的原理同样适用于其它类型的数据库,例如IBMDB2、Oracle10等数据库。根据本发明的实施例,该数据库服务器可以是从数据库服务器和/或主数据库服务器。即,根据本发明的原理,(1)可以在多个从数据库服务器中分配数据库操作请求,将其分配给多个从数据库服务器之一;(2)也可以在多个主数据库服务器中分配数据库操作请求,将其分配给多个主数据库服务器之一;(3)还可以在一个或多个从数据库服务器以及一个或多个主数据库服务器中分配数据库操作请求,将其分配给其中的一个从数据库服务器或者一个主数据库服务器。在下文中,将以上述情况(1)(即,将数据库操作请求分配给多个从数据库服务器之一)为例,对于本发明的原理进行示例性地描述,然而,本发明的原理并不局限于此,而是同样可以适用于上述情况(2)和情况(3)。根据本发明的实施例,每个数据库服务器可以具有代表该数据库服务器处理操作请求能力的相关联的权重。例如,权重越高可以表示该数据库服务器的处理操作请求的能力越强。可选地,可以从数据库服务器集群中获取记录每个数据库服务器的权重的配置信息。如图1所示,根据本发明的实施例的将数据库操作请求分配给多个数据库服务器之一的操作请求分配方法始于步骤S101,其中,接收对于数据库的操作请求。可选地,在步骤S101之前,可以执行如图2所示的步骤S1001,其中,例如从数据库服务器集群获取记录每个数据库服务器的权重的配置信息。在步骤S101中,例如可以从一个或多个应用服务器接收对于数据库的操作请求。为了更加清楚地描述本发明的实施例,下面定义一组变量,具体情况请见下表。变量含义cur_ndx当前查询的数据库服务器的序号last_ndx队列中最后一个数据库服务器的序号cur_weight为当前尝试分配的操作请求设置的操作权重max_weight权重最高的数据库服务器的权重下面,参考图2,结合上面的这些变量来解释本发明的原理。在步骤S101之后,可以将当前尝试向其分配操作请求的从数据库服务器的序号(cur_ndx)初始化为0。接下来,在步骤S103中,为该操作请求设置操作权重。在一个实施例中,可以将该多个数据库服务器相关联的权重中的最大权重设置为该操作请求的操作权重。参见图2,可以将cur_weight设置为max_weight。在步骤S103后,执行步骤S105,其中,在该多个数据库服务器中查询其相关联的权重满足为该操作请求设置的操作权重的数据库服务器。根据本发明的实施例,例如可以在该多个数据库服务器中依次查询,直到查询到其相关联的权重大于或者等于该操作权重的数据库服务器为止。下面,参考图2,结合上面的这些变量来具体描述步骤S105。首先,可以根据该多个数据库服务器构造数据库服务器队列。在此队列中,各数据库服务器排列的先后顺序对于操作请求最终被分配到哪一个数据库服务器而言没有影响。因此,可以采取任意顺序构造数据库服务器队列,例如,按权重升序或降序来排列、或者随机排列各数据库服务器。随后,在数据库服务器队列中,可以将针对上一次的操作请求所查询到的数据库服务器的下一个数据库服务器作为初始数据库服务器,开始依次进行查询。即,图2中所示的cur_ndx=cur_ndx+1这一步骤。这是因为目前cur_ndx实际上是上次成功分配操作请求的数据库服务器的序号,在本次分配中,需要将下一个数据库服务器作为初始数据库服务器,开始依次进行查询。而在针对上一次的操作请求所查询到的数据库服务器为数据库服务器队列中的最后一个数据库服务器的情况下,即图2中所示的cur_ndx≥last_ndx的情况,可以将数据库服务器队列中的第一个数据库服务器作为初始数据库服务器,即图2中所示的cur_ndx=1,开始依次进行查询。其中,依次查询队列中的各数据库服务器的权重是否大于或者等于操作权重,如果当前查询的数据库服务器的权重小于操作权重,则如图2所示,令cur_ndx=cur_ndx+1,即查询队列中的下一个服务器,直到查询到权重大于或者等于操作权重的数据库服务器为止,即图2中所示的cur_ndx.weight≥cur_weight。根据本发明的实施例,在查询到相关联的权重满足操作权重的数据库服务器的情况下,还可以执行以下步骤:首先,需要检查是否已经查询完了队列中的全部数据库服务器,在所查询到的数据库服务器为数据库服务器队列中的最后一个数据库服务器的情况下,即图2中所示的cur_ndx=last_ndx的情况下,降低要为下一个操作请求设置的操作权重。例如,可以将cur_weight减一,即图2中所示的cur_weight=cur_weight-1。由于降低了操作权重,还需要检查为下一个操作请求设置的操作权重是否为零(图2中所示的cur_weight=0),在该操作权重为零的情况下,将为下一个操作请求设置的操作权重设置为该多个数据库服务器相关联的权重中的最大权重,即图2中所示的cur_weight=max_weight。在执行完步骤S105之后,执行步骤S107,其中,将该操作请求分配给所查询到的数据库服务器。下面,描述一个情况简单的示例,来帮助读者理解本发明的原理,但本发明的范围并不限于此。图3简要示出了该示例的系统布置,其中,假设有一个主数据库服务器和三个从数据库服务器a、b、c,它们的权重分别为2、1、3,以a、b、c的顺序构成从数据库服务器队列,应用服务器发来对于数据库的操作请求A,该请求为读请求,因此要分配给从数据库服务器来处理,由执行根据本发明的实施例的操作请求分配方法100的设备来进行操作请求的分配。在上面三个从数据库服务器中,最大权重为3,因此max_weight=3。首先,令操作请求A的操作权重cur_weight=max_weight=3,依次查询数据库服务器a、b、c,从数据库服务器c的权重为3,满足操作权重,因此将操作请求A分配给从数据库服务器c。由于已经查询到了队列中的最后一个数据库服务器c,因此将为下一个操作请求设置的操作权重例如降低为2。当应用服务器发来对于数据库的读操作请求B时,此时为读操作请求B设置的操作权重cur_weight=2,由于上次已经查询到了队列中的最后一个从数据库服务器c,因此将队列的第一个从数据库服务器a作为初始数据库服务器,依次查询,从数据库服务器a的权重为2,满足操作权重,因此将操作请求B分配给从数据库服务器a。当应用服务器发来对于数据库的读操作请求C时,此时为读操作请求C设置的操作权重cur_weight=2,从上次查询到的从数据库服务器a下面的从数据库服务器b开始进行依次查询,从数据库服务器c的权重为3,满足操作权重,因此将操作请求C分配给从数据库服务器c。由于已经查询到了队列中的最后一个数据库服务器c,因此将为下一个操作请求设置的操作权重例如降低为1。当应用服务器发来对于数据库的读操作请求D时,此时为读操作请求D设置的操作权重cur_weight=1,由于上次已经查询到了队列中的最后一个从数据库服务器c,因此将队列的第一个从数据库服务器a作为初始数据库服务器,依次查询,从数据库服务器a的权重为2,满足操作权重,因此将操作请求D分配给从数据库服务器a。当应用服务器发来对于数据库的读操作请求E时,此时为读操作请求E设置的操作权重cur_weight=1,从上次查询到的从数据库服务器a下面的从数据库服务器b开始进行依次查询,从数据库服务器b的权重为1,满足操作权重,因此将操作请求E分配给从数据库服务器b。当应用服务器发来对于数据库的读操作请求F时,此时为读操作请求F设置的操作权重cur_weight=1,从上次查询到的从数据库服务器b下面的从数据库服务器c开始进行依次查询,从数据库服务器c的权重为3,满足操作权重,因此将操作请求F分配给从数据库服务器c。此时,由于,由于已经查询到了队列中的最后一个数据库服务器c,因此将为下一个操作请求设置的操作权重例如降低为0。此时,由于操作权重为0,因此需要将其重新设置为各从数据库服务器中的最大权重,即3。下面如果应用服务器再次发来读操作请求,则将会如上面针对读操作请求A、B、C、D、E、F那样,每6次读操作请求为一个循环,继续执行下去。由此可以看出,对于每6次读操作请求,权重分别为2、1、3的三台从数据库服务器被分配操作请求的次数分别为2、1、3,与其权重成正比。因此,根据本发明的原理,可以保证权重高的数据库服务器被分配操作请求的次数比权重低的数据库服务器多,且被分配操作请求的次数与权重大小成正比。另外,根据本发明的实施例,还可以实现数据库服务器权重的动态调整。例如,可以检测该多个数据库服务器中的各个数据库服务器的网络响应时间和/或网络延迟时间,并且根据检测结果,来调整各个数据库服务器相关联的权重。上述检测可以以一定的时间周期循环执行,而检测的形式可以为对于数据库服务器集群执行一个简单的SQL(StructuredQueryLanguage,结构化查询语言)语句,来获取各数据库服务器的网络响应时间,网络响应时间越长,则说明数据库服务器的负载越高。检测的形式还可以为直接检测到各数据库服务器的网络延迟时间的长短。每进行完一轮检测,就可以根据检测结果,来调整个各数据库服务器的权重。负载高和/或网络延迟时间长的数据库服务器的权重就会被降低,而负载低和/或网络延迟时间短的数据库服务器的权重则会被增加。因此,可以始终保持各数据库服务器的权重反映其真实的处理能力,能够充分保证系统的资源利用率。特别地,如果某个数据库服务器发生故障,则会检测到无法连接到该服务器,这样,就可以将该数据库服务器的权重调整为0,使其无法被分配操作请求,如果一段时间后该数据库服务器恢复正常运行,也会被检测到,从而恢复其权重,使其能够被分配操作请求。下面,为了帮助读者理解这部分内容,再举一个简单的示例,同样,本发明的范围当然不限于此。假设有两个数据库服务器d和e,权重均为8,如上该,分配给它们的操作请求的比例将为1:1。假设以1ms的网络延迟时间为基准,如果检测到数据库服务器d的网络延迟时间低于1ms,则不改变其权重;而如果检测到数据库服务器e的网络延迟时间超过1ms,比如2ms,则例如可以将其权重调整为8×(1/2)=4。此时,这两个数据库服务器被分配操作请求的比例将变为2:1。特别地,如果某个数据库服务器发生故障,检测到无法连接到该服务器,即其网络延迟时间为无穷大,则其权重将被调整为8*(1/∞)=0,其将不会被分配操作请求,直到检测到其恢复正常为止。另外,根据本发明的实施例,还可以检测数据库服务器权重是否发生变化(例如由于上述权重调整)和/或数据库服务器队列信息是否发生变化(例如,数据库服务器的数量有增减),上述检测可以以一定的时间周期循环执行。当检测到发生变化的情况下,可以利用变化后的数据库服务器权重和/或变化后的数据库服务器队列信息来执行上述各步骤。本发明公开了一种将数据库操作请求分配给多个数据库服务器之一的操作请求分配方法。根据本发明的实施例,可以为所接收的对于数据库的操作请求设置操作权重,在该多个数据库服务器中查询权重满足该操作权重的数据库服务器,并且将该操作请求分配给所查询到的数据库服务器。由此,实现了自动的负载均衡逻辑,使应用编写人员不再需要负责负载均衡逻辑的具体实现,可以专注于编写业务码,降低了开发成本;应用编写人员也不再需要对于数据库集群有深入的了解,降低了学习成本。另外,可以检测各数据库服务器的负载和网络状况,并以此为依据动态调整各数据库服务器的权重,从整体上降低了系统的响应时间,使系统的运行效率更高。而且,当数据库服务器数量或权重发生变化时,只需要相应地修改并加载配置信息,而应用的代码不需要作任何更改,这一点在应用数量较多或数据库服务器集群架构经常调整的情况下尤为重要。与上述方法100相对应,本发明还提供了一种将数据库操作请求分配给多个数据库服务器之一的操作请求分配设备200。图4示意性地图示了根据本发明的将数据库操作请求分配给多个数据库服务器之一的操作请求分配设备200和系统1000的框图。如图4所示,该操作请求分配设备200主要包括应用接口201、操作权重设置器203、服务器查询器205、以及数据库接口207。其中,应用接口201从一个或多个应用服务器300-1、...、300-n接收对于数据库的操作请求,然后,操作权重设置器203为该操作请求设置操作权重,而服务器查询器205在该多个数据库服务器中查询其相关联的权重满足为该操作请求设置的操作权重的数据库服务器,并且数据库接口207将该操作请求分配给所查询到的数据库服务器。应用接口201、操作权重设置器203、服务器查询器205、以及数据库接口207可以分别用于执行上述方法100中的步骤S101、S103、S105、S107。根据本发明的实施例,该数据库服务器可以是从数据库服务器和/或主数据库服务器。根据本发明的实施例,每个数据库服务器可以具有代表该数据库服务器处理操作请求能力的相关联的权重。例如,权重越高可以表示该数据库服务器的处理操作请求的能力越强。可选地,数据库接口207可以从一个或多个数据库服务器400-1、…、400-n中获取记录每个数据库服务器的权重的配置信息,这可以在应用接口201从一个或多个应用服务器接收对于数据库的操作请求之前执行。同样,为了更加清楚地描述本发明的实施例,定义变量cur_ndx、last_ndx、cur_weight、max_weight,具体情况请参见上面针对方法100的描述中给出的表格和结合图2进行的描述。根据本发明的实施例,在应用接口201从一个或多个应用服务器接收对于数据库的操作请求之后,操作权重设置器203可以将该多个数据库服务器相关联的权重中的最大权重设置为该操作请求的操作权重。参见图2,操作权重设置器203可以将cur_weight设置为max_weight。随后,服务器查询器205例如可以在该多个数据库服务器中依次查询,直到查询到其相关联的权重大于或者等于该操作权重的数据库服务器为止。在该查询中,服务器查询器205可以首先根据该多个数据库服务器构造数据库服务器队列。在此队列中,各数据库服务器排列的先后顺序对于操作请求最终被分配到哪一个数据库服务器而言没有影响。因此,可以采取任意顺序构造数据库服务器队列,例如,按权重升序或降序来排列、或者随机排列各数据库服务器。随后,在数据库服务器队列中,服务器查询器205可以将针对上一次的操作请求所查询到的数据库服务器的下一个数据库服务器作为初始数据库服务器,开始依次进行查询。即,图2中所示的cur_ndx=cur_ndx+1。这是因为目前cur_ndx实际上是上次成功分配操作请求的数据库服务器的序号,在本次分配中,需要将下一个数据库服务器作为初始数据库服务器,开始依次进行查询。而在针对上一次的操作请求所查询到的数据库服务器为数据库服务器队列中的最后一个数据库服务器的情况下,即图2中所示的cur_ndx≥last_ndx的情况,服务器查询器205可以将数据库服务器队列中的第一个数据库服务器作为初始数据库服务器,即图2中所示的cur_ndx=1,开始依次进行查询。在此过程中,服务器查询器205依次查询队列中的各数据库服务器的权重是否大于或者等于操作权重,如果当前查询的数据库服务器的权重小于操作权重,则如图2所示,令cur_ndx=cur_ndx+1,即服务器查询器205查询队列中的下一个服务器,直到查询到权重大于或者等于操作权重的数据库服务器为止,即图2中所示的cur_ndx.weight≥cur_weight。根据本发明的实施例,该装置200还可以包括操作权重调整器,在服务器查询器205查询到相关联的权重满足操作权重的数据库服务器的情况下,检查是否已经查询完了队列中的全部数据库服务器,在所查询到的数据库服务器为数据库服务器队列中的最后一个数据库服务器的情况下,即图2中所示的cur_ndx=last_ndx的情况下,操作权重调整器可以降低要为下一个操作请求设置的操作权重。例如,可以将cur_weight减一,即图2中所示的cur_weight=cur_weight-1。由于降低了操作权重,操作权重调整器还需要检查为下一个操作请求设置的操作权重是否为零(图2中所示的cur_weight=0),在该操作权重为零的情况下,操作权重调整器将为下一个操作请求设置的操作权重设置为该多个数据库服务器相关联的权重中的最大权重,即图2中所示的cur_weight=max_weight。随后,数据库接口207就可以将该操作请求分配给所查询到的数据库服务器。另外,根据本发明的实施例,还可以实现数据库服务器权重的动态调整。该操作权重调整器可以检测该多个数据库服务器中的各个数据库服务器的网络响应时间和/或网络延迟时间,并且根据检测结果,来调整各个数据库服务器相关联的权重。由于上述各设备实施例与前述各方法实施例相对应,因此不再对各设备实施例进行详细描述。根据本发明的又一方面,还提供了一种数据库操作请求分配系统1000。参见图4,系统1000包括上述操作请求分配设备200;一个或者多个应用服务器300-1,…,300-n,适于向操作请求分配设备200发送对于数据库的操作请求;以及一个或者多个数据库服务器400-1,…,400-n,适于接收该操作请求分配设备200分配的操作请求。A6.如A1至5中的任一项所述的操作请求分配方法,还包括:检测所述多个数据库服务器中的各个数据库服务器的网络响应时间和/或网络延迟时间;根据检测结果,来调整各个数据库服务器相关联的权重。A7.如A1至6中的任一项所述的操作请求分配方法,其中所述数据库服务器为从数据库服务器和/或主数据库服务器。B12.如B11所述的操作请求分配设备,还包括操作权重调整器,适于:在所查询到的数据库服务器为数据库服务器队列中的最后一个数据库服务器的情况下,降低要为下一个操作请求设置的操作权重;检查为下一个操作请求设置的操作权重是否为零,在所述操作权重为零的情况下,将为下一个操作请求设置的操作权重设置为所述多个数据库服务器相关联的权重中的最大权重。B13.如B8至12中的任一项所述的操作请求分配设备,其中所述操作权重调整器还适于:检测所述多个数据库服务器中的各个数据库服务器的网络响应时间和/或网络延迟时间;根据检测结果,来调整各个数据库服务器相关联的权重。B14.如B8至13中的任一项所述的操作请求分配设备,其中所述数据库服务器为从数据库服务器和/或主数据库服务器。在此提供的算法和显示不与任何特定计算机、虚拟系统或者其它设备固有相关。各种通用系统也可以与基于在此的示教一起使用。根据上面的描述,构造这类系统所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。本领域那些技术人员可以理解,可以对实施例中的装置中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个装置中。可以把实施例中的若干模块组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者模块中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的替代特征来代替。此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。本发明的各个装置实施例可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用微处理器或者数字信号处理器(DSP)来实现根据本发明实施例的装置中的一些或者全部模块的一些或者全部功能。本发明还可以实现为用于执行这里所描述的方法的一部分或者全部的装置程序(例如,计算机程序和计算机程序产品)。这样的实现本发明的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供。应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1