[发明专利]一种分布式数据库的代理结果合并方法及系统有效
申请号: | 201410315793.6 | 申请日: | 2014-07-03 |
公开(公告)号: | CN104111992B | 公开(公告)日: | 2017-05-17 |
发明(设计)人: | 李静 | 申请(专利权)人: | 北京思特奇信息技术股份有限公司 |
主分类号: | G06F17/30 | 分类号: | G06F17/30;H04L29/06 |
代理公司: | 北京轻创知识产权代理有限公司11212 | 代理人: | 杨立 |
地址: | 100086 北京市海淀*** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 分布式 数据库 代理 结果 合并 方法 系统 | ||
技术领域
本发明涉及一种分布式数据库的代理结果合并方法及系统。
背景技术
现有分布式数据库代理对客户端发送来待处理的每一个SQL请求,经过代理的路由规则得到目标节点,然后将SQL信息发送给MYSQL服务器处理,并将处理结果返回给客户端。如果路由结果是多个物理节点,那么代理会将查询结果做简单的合并返回给客户端。如果SQL里没有一些诸如sum、max等函数,那么查询结果的简单合并是满足需求的。如果有这些函数,那么查询结果就需要做进一步的处理而不是简单的合并,如sum函数,就需要对查询结果中的sum值再做一次累加返回给客户端,这样客户端就能得到正确的结果而不需要应用再做二次处理。基于此原理,代理需要就包含一些函数的SQL的执行结果做相应的逻辑处理,然后返回给客户端,以期实现分布式数据库代理的结果集合并处理。
基于现有系统处理的缺点:
SQL中有sum函数时,返回的结果是单个节点sum值的简单合并。
SQL中有count函数时,返回的结果是单个节点count值的简单合并。
SQL中有max函数时,返回的结果是单个节点max值的简单合并。
SQL中有min函数时,返回的结果是单个节点max值的简单合并。
SQL中有avg函数时,返回的结果是单个节点avg值的简单合并。
SQL中有order by函数时,返回的结果是单个节点order by值的简单合并。
SQL中有group by函数时,返回的结果是单个节点order by值的简单合并。
SQL中有distinct函数时,返回的结果是单个节点的distinct值的简单合并。
在互联网、电信等许多关键领域,随着企业业务的不断发展,企业的I/T环境也在不断进行演变,单个数据库已经很难满足海量数据库存储和高并发数据访问,分布式数据库的出现成为必然,分布式数据库能够有效的解决海量数据存储和并发问题,通过数据的水平切分和数据表的垂直切分,有效的缓解了海量数据存储,通过负载均衡、高可用、轮询等缓解了高并发问题,但是分布式数据库在对待有函数的SQL执行结果时只是进行简单的合并,从而客户端得到的是有歧义的结果。
发明内容
本发明所要解决的技术问题是提供一种针对不同函数,采用不同处理和合并方法的分布式数据库的代理结果合并方法。
本发明解决上述技术问题的技术方案如下:一种分布式数据库的代理结果合并方法,具体包括以下步骤:
步骤1:解析第一SQL语句得到其包括的函数;
步骤2:判断所述函数属于第一类函数还是第二类函数,如果是第一类函数,执行步骤8;否则,执行步骤3;
步骤3:判断所述函数是否是distinct函数,如果是,执行步骤5;否则,执行步骤4;
步骤4:对第一SQL语句进行预处理得到第二SQL语句,将第二SQL语句替换第一SQL语句;
步骤5:发送第一SQL语句或第二SQL语句到MYSQL服务端;
步骤6:获得MYSQL服务端返回的结果集,根据MYSQL数据包的协议格式,将结果集转换成数据包集合;
步骤7:根据所述函数对数据包集合进行操作,得到新的结果集;
步骤8:对新的结果集进行数据包封装得到新的数据包,将新的数据包发送到客户端。
本发明的有益效果是:本发明具有经济性:支持在不增加硬件投入的条件下,提高系统并发处理能力;充分利用设备闲置时段的计算资源,提高系统资源利用率;利用低端服务器上负载分担数据库的存储空间进行数据处理;本发明还能提升性能和安全性:可配置方式移动计算、移动数据进行云计算,提供并行计算的性能和效率;保障数据的一致性、完整性、可用性,提高数据的隔离型,为高并发系统奠定基础。
在上述技术方案的基础上,本发明还可以做如下改进。
进一步,所述第一类函数包括sum函数、count函数、max函数和min函数;所述第二类函数包括avg函数、order by函数、group by函数和distinct函数。
进一步,所述步骤4具体包括以下步骤:
步骤4.1:判断第一SQL语句是否包含avg函数,如果是,执行步骤4.2;否则执行步骤4.3;
步骤4.2:将第一SQL语句中的avga()改变为sum(),count()和avga(),得到第二SQL语句,执行步骤5;
步骤4.3:判断第一SQL语句是否包含order by函数,如果是,执行步骤4.4;否则,执行步骤4.6;
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于北京思特奇信息技术股份有限公司,未经北京思特奇信息技术股份有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201410315793.6/2.html,转载请声明来源钻瓜专利网。