本发明涉及数据库软件系统开发技术领域,尤其是涉及一种分布式数据库多表关联查询的方法及系统。
背景技术:
当前的分布式数据库系统大都采用分片(sharding)的模式来实现数据的分布式存储。当两张表a和b分别采用了不同的分片规则时,其数据是无关联的散乱分布在各个分片上。如果有基于这两张表的关联(join)查询sql语句,则该sql通常无法直接发送到各个分片上执行(每个分片上存储的表a数据和表b数据不一定有关联关系,一个分片上的表a可能和另一个分片的上表b是关联关系),需要重新改写为非关联的语句来执行。
这个问题造成业务系统在使用分布式数据库系统时,需要投入大量的工作量去进行sql语句改造,导致工作进度延长、工作量投入加大。
技术实现要素:
针对上述问题,本发明提供了一种分布式数据库多表关联查询的方法及系统,解决分布式数据库系统中两张不同分片规则的表关联查询问题,使业务系统在使用分布式数据库系统时,可以不用再改写sql语句,更符合以往的开发习惯,减少业务开发难度。
为实现上述目的,本发明提供了一种分布式数据库多表关联查询的方法,包括:
分布式数据库代理节点接收并解析业务应用程序发送的sql语句;
根据解析结果依次判断sql语句是否为关联查询、关联的多表分片规则是否相同;
若是关联查询且多表分片规则不相同,则将所述sql语句拆分为多个单表查询语句;
根据各所述单表查询sql语句分别做路由计算,并发送到对应的数据库分片上执行,得到各自的查询结果;
根据多表的所述查询结果进行数据比对及汇总;
将汇总结果返回所述分布式数据库代理节点,由所述分布式数据库代理节点做最终汇总并反馈到业务应用程序。
作为本发明的进一步改进,若sql语句是简单查询,则无需判断关联的多表分片规则是否相同,直接对sql语句做路由计算,并将sql语句发送到对应的数据库分片上执行,将执行后的结果集汇总返回给业务应用程序。
作为本发明的进一步改进,若sql语句是关联查询,则进一步判断关联的多表分片规则是否相同,若关联的多表分片规则相同,对sql语句做路由计算,并将sql语句发送到对应的数据库分片上执行,将执行后的结果集汇总返回给业务应用程序。
作为本发明的进一步改进,在将所述sql语句拆分为多个单表查询语句时,应记录所述sql语句的关联字段信息。
作为本发明的进一步改进,根据多表的所述查询结果,按照所述关联字段进行数据比对及汇总。
作为本发明的进一步改进,对所述汇总结果按照原始sql语句的查询要求进行数据处理和再次汇总,将再次汇总的结果返回所述分布式数据库代理节点。
本发明还提供了一种分布式数据库多表关联查询的系统,包括:业务应用模块、分布式数据库代理节点、数据库存储节点和复杂查询代理节点;
所述业务应用模块,用于:
发送sql语句到分布式数据库代理节点;
所述分布式数据库代理节点,用于:
接收并解析业务应用程序发送的sql语句;
依次判断sql语句是否为关联查询、关联的多表分片规则是否相同;
对简单查询或关联查询但多张表的分片规则相同的sql语句做路由计算,并发送到对应的数据库分片上执行;
汇总查询结果并反馈到业务应用程序;
所述数据库存储节点,用于:
分布式存储数据,供数据查询和提取查询结果;
所述复杂查询代理节点,用于:
若是关联查询且多表分片规则不相同,则将所述sql语句拆分为多个单表查询语句;
根据各所述单表查询sql语句分别做路由计算,并发送到对应的数据库分片上执行;
根据多表的所述查询结果进行数据比对及汇总;
将汇总结果返回所述分布式数据库代理节点。
作为本发明的进一步改进,所述分布式数据库代理节点,还用于:分布式数据库代理节点与业务应用模块之间协议的解析和封装。
作为本发明的进一步改进,对所述汇总结果按照原始sql语句的查询要求进行数据处理和再次汇总,将再次汇总的结果返回所述分布式数据库代理节点。
作为本发明的进一步改进,在将所述sql语句拆分为多个单表查询语句时,应记录所述sql语句的关联字段信息;
根据多表的所述查询结果,按照所述关联字段进行数据比对及汇总。
与现有技术相比,本发明的有益效果为:
本发明通过对sql语句的关联查询判断及关联表的分片规则是否相同的判断,对关联查询且关联表的分片规则不同的sql语句,专门设置复杂查询流程,解决了分布式数据库系统中两张不同分片规则的表关联查询问题,使业务系统在使用分布式数据库系统时,可以不用再改写sql语句,更符合以往的开发习惯,减少了业务开发难度。
附图说明
图1为本发明一种实施例公开的分布式数据库多表关联查询的方法流程图;
图2为本发明一种实施例公开的分布式数据库多表关联查询的系统示意图;
图3为本发明一种实施例公开的分布式数据库多表关联查询的详细流程示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明的一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。
下面结合附图对本发明做进一步的详细描述:
如图1、3所示,本发明提供的一种分布式数据库多表关联查询的方法,包括:
s1、分布式数据库代理节点接收并解析业务应用程序发送的sql语句;
s2、根据解析结果依次判断sql语句是否为关联查询、关联的多表分片规则是否相同;
s3、若是关联查询且多表分片规则不相同,则将sql语句拆分为多个单表查询语句;
其中,
若sql语句是简单查询,则无需判断关联的多表分片规则是否相同,直接对sql语句做路由计算,并将sql语句发送到对应的数据库分片上执行,将执行后的结果集汇总返回给业务应用程序。
若sql语句是关联查询,则进一步判断关联的多表分片规则是否相同,若关联的多表分片规则相同,对sql语句做路由计算,并将sql语句发送到对应的数据库分片上执行,将执行后的结果集汇总返回给业务应用程序。
本发明中,在将sql语句拆分为多个单表查询语句时,应记录sql语句的关联字段信息。
s4、根据各单表查询sql语句分别做路由计算,并发送到对应的数据库分片上执行,得到各自的查询结果;
s5、根据多表的查询结果进行数据比对及汇总;
其中,根据多表的查询结果,按照关联字段进行数据比对及汇总。
s6、将汇总结果返回分布式数据库代理节点,由分布式数据库代理节点做最终汇总并反馈到业务应用程序。
其中,对汇总结果按照原始sql语句的查询要求进行数据处理和再次汇总,将再次汇总的结果返回分布式数据库代理节点。
如图2所示,本发明还提供了一种分布式数据库多表关联查询的系统,包括:业务应用模块、分布式数据库代理节点、数据库存储节点和复杂查询代理节点,配置时,服务器应大于或等于3台,cpu采用2c的2ghz,内存8gb,磁盘4gb;
业务应用模块,用于:
发送sql语句到分布式数据库代理节点;
分布式数据库代理节点,用于:
分布式数据库代理节点与业务应用模块之间协议的解析和封装;
接收并解析业务应用程序发送的sql语句;
依次判断sql语句是否为关联查询、关联的多表分片规则是否相同;
对简单查询或关联查询但多张表的分片规则相同的sql语句做路由计算,并发送到对应的数据库分片上执行;
汇总查询结果并反馈到业务应用程序。
数据库存储节点,用于:
分布式存储数据,供数据查询和提取查询结果。
复杂查询代理节点,用于:
若是关联查询且多表分片规则不相同,则将sql语句拆分为多个单表查询语句;
根据各单表查询sql语句分别做路由计算,并发送到对应的数据库分片上执行;
根据多表的查询结果进行数据比对及汇总;
将汇总结果返回分布式数据库代理节点。
本发明中,对汇总结果按照原始sql语句的查询要求进行数据处理和再次汇总,将再次汇总的结果返回分布式数据库代理节点。
本发明中,在将sql语句拆分为多个单表查询语句时,应记录sql语句的关联字段信息;
根据多表的查询结果,按照关联字段进行数据比对及汇总。
本发明的优点:
通过对sql语句的关联查询判断及关联表的分片规则是否相同的判断,对关联查询且关联表的分片规则不同的sql语句,专门设置复杂查询流程,解决了分布式数据库系统中两张不同分片规则的表关联查询问题,使业务系统在使用分布式数据库系统时,可以不用再改写sql语句,更符合以往的开发习惯,减少了业务开发难度。
以上仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。