一种处理结构化查询语言sql的方法及装置的制造方法_2

文档序号:8258851阅读:来源:国知局
过本发明实施例提供的一种处理结构化查询语言SQL的方法,当中间结果表中未缓存SQL对应的查询结果,可以自动校验SQL语句是都符合预设的规则,对符合预设规则的SQL语句进行查询,并将查询结果缓存到中间结果表中。
[0067]实施例二
[0068]由于内存空间有限,本发明实施例在上述实施例的基础上提供了一种处理结构化查询语言SQL的方法,如图3所示,该方法具体包括以下步骤:
[0069]步骤S301,获取客户端发送的SQL语句。
[0070]步骤S302,检查SQL语句的拼写是否合法,若合法,则执行步骤S303,若不合法,则将SQL语句返回客户端。
[0071 ] 步骤S303,解析SQL语句,获得语法分析树;
[0072]步骤S304,依据语法分析树从SQL语句中提取规范的SQL语句。;
[0073]步骤S305,判断SQL语句是否符合预设的规则,若符合,则执行步骤S306 ;若不符合,则将SQL语句返回给客户端。
[0074]步骤S306,判断中间结果表中是否缓存有与规范的SQL语句对应的查询结果,若无,则查询规范SQL语句,获得查询结果,并执行步骤S306 ;若有,则将查询结果返回至客户端;
[0075]步骤S307,将查询结果缓存到中间结果表中。
[0076]步骤S308,按照预设的时间间隔,更新中间结果表。
[0077]在步骤S308中,可以按照预设的时间间隔定,删除中间结果表中超过预设时间未被访问的查询结果,以更新中间结果表,或者随时手动删除中间结果表中超过预设时间未被访问的查询结果,以更新中间结果表,完成内存缓存的刷新,释放内存资源。
[0078]需要注意的是预计算一般都是针对非实时更新的数据库,对于每天少量更新且要求数据精确性的场景,本发明实施例可以通过更新中间结果表保证数据的精确性,但是为了保证性能,此时不支持avg聚合函数。
[0079]实施例三
[0080]本发明实施例提供了一种处理结构化查询语言SQL的装置,如图4所示,包括:SQL语句获取模块41、SQL语句解析模块42、规范的SQL语句提取模块43、预设规则判断模块44、SQL语句查询模块45和查询结果缓存模块46。
[0081]其中,SQL语句获取模块41,用于获取客户端发送的SQL语句;SQL语句解析模块42,用于解析SQL语句,获得语法分析树;规范的SQL语句提取模块43,用于判断SQL语句是否符合预设的规则,若符合,则依据语法分析树从SQL语句中提取规范的SQL语句;若不符合,则将SQL语句返回至客户端;预设规则判断模块44,用于判断SQL语句是否符合预设的规则;SQL语句查询模块45,用于判断中间结果表中是否缓存有与规范的SQL语句对应的查询结果,若无,则查询规范SQL语句,获得查询结果;若有,则将查询结果返回至客户端;查询结果缓存模块46,用于将查询结果缓存到中间结果表中。
[0082]在SQL语句获取模块41中,SQL (Structured Query Language,结构化查询语言)是一种对数据库查询的语句。可以通过JAVA API (Applicat1n Programming Interface,应用程序编程接口)或者Restful WebService API接口获取客户端发送的SQL语句,以对数据库进行查询。
[0083]在SQL语句解析模块42中,可以使用内部算法对SQL语句进行解析,分析SQL语句的语法,获得语法分析树。
[0084]在规范的SQL语句提取模块43中,规范的SQL语句可以为语法分析树的叶子节点对应的SQL语句。不同的SQL语句可能会具有相同的语法分析树的叶子节点,例如,第一SQL语句为“A= 1,B = 2,查询A是否大于B”;第二 SQL语句为“A = 2,B = 1,查询A是否大于B”,这两个SQL语句具有相同的查询结果,也具有相同的语法分析树的叶子节点。因此可以解析这两条语句中的任意一条SQL语句,获得语法分析树,将语法分析树的叶子节点作为这两条语句的规范的SQL语句。
[0085]在预设规则判断模块44中,判断SQL语句是否符合预设的规则,若符合,则依据语法分析树从SQL语句中提取规范的SQL语句;若不符合,则将SQL语句返回至客户端。
[0086]预设的规则可以包括以下至少一项:SQL语句拼写正确;SQL语句为SELECT语句;如无需动态更新缓存,SQL语句支持count、max、min、avg和sum类型的聚合函数;如需要支持动态更新缓存,SQL语句不支持avg类型的聚合函数;SQL语句不支持的表名列表和黑名单制;SQL语句不支持包括具有group by和having关键词的语句;SQL语句不包括超过一级以上子查询。
[0087]在SQL语句查询模块45中,为提高查询速度,中间结果表可以是内存散列表,如果内存的使用量在预设的容量范围,例如60%之内,则将查询结果放入内存进行缓存;若内存的使用量超过60%,则内存中保存中间结果表的索引位置。同时为了避免一些偶尔调用的SQL语句的查询结果缓存在内存中,造成内存资源浪费,可以在预设的访问总数或者访问频率的阈值,当SQL语句的访问总数或者访问频率超过预设的访问总数或者访问频率的阈值时,在内存中缓存该SQL语句的查询结果。
[0088]在查询结果缓存模块46,将查询结果缓存到中间结果表中。如果查询结果过多内存无法存放,则使用二级缓存结构,将查询结果缓存到数据库统计表的入口地址。
[0089]通过本发明实施例提供的一种处理结构化查询语言SQL的方法,当中间结果表中未缓存SQL对应的查询结果,可以自动校验SQL语句是都符合预设的规则,对符合预设规则的SQL语句进行查询,并将查询结果缓存到中间结果表中。
[0090]本发明一优选实施例中,还包括:中间结果表更新模块,用于按照预设的时间间隔,更新中间结果表。中间结果表更新模块,具体用于删除中间结果表中超过预设时间未被访问的查询结果。
[0091]请注意,上述仅为本发明的较佳实施例及所运用技术原理。本领域技术人员会理解,本发明不限于这里的特定实施例,对本领域技术人员来说能够进行各种明显的变化、重新调整和替代而不会脱离本发明的保护范围。因此,虽然通过以上实施例对本发明进行了较为详细的说明,但是本发明不仅仅限于以上实施例,在不脱离本发明构思的情况下,还可以包括更多其他等效实施例,而本发明的范围由所附的权利要求范围决定。
【主权项】
1.一种处理结构化查询语言SQL的方法,其特征在于,包括: 获取客户端发送的SQL语句; 解析所述SQL语句,获得语法分析树; 依据所述语法分析树从所述SQL语句中提取规范的SQL语句; 判断所述SQL语句是否符合预设的规则,若符合,则判断中间结果表中是否缓存有与所述规范的SQL语句对应的查询结果,若无,则查询所述规范SQL语句,获得查询结果; 将所述查询结果缓存到所述中间结果表中。
2.根据权利要求1所述的方法,其特征在于,所述规范的SQL语句为所述语法分析树的叶子节点对应的SQL语句。
3.根据权利要求1所述的方法,其特征在于,预设的规则包括以下至少一项: 所述SQL语句拼写正确; 所述SQL语句为SELECT语句; 如无需动态更新缓存,所述SQL语句支持count、max、min、avg和sum类型的聚合函数; 如需要支持动态更新缓存,所述SQL语句不支持avg类型的聚合函数; 所述SQL语句不支持的表名列表和黑名单制; 所述SQL语句不支持包括具有group by和having关键词的语句; 所述SQL语句不包括超过一级以上子查询。
4.根据权利要求1所述的方法,其特征在于,在所述判断中间结果表中是否缓存有与所述规范的SQL语句对应的查询结果,若无,则查询所述规范SQL语句,获得查询结果,并将所述查询结果缓存到所述中间结果表中之后,还包括: 按照预设的时间间隔,更新所述中间结果表。
5.根据权利要求4所述的方法,其特征在于,所述更新所述中间结果表包括: 删除所述中间结果表中超过预设时间未被访问的查询结果。
6.一种处理结构化查询语言SQL的装置,其特征在于,包括: SQL语句获取模块,用于获取客户端发送的SQL语句; SQL语句解析模块,用于解析所述SQL语句,获得语法分析树; 规范的SQL语句提取模块,用于依据所述语法分析树从所述SQL语句中提取规范的SQL语句; 预设规则判断模块,用于判断所述SQL语句是否符合预设的规则; SQL语句查询模块,用于判断中间结果表中是否缓存有与所述规范的SQL语句对应的查询结果,若无,则查询所述规范SQL语句,获得查询结果; 查询结果缓存模块,用于将所述查询结果缓存到所述中间结果表中。
7.根据权利要求6所述的装置,其特征在于,所述规范的SQL语句为所述语法分析树的叶子节点对应的SQL语句。
8.根据权利要求6所述的装置,其特征在于,预设的规则包括以下至少一项: 所述SQL语句拼写正确; 所述SQL语句为SELECT语句; 如无需动态更新缓存,所述SQL语句支持count、max、min、avg和sum类型的聚合函数; 如需要支持动态更新缓存,所述SQL语句不支持avg类型的聚合函数; 所述SQL语句不支持的表名列表和黑名单制; 所述SQL语句不支持包括具有group by和having关键词的语句; 所述SQL语句不包括超过一级以上子查询。
9.根据权利要求6所述的装置,其特征在于,还包括:中间结果表更新模块,用于按照预设的时间间隔,更新所述中间结果表。
10.根据权利要求9所述的装置,其特征在于,所述中间结果表更新模块,具体用于删除所述中间结果表中超过预设时间未被访问的查询结果。
【专利摘要】本发明实施例公开了一种处理结构化查询语言SQL的方法及装置,所述方法包括:获取客户端发送的SQL语句;解析SQL语句,获得语法分析树;依据语法分析树从SQL语句中提取规范的SQL语句;判断SQL语句是否符合预设的规则,若符合,则判断中间结果表中是否缓存有与规范的SQL语句对应的查询结果,若无,则查询规范SQL语句,获得查询结果;将查询结果缓存到中间结果表中。通过本发明公开的一种处理结构化查询语言SQL的方法及装置,当中间结果表中未缓存SQL对应的查询结果,可以自动校验SQL语句是都符合预设的规则,对符合预设规则的SQL语句进行查询,并将查询结果缓存到中间结果表中。
【IPC分类】G06F17-30
【公开号】CN104572979
【申请号】CN201410855824
【发明人】肖冰
【申请人】北京锐安科技有限公司
【公开日】2015年4月29日
【申请日】2014年12月31日
当前第2页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1