屏蔽异构数据库查询复杂度的数据服务方法与流程

文档序号:17476345发布日期:2019-04-20 06:09阅读:461来源:国知局
屏蔽异构数据库查询复杂度的数据服务方法与流程

本发明涉及一种既可以在软件开发时应用,也可以在后期运维中应的数据库的查询方法,尤其是屏蔽异构数据库查询复杂度的数据服务方法。



背景技术:

随着云技术、大数据的广泛应用,非关系型数据库逐渐开始流行起来。虽然当今互联网市场上存在着各种数据处理软件和方法,但是对于异构数据库还没有一种好的统一的处理方法,异构数据库的数据安全得不到保障,熟悉非关系型数据库的人才却又少之又少,对于非关系型数据库开发时开发成本较高,影响开发进度,因此能够屏蔽掉异构数据库复杂度的数据查询方法正是市场所需要的。



技术实现要素:

本发明的技术任务是针对以上现有技术的不足,而提供屏蔽异构数据库查询复杂度的数据服务方法。

本发明解决其技术问题所采用的技术方案是:屏蔽异构数据库查询复杂度的数据服务方法,其特征在于:具体步骤如下;

步骤一:用户通过图形化界面选择好想要查询的字段、表、以及筛选数据的条件,其中用户选择的字段、表、条件作为用户输入的文法;

步骤二:通过抽象语法树的方式,统一将用户输入的文法进行分析操作,并将用户输入的文法转换为sql语句或者是nosql语句;

在进行sql转换时:通过抽象语法树将文法中的字段、表名、以及条件提取出来,然后利用结构化数据库的固定语法格式将字段、表名、以及条件,按照固定的顺序添加到sql语句中,得到规范的sql语句;

在进行nosql转换时:首先,会对想要转换的数据库类型进行判断,是mongodb数据库还是neo4j数据库。然后通过抽象语法树将文法中的字段、表名、以及条件提取出来,对提取出来的条件按照mongodb数据库或者neo4j数据库的规则进行分解重组;

步骤三:通过用户输入的文法语句来实现对异构数据库的统一操作,其中用户输入的文法语句格式为:表名::=<字段>::=<条件>[,<条件>]|query;

步骤四:将查询到的数据整合成json文件,返回统一结果集。

进一步改进:在步骤二中,在进行nosql转换时,在条件这个环节上使用符号代换,利用用户输入的文法中符号对应的acsii码来转换对应的nosql条件语句。

本发明的优点:本数据服务方法能够屏蔽异构数据库查询的复杂度,可以省去学习非关系型数据库这一步骤,支持现在使用较多的mongodb数据库和neo4j数据库,通过统一的文法去操作异构数据库,返回统一的json结果,这样不但能够省去复杂的数据库查询语句,并且能够统一规范数据源,提高数据质量,能够使用户获取数据的过程更简单、快速、全面,适用于大部分主流编程语言,因为市场上使用率排名靠前的编程语言都支持json文件,都集成了操作json文件的相关函数。

附图说明

图1是本发明的结构框架图。

具体实施方式

下面结合说明书附图对本发明做以下详细说明。

如图所示,屏蔽异构数据库查询复杂度的数据服务方法,其特征在于:具体步骤如下;

步骤一:用户通过图形化界面选择好想要查询的字段、表、以及筛选数据的条件,其中用户选择的字段、表、条件作为用户输入的文法;

步骤二:通过抽象语法树的方式,统一将用户输入的文法进行分析操作,并将用户输入的文法转换为sql语句或者是nosql语句;

在进行sql转换时:通过抽象语法树将文法中的字段、表名、以及条件提取出来,然后利用结构化数据库的固定语法格式将字段、表名、以及条件,按照固定的顺序添加到sql语句中,得到规范的sql语句;

在进行nosql转换时:首先,通过抽象语法树将文法中的字段、表名、以及条件提取出来,对提取出来的条件按照mongodb数据库和neo4j数据库的规则进行分解重组;

步骤三:通过用户输入的文法语句来实现对异构数据库的统一操作,其中用户输入的文法语句格式为:表名::=<字段>::=<条件>[,<条件>]|query;

步骤四:将查询到的数据整合成json文件,返回统一结果集。

进一步改进:在步骤二中,在进行nosql转换时,在条件这个环节上使用符号代换,利用用户输入的文法中符号对应的acsii码来转换对应的nosql条件语句。

其工作原理是:实施例一:表名::=<字段>::=<条件>[,<条件>]|query;

用户输入的文法为,stu::=son::=son=’8’|query;这是一个简单的查询文法语句,第一个字段便是想要查询的表名,然后再重新组合sql或者是nosql。

关系型数据库,转换为selectsonfromstuwhereson=8;

非关系型数据库mongodb,转换为db.getcollection(stu).find({sno:8});

非关系型数据库neo4j,转换为match(stu)whereson=8returnson;;

实施例二用户输入的文法为,stu::=age,name::=age!=’18’,name=’张三’|query;

关系型数据库,转换为selectage,namefromstuwhereage!=18,name=’张三’;

非关系型数据库mongodb,转换为:db.getcollection(stu).find({age:{$ne:18},{name:’张三’});

非关系型数据库neo4j,转换为match(stu)whereage!=18,name=‘张三’returnage,name;;

实施例三用户输入的文法为,products::=productname,unitprice::=productnamelike'c%'andunitprice>100;

关系型数据库,转换为selectp.productname,p.unitpricefromproductsaspwherep.productnamelike'c%'andp.unitprice>100;

非关系型数据库mongodb,转换为db.products.find({"productname":"c%","unitprice":{"$gt":100}},{"productname":1,"unitprice":1});

非关系型数据库neo4j,转换为match(p:product)wherep.productnamestartswith"c"andp.unitprice>100returnp.productname,p.unitprice;

所有::=号左边的都是非终结符,所以“son”是非终结符,解析“stu”时遇到了“son”将会进入“son”产生式,而解析到普通query单词就不会继续解析。解析到query就代表着语句结束,终结符就是语句的终结,读到它表示产生式分析结束,相反,非终结符就是一个新产生式的开始。

mongodb的转换,首先按照文法的解析顺序,会解析到表名,将表名部分替换成db.getcollection(stu)。然后会解析到字段,但是由于mongodb查询不涉及到字段部分,所以直接跳到条件阶段,文法条件为son=8,首先使用acsii码替换,将“=”替换为“:”,条件的格式为find({<条件>}),然后将替换好的“son:8”填入<条件>处,mongodb中关键词自动使用“.”连接,替换完成。

neo4j的转换,首先按照文法的解析顺序,会解析到表名,将表名部分替换成match(stu)。然后会解析到字段,neo4j的语法会将字段的位置放到语句末尾,用return<字段名>[,<字段名>]的形式表示,将字段按照顺序填写在return后,用逗号隔开,即“returnson;”。最后解析的是条件,neo4j的条件书写格式与sql一样,在where后添加条件语句,neo4j的对于条件无需转换,直接使用“whereson=8”即可。

当读取到条件中的不等于符号时,编译器会返回它的acsii码,“!=”的acsii码为33和61,我们会将判断这两个acsii码,并设置对应的返回值为nosql的{字段:{$ne:值}的格式来表示这个条件。

当得到对应数据库的sql语句时对数据库进行查询,因为可能使用不同的开发语言,所以查询结束时想要输出json结果就需要不同的脚本语言来转换,转换完成后便输出最终的查询结果json文件。

以上所述仅为本发明的实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1