集群数据查询方法、客户端及系统
技术领域
本发明涉及一种数据库技术,尤其涉及一种数据库集群数据查询方法、客户端及系统。
背景技术
随着传统的数据库技术日趋成熟、计算机网络技术的飞速发展和应用范围的扩充,数据库应用已经普遍建立于计算机网络之上。这时集中式数据库系统表现出它的不足:集中式处理,势必造成性能瓶颈;应用程序集中在一台计算机上运行,一旦该计算机发生故障,则整个系统受到影响,可靠性不高;集中式处理引起系统的规模和配置都不够灵活,系统的可扩充性差。在这种形势下,集中式数据库将向分布式数据库发展。
数据库集群是将多台服务器联合起来组成集群来实现综合性能优于单个大型服务器的技术。
Amoeba:Amoeba是一个以MySQL为底层数据存储,并对应用提供MySQL协议接口的代理(proxy)。位于客户端(Client)和数据库服务器端(DB Server(s))之间。Amoeba对客户端透明,具有负载均衡、高可用性、sql过滤、读写分离、可路由相关的查询请求到目标数据库、可并发请求多台数据库合并结果。
Amoeba已经解决从数据库集群中取数据的问题,但在对取来的数据进行分组汇总、排序、和/或分页展示的问题,却未涉及。而如何解决上述直接关联到系统的时间效率及系统资源利用率。
近来,提出了一种对MONGODB的集群采用MAPREDUCE来进行数据查询中的汇总处理的方法。这种方法的缺点是速度较慢。例如,当查询结果数据量超过50万时,分组汇总速度会无法容忍,可能超过15秒。
此外,若在进行数据查询得到分组数据时、通过编写算法来将Amoeba选取的数据进行汇总,则当数据量较大时,会超过APACHE所允许的缓存大小设置,从而导致服务端的504错误。此外,由于编写算法需要手动地进行,需要编程工作量且需要后期维护,容易出现BUG。
发明内容
本发明所要解决的技术问题之一是需要提供一种效率较高、维护便捷的数据库集群数据查询方法、装置及系统。
为了解决上述技术问题,本发明提供了一种数据库集群数据查询方法,包括:
与数据库代理装置建立连接;
将查询条件传送给所述数据库代理装置;
接收从所述数据库代理装置返回的由所述数据库集群中各数据库服务器获取的由各所述数据库服务器分别基于所述查询条件得到的结果,作为第一查询结果;
将所述第一查询结果存储至指定数据库服务器;
接收由指定数据库服务器基于分组查询条件和被存储的数据返回的对所述第一查询结果按照设定条件分组后的查询结果。
进一步,所述将所述第一查询结果存储至指定数据库服务器的步骤包括:通过所述数据库代理装置将所述第一查询结果插入所述指定数据库服务器;以及/或者,所述接收由指定数据库服务器基于分组查询条件和被存储的数据返回的对所述第一查询结果按照设定条件分组后的查询结果的步骤包括:通过数据库代理装置接收由指定数据库服务器基于分组查询条件和被插入的数据返回的对所述第一查询结果按照设定条件分组后的查询结果。
进一步,所述将所述第一查询结果存储至指定数据库服务器的步骤包括:通过向所述指定数据库服务器的特定临时表中插入所述第一查询结果来将所述第一查询结果插入指定数据库服务器。
进一步,所述接收由指定数据库服务器基于分组查询条件和被存储的数据返回的对所述第一查询结果按照设定条件分组后的查询结果的步骤包括:生成用于分组查询所述指定数据库服务器中被插入的数据的分组查询条件,利用所生成的查询语句条件查询指定数据库服务器,以基于被插入的数据以获取对所述第一查询结果按照设定条件分组后的查询结果。
进一步,所述接收由指定数据库服务器基于分组查询条件和被存储的数据返回的对所述第一查询结果按照设定条件分组后的查询结果的步骤包括:生成用于查询被存储的数据以获取按照所述设定条件进行分组后的查询结果的所述分组查询条件,再接收由所述指定数据库服务器基于分组查询条件和被存储的数据返回的对所述第一查询结果按照设定条件分组后的查询结果。
进一步,所述数据库服务器是Mysql数据库服务器,以及/或者所述数据库代理装置是Amoeba数据库代理装置。
根据本发明另一方面,还提供了一种数据库集群数据查询客户端,包括:
连接建立模块,用于与数据库代理装置建立连接;
查询条件传送模块,用于将查询条件传送给所述数据库代理装置;
第一接收模块,用于接收从所述数据库代理装置返回的由所述数据库集群中各数据库服务器获取的由各数据库服务器分别基于所述查询条件得到的结果,作为第一查询结果;
插入模块,用于将所述第一查询结果存储至指定数据库服务器;
第二接收模块,用于接收由指定数据库服务器基于分组查询条件和被存储的数据返回的对所述第一查询结果按照设定条件分组后的查询结果。
其中,所述插入模块进一步通过所述数据库代理装置将所述第一查询结果插入所述指定数据库服务器;以及/或者,第二接收模块进一步通过所述数据库代理装置接收所述对所述第一查询结果按照设定条件分组后的查询结果。
其中,所述插入模块进一步用于通过向所述指定数据库服务器的特定临时表中插入所述第一查询结果来将所述第一查询结果插入指定数据库服务器。
根据本发明另一方面,还提供了一种数据库集群数据查询系统。所述系统包括数据库集群,所述数据库集群包括两个或两个以上数据库服务器,客户端和数据库代理装置,其中,所述客户端用于:
与所述数据库代理装置建立连接;
将查询条件传送给所述数据库代理装置;
接收从所述数据库代理装置返回的由所述数据库集群中各数据库服务器获取的由各所述数据库服务器分别基于所述查询条件得到的结果,作为第一查询结果;
将所述第一查询结果存储至指定数据库服务器;
接收由指定数据库服务器基于分组查询条件和被存储的数据返回的对所述第一查询结果按照设定条件分组后的查询结果。,
与现有技术相比,本发明的一个或多个实施例可以具有如下优点:
本发明无需采用MAPREDUCE来进行数据查询中的汇总处理,取而代之的是简单地向指定数据库服务器进行数据插入后再返回所插入的数据的操作,因此处理效率较高,减少查询响应时延。
此外,本发明通过将从各数据库服务器返回的数据写入一指定数据库服务器,再从该指定数据库服务器读取所写入的数据,无需编写程序代码来实现数据的汇总和/或排序,因此可避免代码出错、减少编程工作量和需要后期维护工作量。
虽然在下文中将结合一些示例性实施及使用方法来描述本发明,但本领域技术人员应当理解,为并不旨在将本发明限制于这些实施例。反之,旨在覆盖包含在所附的权利要求书所定义的本发明的精神与范围内的所有替代品、修正及等效物。
本发明的其他优点、目标,和特征在某种程度上将在随后的说明书中进行阐述,并且在某种程度上,基于对下文的考察研究对本领域技术人员而言将是显而易见的,或者可以从本发明的实践中得到教导。本发明的目标和其他优点可以通过下面的说明书,权利要求书,以及附图中所特别指出的结构来实现和获得。
附图说明
附图用来提供对本发明的进一步理解,并且构成说明书的一部分,与本发明的实施例共同用于解释本发明,并不构成对本发明的限制。在附图中:
图1示出根据本发明一实施例的数据库集群数据查询系统的结构示意图;
图2未决出根据本发明一实施例的数据库集群数据查询方法的流程示意图;
图3示出根据本发明一实施例的数据库集群数据查询客户端的结构示意图。
具体实施方式
以下将结合附图及实施例来详细说明本发明的实施方式,借此对本发明如何应用技术手段来解决技术问题,并达成技术效果的实现过程能充分理解并据以实施。需要说明的是,只要不构成冲突,本发明中的各个实施例以及各实施例中的各个特征可以相互结合,所形成的技术方案均在本发明的保护范围之内。
另外,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
图1示出根据本发明一实施例的数据库集群数据查询系统的结构示意图。该数据库集群数据查询系统包括客户端10、数据库代理装置20、两台MySql数据库服务器30。客户端10通过数据库代理装置20从由MySql数据库服务器30组成的数据库集群中查询数据。数据库代理装置20可以设置为安装了Amoeba等的位于客户端10与数据库服务器30之间的数据库代理服务器。此外,数据库服务器可以为两台或两台以上。
在2台服务器中安装数据库,以构建两台MySql数据库服务器30。在一台服务器中安装JVM(JAVA虚拟机)并安装Amoeba应用,以构建作为数据库代理装置20的Amoeba服务器(简称Amoeba)。配置Amoeba与Mysql的联接配置文件与配置规则。更具体地,安装完成后,进行如下配置:
修改Amoeba配置文件中的dbServer.xml文件中增加:
这样,设置了名称为server1的一个MySql数据库服务器30,并使其继承一个定义好的抽象服务类abstractServer,并将其IP地址设置为127.0.0.1。,为上述两个MySql数据库服务器30分别配置了IP地址。类似地,设置了名称为server2的又一个MySql数据库服务器30,并使其继承定义好的抽象服务类abstractServer,并将其IP地址设置为10.0.2.120。为上述两个MySql数据库服务器30分别配置了IP地址。
另外,还通过设置Rule.xml文件来设置分库规则。
通过上述设置,定义了数据的分配规则。这里只是个简单的规则,即id为奇数时存入到SERVER2中,id为偶数时存入到SERVER1中。
下面结合图2来详细说明根据本实施例的数据库集群数据查询方法。
步骤S210,客户端10与数据库代理装置20建立连接。在本例子中,客户端10可通过应用程序与Amoeba数据库代理装置20建立连接。
步骤S220,客户端10将查询条件传送给数据库代理装置20。这里的查询条件是指关键词查询。
步骤S230,数据库代理装置20把查询条件传送到每台Mysql数据库服务器30。
步骤S240,各Mysql数据库服务器30把自身根据该查询条件查询得到的结果返回给Amoeba数据库代理装置20。
步骤S250,Amoeba数据库代理装置20把从各Mysql数据库服务器30返回的结果一并返回给客户端10,作为第一查询结果。更具体地,客户端10接收从数据库代理装置返回的由数据库集群中各数据库服务器分别基于所述查询条件得到的结果,作为第一查询结果。
步骤S260,客户端10将第一查询结果存储至(插入)指定Mysql数据库服务器30中,插入了该第一查询结果的该指定Mysql数据库服务器30基于客户端10生成的分组查询条件向客户端10返回对所述第一查询结果按照设定条件分组后的查询结果,其中,设定条件可以根据用户需要任意设定。客户端10通过数据库代理装置接收由指定数据库服务器20基于被插入的数据返回的对所述第一查询结果按照设定条件分组后的查询结果(简称最终查询结果)。该指定Mysql数据库服务器30可以是Mysql数据库服务集群中的任意一台Mysql数据库服务器30。
更具体地,客户端10向指定Mysql数据库服务器30插入第一查询结果。客户端10可通过数据库代理装置20向指定Mysql数据库服务器30插入第一查询结果。客户端10可通过向所述指定Mysql数据库服务器30的特定临时表中插入所述第一查询结果来将所述第一查询结果插入指定数据库服务器。该特定临时表用于存储所述第一查询结果的数据。
客户端10生成用于查询该指定Mysql数据库服务器30中的第一查询结果的分组查询条件,利用所生成的分组查询条件查询指定Mysql数据库服务器30,以基于被插入的数据获取对所述第一查询结果按照设定条件分组后的查询结果。客户端10可通过数据库代理装置20来基于所生成的查询语句从指定Mysql数据库服务器30中获取最终的查询结果。可由数据库服务器30将被插入的数据分组后作为最终的查询结果返回给客户端10。此外,客户端10也可直接接收由所述指定数据库服务器返回的对所述第一查询结果按照设定条件分组后的查询结果,而无需经过数据库代理装置20的转发。
此外,数据库代理装置20可以单独设置,也可以与特定数据库服务器30集成于一体。
此外,根据本实施例的系统还可包括一个以上客户端10和一个以上的数据库代理装置20。
第二实施例
本实施例提。下面结合图3示出的根据本发明一实施例的数据库集群数据查询客户端的结构示意图来说明根据本实施例的数据库集群数据查询客户端。
该数据库集群数据查询客户端可包括:
连接建立模块31,用于与数据库代理装置20建立连接;
查询条件传送模块32,用于将查询条件传送给所述数据库代理装置20;
第一接收模块33,用于接收从所述数据库代理装置20返回的由所述数据库集群中各数据库服务器30获取的由各数据库服务器30分别基于所述查询条件得到的结果,作为第一查询结果;
插入模块34,用于将所述第一查询结果插入指定Mysql数据库服务器30;
第二接收模块35,用于接收由指定Mysql数据库服务器30基于被插入的数据返回的对所述第一查询结果按照设定条件分组后的查询结果(简称最终查询结果)。
此外,所述插入模块34可通过数据库代理装置20将所述第一查询结果插入指定Mysql数据库服务器30。
此外,第二接收模块33可通过数据库代理装置20接收由指定Mysql数据库服务器30基于被插入的数据返回的最终查询结果。
此外,第二接收模块35可进一步用于生成用于查询被存储(插入)至指定Mysql数据库服务器的第一查询结果的查询语句,基于所生成的查询语句从指定数据库服务器获取最终的查询结果。
此外,插入模块34进一步用于通过向所述指定Mysql数据库服务器30的特定临时表中插入第一查询结果来将第一查询结果存储(插入)至所述指定Mysql数据库服务器30。
本领域的技术人员应该明白,上述的本发明的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明不限制于任何特定的硬件和软件结合。
虽然本发明所揭露的实施方式如上,但所述的内容只是为了便于理解本发明而采用的实施方式,并非用以限定本发明。任何本发明所属技术领域内的技术人员,在不脱离本发明所揭露的精神和范围的前提下,可以在实施的形式上及细节上作任何的修改与变化,但本发明的专利保护范围,仍须以所附的权利要求书所界定的范围为准。