[发明专利]一种支持对嵌套文档进行统一SQL查询的方法有效
申请号: | 201610783021.4 | 申请日: | 2016-08-30 |
公开(公告)号: | CN106372176B | 公开(公告)日: | 2019-07-23 |
发明(设计)人: | 薛皓;黄晓虎;王杰;王梅 | 申请(专利权)人: | 东华大学 |
主分类号: | G06F16/25 | 分类号: | G06F16/25;G06F16/28;G06F16/2452 |
代理公司: | 上海申汇专利代理有限公司 31001 | 代理人: | 翁若莹;柏子雵 |
地址: | 201620 上*** | 国省代码: | 上海;31 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | 本发明提供了一种支持对嵌套文档进行统一SQL查询的方法,其特征在于上层接口仍沿用用户熟悉的SQL查询语言,而在功能上实现对非结构化的嵌套文档的查询。本发明能针对大数据多源异构的特点,通过分布式数据库中间件对关系型数据以及NoSQL数据库MongDB中的嵌套文档进行统一SQL操作,获取底层数据库中的数据,操作具有正确性;同时,不管底层数据库中的数据以何种形式存在,前端均能以关系型的方式操作数据,并能以关系型的形式将结果展现给用户,提高了中间件的易用性。 | ||
搜索关键词: | 一种 支持 嵌套 文档 进行 统一 sql 查询 方法 | ||
【主权项】:
1.一种支持对嵌套文档进行统一SQL查询的方法,其特征在于,上层接口仍沿用用户熟悉的SQL查询语言,而在功能上实现对非结构化的嵌套文档的查询,包括以下步骤:步骤1、以分布式数据库中间件为技术手段,集中NoSQL数据库及MySQL数据库,包括:步骤1.1、在单机或多机的环境下,搭建MySQL数据库及NoSQL数据库,创建好相应的表,插入所需的数据;步骤1.2、搭建Mycat中间件环境,在配置文件中添加各数据节点,并指定各节点的数据库类型,选择MySQL数据作为关系型数据节点,NoSQL数据作为非关系型数据节点,即文档型数据节点;步骤2、建立文档‑关系表存储映射,生成xml文档,包括:步骤2.1、在文档数据和关系数据之间建立一个存储模型上的逻辑映射,文档型数据库采用嵌套数据对象,用集合collection代替了关系型数据库中的表table,用最小逻辑单元文档document代替关系型数据库中的行row,用键key代替关系型数据库中的列columm,从而建立两者数据库存储结构的对应关系;步骤2.2、根据步骤2.1建立的对应关系,定义映射规则如下:映射规则一、键key映射为关系型数据库中的列columm,值value则相应地映射为列columm的值;映射规则二、当各最小逻辑单元文档document中键key不相同时,关系型数据库的列集为所有列columm的键key组成的最大属性覆盖集,对键key数量小于最大覆盖集数量的那些最小逻辑单元文档document,其在映射关系中不存在的键key,在关系型数据库中对应的列columm值置为空;映射规则三、当某个最小逻辑单元文档document中存在嵌套文档时,嵌套文档的键key以当前最小逻辑单元文档document的键key为前缀,组合之后的键名映射为关系型数据库中的列名;步骤2.3、根据待存储和查询的文档数据,生成表示嵌套文档结构的xml文档;步骤3、当前端接收到SQL查询时,Mycat中间件解析查询语句,如果该查询不包含对嵌套文档的查询,转步骤5;否则若查询为非最深查询,转步骤4;若查询为最深查询,转步骤5;步骤4、在路由之前做SQL拦截工作,该步骤包括:步骤4.1、实现自定义类implements SQLInterceptor,包括:步骤4.1.1、正则匹配出SQL语句中select与from之间的属性域fields;若属性域fields中包含“,”,转步骤4.1.2,否则将属性域fields记为域field,记标志位为0,转步骤4.1.3;步骤4.1.2、以“,”为分隔符,分割属性域fields,保存为字符串数组fields_arr,记标志位为1;步骤4.1.3、若域field中包含“.”,转步骤4.1.4,否则域field记为last_field,转步骤4.1.5;步骤4.1.4、以“.”为分隔符,分割域field,保存为字符串数组str,取出字符串数组str最后一个元素,记为last_field;步骤4.1.5、解析步骤2中创建的xml文档,从根节点开始深度遍历,获取从last_field对应节点开始的深度遍历各分支后的所有子节点,返回所有分支对应的子节点名称数组,对于第i个分支而言,得到该分支所有子节点名称组成的子节点名称数组NodeArri,其中,i为非负整数;步骤4.1.6、得到每个子节点名称数组对应的字符串,其中,对于子节点名称数组NodeArri而言,用“.”连接域field和子节点名称数组NodeArri的所有元素,记为字符串new_fieldi;若标志位为1,返回步骤4.1.3;否则转到步骤4.1.7;步骤4.1.7、若步骤4.1.6得到的字符串的数量大于1,则用“,”连接所有字符串,记为新属性域new_fields,若步骤4.1.6得到的字符串的数量为1,则直接将得到的字符串记为新属性域new_fields,用新属性域new_fields代替原SQL语句中的属性域fields,返回新的SQL语句;步骤4.2、将自定义实现的类放入catlet目录,为class或jar;步骤4.3、修改配置文件server.xml;步骤5、从SQL语句中提取与底层数据库相关的查询对象,翻译成对应语法,推送到对应节点上执行语句,得到中间结果集;若中间结果集不再包含嵌套数据,转步骤7;否则转步骤6;步骤6、此时查询是最深查询,根据给出的查询属性,从中间结果集中获取最终关系型的结果集,包括:步骤6.1、对前端给出的查询属性,以“.”为分隔符,分割属性字段,保存为字符串数组str_arr;步骤6.2、对str_arr中元素str_arr[i],i从0到str_arr.length‑1,str_arr.length为字符串数组str_arr的长度,以str_arr[i]为键key,从中间结果集中获取该键key对应的值value,即为当前结果集,当前结果集作为中间结果集,继续循环执行步骤6.2;步骤7、以关系表的形式将结果集返回至前端。
下载完整专利技术内容需要扣除积分,VIP会员可以免费下载。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于东华大学,未经东华大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/patent/201610783021.4/,转载请声明来源钻瓜专利网。
- 上一篇:一种加热非燃烧卷烟纸及其制备方法
- 下一篇:一种低定量装饰印刷纸及其制备方法