一种多结构数据库集成查询方法

文档序号:8473080阅读:257来源:国知局
一种多结构数据库集成查询方法
【技术领域】
[0001]本发明涉及一种多结构数据库集成查询方法。
【背景技术】
[0002]传统关系型数据库的读写性能以及水平扩展性在大数据背景下面临严峻的考验,而NoSQL数据库以灵活的数据模型和良好的水平扩展性弥补了关系型数据库无法满足的特性。如今,SQL与NoSQL集成存储成为数据库架构新的研宄方向。那么,上层应用如何透明地访问异构数据源也成为了亟待解决的问题。
[0003]目前,大部分现有技术只能针对特定的NoSQL数据库进行访问,如Hbase的各类API只能使应用程序访问Hbase数据库,并没有考虑到SQL与NoSQL集成存储时,异构数据源透明访问的问题。而某些文献或论文中提及一些集成访问的方案,或者没有具体实现,或者较为基本,没有充分利用SQL查询语言以及关系型数据库的成熟技术。
[0004]基于复合查询语言的SQL与NoSQL数据库的统一查询模型提供了基本的SQL与NoSQL集成查询的模型,包含NoSQL数据转化、查询模式转化、查询执行与结果输出三大模块。该模型的架构如图1所示,具体查询步骤如下:
[0005](I)NoSQL数据转化模块:基于RDF思想,将NoSQL数据库中的所有数据转化为(id, key, value)形式的三元组,并将转化后得到的三元组数据注入SQL数据库。
[0006](2)查询模式转化模块:开发者编写特定格式的复合查询语言,由查询模式转化模块对其进行解析,分离出SQL查询部分和NoSQL查询部分。将NoSQL查询部分转化为对注入至SQL数据库中的三元组数据的SQL查询形式,再与分离出来的SQL查询部分合并,成为最终的SQL查询形式。
[0007](3)查询执行与结果输出模块:执行最终的SQL查询形式,处理查询结果并返回给用户。
[0008]上述基于复合查询语言的SQL与NoSQL数据库的统一查询模型存在如下缺陷:
[0009](I) NoSQL数据转化模块将NoSQL数据库中的所有数据进行转化并注入到SQL数据库中,供查询执行模块进行访问;这个过程转化了很多并不符合查询条件的数据,造成SQL数据库存储空间的浪费,而过多的多余记录数据则会影响查询执行模块的查询效率。
[0010](2)查询模式转化模块支持特定格式的复合查询语言的转化,而这种复合查询语言并不具有通用性,为开发者的使用带来一定的难度和学习成本。
[0011](3)查询模式转化模块中对NoSQL查询部分的转化是对所有的三元组数据进心先交叉连接后数据集筛选的算法,如果存在N张记录数为M的三元组数据表,那么需要(N-1)次交叉连接操作,产生MN条记录,再对其进行条件筛选,查询效率较低。
[0012]缩略语和关键术语定义
[0013]SQL Structured Query Language结构化查询语言,现泛指关系型数据库
[0014]NoSQL Not Only SQL泛指非关系型数据库
[0015]RDF Resource Descript1n Framework 资源描述框架
[0016]API Applicat1n Programming Interface 应用程序编程接口

【发明内容】

[0017]发明目的:为了克服现有技术中存在的不足,本发明提供一种基于标准结构化查询语言预分析的关系型数据库与非关系型数据库集成查询的方法,该方法充分利用SQL查询语言以及关系型数据库的成熟技术,对查询算法进行优化,以降低查询时间、提高查询效率,该方法能够使开发者直接使用标准化的SQL语句进行数据访问,不用关心底层数据源的类型。
[0018]技术方案:为实现上述目的,本发明采用的技术方案为:
[0019]针对NoSQL数据库的查询,为了克服现有架构方案中NoSQL数据转化冗余以及查询模式转化算法效率低造成的SQL存储空间浪费和查询效率不高的问题,本发明提供一种多结构数据库集成查询方法,本发明采用查询语言预分析方案以及查询模式转化采用先预筛选后内连接的算法,减少NoSQL转化返回的数据量和表连接操作的次数,提高算法执行效率,从而降低SQL存储空间的使用率和提高查询效率。该方法包括如下步骤:
[0020](I)系统对用户查询进行预分析,预分析内容包括:①根据数据表字典,识别出该查询属于SQL类型还是NoSQL类型,分类型处理;②从用户查询的查询语句中提取出NoSQL数据的预查询条件,即NoSQL数据的等值查询条件;③从用户查询的查询语句中提取出NoSQL数据的二次查询条件集从用户查询的查询语句中提取出该查询包含的最大字段集;
[0021](2) NoSQL数据预查询及转化:根据预查询条件,对NoSQL数据进行一次预查询,仅将符合预查询条件的NoSQL数据转化为三元组数据,以降低NoSQL数据转化冗余和注入SQL数据库中的三元组数据,从而降低SQL数据库的存储空间的占用;
[0022](3)查询模式转化:根据二次查询条件集和最大字段集,采用预筛选内连接的算法,将三元组数据由NoSQL查询模式转化为SQL查询模式,形成最终的SQL查询语句;
[0023](4)查询执行与结果输出:执行SQL查询语句,处理查询结果并返回给用户。
[0024]上述方法具体包括如下步骤:
[0025](101)根据用户查询,从开发者构建的标准SQL查询语句中获取查询目标的表名,执行步骤(102);
[0026](102)连接数据表字典,查询表名对应的记录,执行步骤(103);
[0027](103)从记录中获取表信息,执行步骤(104);
[0028](104)根据表信息识别出用户查询的类型:对于SQL类型查询,执行步骤(120);对于NoSQL类型查询,执行步骤(105);
[0029](105)从用户查询的查询语句中提取NoSQL数据的预查询条件,并调用NoSQL数据转化模块,具体包括:
[0030](051)提取预查询条件,执行步骤(052);
[0031](052)根据预查询条件,对NoSQL数据进行一次预查询,执行步骤(053);
[0032](053)将查询结果转化为(id, key, value)形式的三元组数据,执行步骤(054);
[0033](054)连接SQL数据库,执行步骤(055);
[0034](055)向SQL数据库中注入三元组数据,返回步骤(105),并执行步骤(106);
[0035](106)从用户查询的查询语句中提取NoSQL数据的二次查询条件集,执行步骤
(107);
[0036](107)从用户查询的查询语句中提取用户查询包含的最大字段集,执行步骤
(108);
[0037](108)初始化循环参数i = 0,执行步骤(109);
[0038](109)判断i是否小于二次查询条件集的长度:若小于,则执行步骤(110);否则,执行步骤(112);
[0039](110)在最大字段集中对应字段后添加当前查询条件,执行步骤(111);当前查询条件为二次查询条件集中的第i个查询条件,最大字段集中对应字段为与当前查询条件相同的字段;
[0040](111) i++,返回步骤(109);
[0041](112)初始化循环参数j = 0,执行步骤(113);
[0042](113)判断j是否小于最大字段集的长度:若小于,则执行步骤(114);否则,执行步骤(119);
[0043](114)判断最大字段集中第j个字段后是否存在查询条件:若存在,则执行步骤(115);否则,执行步骤(117);
[0044](115)将最大字段集中第j个字段对应的三元组数据按照查询条件进行预筛选,获得预筛选结果,执行步骤(116);
[0045](116)对预筛选结果进行id等值内连接,产生对应的查询语句,执行步骤(118);
[0046](117)对最大字段集中第j个字段对应的三元组数据进行id等值内连接,产生对应的查询语句,执行步骤(118);
[0047](118) j++,返回步骤(113);
[0048](119) id等值内连接产生对应的查询语句,使用该查询语句替换相应的NoSQL变量,形成最终的SQL查询语句,执行步骤(120);
[0049](120)连接SQL数据库,执行步骤(121);
[0050](121)执行查询;
[0051](122)返回最终的查询结果。
[0052]有益效果:本发明提供的多结构数据库集成查询方法,与现有的基于复合查询语句的SQL与NoSQL数据库的统一查询模型相比,能够降低SQL存储空间的占用量以及降低整个查询的执行时间,提高了数据查询的效率;同时,开发者只需构建标准的SQL查询语言,即可实现对关系型数据库和非关系型数据库的无差别查询,无需学习新的查询语言,降低开发成本。
【附图说明】
[0053]图1为基于混合查询模式的SQL与NoSQL数据库的统一查询模型的架构图;
[0054]图2为本发明的多结构数据库集成查询方法的架构图;
[0055]图3为多结构数据库集成查询方法实施流程图。
【具体实施方式】
[0056]下面结合附图对本发明作更进一步的说明。
[0057]针对NoSQL查询模式的转化,基于复合查询语言的SQL与NoSQL数据库的统一查询模型采用了先交叉连接后筛选数据集的算法,对所有的三元组数据表进行交叉连接操作;该算法会返回大量的冗余记录,而大量数据表之间的连接操作会导致整个查询效率的降低。为提高查询转化算法效率,本发明提出一种预筛选内连接的NoSQL查询模式转化方法。预筛选包含:①根据数据表字典,识别出该查询属于SQL类型还是NoSQL类型,分类型处理;②从用户查询的查询语句中提取出NoSQL数据的预查询条件,即NoSQL数据的等值查询条件;③从用户查询的查询语句中提取出NoSQL数据的二次查询条件集;④从用户查询的查询语句中提取出该查询包含的最大字段集。
[0058]首先根据SQL预分析,获得查询的最大字段集,当并不是每一次查询都涉及所有字段,查询字段的减少则意味着表连接操作次数的降低,这提高了整体查询
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1