首页> 中国专利> 面向海量分布式关系数据库的游标构造方法

面向海量分布式关系数据库的游标构造方法

摘要

本发明公开了一种面向海量分布式关系数据库的游标构造方法,用于解决现有OceanBase中SQL处理流程对于游标功能构造缺失的技术问题。技术方案是以SQL92标准语法为依据,基于海量分布式数据库的架构,设计了完整的游标构造方法,根据游标常用关键字,构造了统一的语法树、逻辑计划和物理计划,并设计了游标SQL的执行流程。该方法能够完成分布式数据库的游标功能并在大数据量查询时,具有较优的查询性能。通过与商用数据库DB2在100万数据集上的游标执行性能对比,本发明方法构造的游标性能比DB2的查询速度快70倍左右。

著录项

  • 公开/公告号CN104504001A

    专利类型发明专利

  • 公开/公告日2015-04-08

    原文格式PDF

  • 申请/专利权人 西北工业大学;

    申请/专利号CN201410748863.7

  • 申请日2014-12-04

  • 分类号G06F17/30(20060101);

  • 代理机构61204 西北工业大学专利中心;

  • 代理人王鲜凯

  • 地址 710072 陕西省西安市友谊西路127号

  • 入库时间 2023-12-17 04:48:46

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2019-07-05

    专利权的转移 IPC(主分类):G06F17/30 登记生效日:20190617 变更前: 变更后: 申请日:20141204

    专利申请权、专利权的转移

  • 2017-08-08

    授权

    授权

  • 2015-05-06

    实质审查的生效 IPC(主分类):G06F17/30 申请日:20141204

    实质审查的生效

  • 2015-04-08

    公开

    公开

说明书

技术领域

本发明涉及一种游标构造方法,特别是涉及一种面向海量分布式关系数据库的游标构造方法。

背景技术

文献“海量结构化数据存储管理系统OceanBase.阳振坤,杨传辉,李震.科研信息化技术与应用,2013,4(1):41–48”公开了一种融合了NOSQL数据库架构和关系数据库特点的新型数据库架构-OceanBase,不仅支持跨行跨表的事务的强一致性,也支持数据节点的可扩展性。该数据库是一个架构于MySQL数据库之上的开源分布式数据库,支持通用的SQL查询语言,通过对输入的SQL语句进行词法分析、语法分析、逻辑计划生成和物理计划生成,并将数据划分为静态数据和动态数据,每次查询时即时的提供动态数据和静态数据的融合,来完成分布式的关系数据查询。但是,目前Oceanbase中语法树、逻辑计划和物理计划中缺少对游标功能的构造,导致其无法支持游标,而游标是金融应用中常用的功能,提供数据集合的批量处理,特别是在银行大规模数据集业务中使用广泛,这对于传统金融行业,是非常大的制限。

发明内容

为了克服现有OceanBase中SQL处理流程对于游标功能构造缺失的不足,本发明提供一种面向海量分布式关系数据库的游标构造方法。该方法以SQL92标准语法为依据,基于海量分布式数据库的架构,设计了完整的游标构造方法,根据游标常用关键字,构造了统一的语法树、逻辑计划和物理计划,并设计了游标SQL的执行流程。该方法能够完成分布式数据库的游标功能并在大数据量查询时,具有较优的查询性能。通过与商用数据库DB2在100万数据集上的游标执行性能对比,本发明方法构造的游标性能比DB2的查询速度快70倍左右。

本发明解决其技术问题所采用的技术方案是:一种面向海量分布式关系数据库的游标构造方法,其特点是采用以下步骤:

步骤一、构建语法树;

语法树是SQL语句经过词法和语法解析后生成的数据结构,根据SQL不同语法树有所不同。游标涉及的关键字包括:Declare、Open、Fetch、Close和Deallocate,游 标的名称是所有节点共通的部分,用来区分不同的游标。此外,Declare语句中要包含Select查询部分,需要有第二个子节点,Fetch语句中要输入获取数据的方向,从第一条记录开始取数据或者从最后一条记录开始取数据。具体生成流程如下:

1.Input:游标关键字类型

2.生成根节点(Cursor keyword)node;

3.生成子节点children_[0],存放游标定义名称cursor_name;

4.If(游标关键字类型=Declare或Fetch)

{生成子节点children_[1];

if(游标关键字类型=Declare)

{children_[1]=(select)node;

Else

children_[1]=fetch_direction;

}

5.语法树生成完成

作为游标语法树,其数据结构分为根节点和子节点,根节点存放游标关键字类型,子节点为childen_[0]和childen_[1]。childen_[0]是游标的每个关键字必须构造的节点,主要是存储游标名称。childen_[1]只有Declare和Fetch关键字需要构造,Declare用来构造语句中所包含的Select查询的相关信息(select)node。Fetch用来存储取得数据方向的信息fetch_direction。

步骤二、构建逻辑计划;

逻辑计划是根据语法树生成的数据结构,需要根据语法树内容,将SQL语句中所涉及到的表、字段和表达式解析出来并判断有效性,但逻辑计划不可执行。

在一个逻辑计划中,每一个查询有一个唯一标识query_id,每一张表有一个唯一的标识tid,每一个列有一个唯一的标识cid,每一个表达式有一个唯一的标识eid。

逻辑计划生成过程如下:

1.Input:游标语法树 

2.生成逻辑计划根节点Logic_plan,创建存储容器ObVector<ObBasicStmt>stms_;

3.生成子节点stms_[0];

4.生成游标容器cursor_stmt,存放游标查询信息query_id,游标名称curor_name, 查询语句类型stmt_type;

5.If(游标关键字类型=Declare),生成declare_query_id,存入cursor_stmt;

6.If(游标关键字类型=Fetch),生成fetch_direction,存入cursor_stmt;

7.stms_[0]=cursor_stmt;

8.If(游标关键字类型=Declare)

{生成子节点children_[1];

children_[1]=(select)node;

}

9.逻辑计划生成完成。

游标逻辑计划的构造也包含根节点和子节点生成,根节点中包含逻辑计划容器ObVector<ObBasicStmt>stms_,子节点包括stms_[0]和stms_[1],stms_[0]存放查询标识query_id、游标名称cursor_name、逻辑计划类型stmt_type,当游标关键字为Declare和Fetch时,还要生成declare_query_id和fetch_direction。stms_[1]仅在关键字为Declare时生成,保村其中查询语句的相关信息select_stmt。

步骤三、构建查询物理计划;

物理计划是一系列数据操作的有序集合,由逻辑计划解析而成,是可执行的最终数据结构。物理计划按照物理操作符的顺序执行,由于Oceanbase并未支持游标,因此所有的物理操作符需要重新设计。游标的物理操作符分别定义为:ObDeclare、ObOpen、ObFetch、ObClose和ObDeallocate。物理计划的生成流程如下:

1.Input:游标逻辑计划

2.生成根节点ObPhysicalPlan,保存主查询信息Main_query;

3.生成子节点cursor_phyOp,保存游标物理操作符;

4.If(游标关键字类型=Declare)

{生成子节点child_op;

child_op=Select物理操作符;}

5.物理计划生成完成。

游标的物理计划中,cursor_phyOp代表游标的物理操作符,根据关键字的不同有所变化,可选节点信息是针对declare节点中所包含的Select查询语句的物理操作符信息,由于Select物理操作符的设计在Oceanbase中已经完成,因此不加以展开。

步骤四、游标执行流程设计;

游标的执行流程类似于其他SQL的执行流程,构造完游标各个阶段的数据结构之后,完成游标功能的执行。游标执行流程如下:

1.Input:游标SQL

2.词法语法解析,生成游标语法树;

3.逻辑计划生成,输出游标逻辑计划;

4.物理计划生成,输出游标物理计划;

5.物理计划执行,输出查询结果,返回客户端。

游标中Declare、Open、Fetch、Close和Deallocate语句都是新加的SQL语句。除Declare语句不执行物理计划,Open、Fetch、Close和Deallocate语句都需要执行物理计划来生成对于数据结构。

Declare语句是存储Select语句的物理计划和游标的名字。

Open语句通过游标名找到与之对应的Select语句物理计划并执行,缓存Select语句的结果集。对于结果集的缓存方式,考虑了内排和外排两种情况:当内存可以放下全部数据时,排序只有一路;当内存不能放下全部数据时,排序会是多路,中间结果刷到外存上。

Fetch语句通过游标名找到与之相关的结果集,单向单行地取结果集中的一行数据。

Close语句通过游标名找到与之相关的结果集,关闭游标并释放结果集。

Deallocate语句通过游标名找到与之相关的物理计划,删除物理计划,释放游标。

本发明的有益效果是:该方法以SQL92标准语法为依据,基于海量分布式数据库的架构,设计了完整的游标构造方法,根据游标常用关键字,构造了统一的语法树、逻辑计划和物理计划,并设计了游标SQL的执行流程。该方法能够完成分布式数据库的游标功能并在大数据量查询时,具有较优的查询性能。通过与商用数据库DB2在100万数据集上的游标执行性能对比,本发明方法构造的游标性能比DB2的查询速度快70倍左右。

下面是游标的性能测试实验。

实验环境:Oceanbase单服务器部署。服务器由1T硬盘,16G内存,16核CPU,一块网卡组成。服务器操作系统是Red Hat6.2,内核是2.6.32-220.el6.x86_64。

实验目的:测试Oceanbase和DB2的游标功能在100万级数据量的表中取数据的 性能差异。表中有100万数据,结果集为各种数据量(1万到80万),Fetch完所有数据,测open和fetch语句取全部结果集的执行时间。

测试SQL语句模板如下所示。

1、declare cursor csr1 for select*from test_100w where id<n 

2、open csr1

3、fetch csr1

4、close csr1

表1 OB与DB2游标性能测试

表1结果表明:随着数据量的增加,Oceanbase的游标获取数据的时间远远小于DB2,查询速度更快,性能优于DB2。这也体现了分布式数据库在大数据量查询时的优势。

下面结合附图和具体实施方式对本发明作详细说明。

附图说明

图1是本发明方法构造的Declare关键字的语法树;

图2是本发明方法构造的Declare关键字的逻辑计划;

图3是本发明方法构造的Declare关键字的物理计划;

图4是本发明方法中游标的执行流程。

具体实施方式

参照图1-4。本发明面向海量分布式关系数据库的游标构造方法具体步骤如下:

对于如下的游标的Declare语句SQL:

Declare Cursor cs1 for select c1,c2 from test;

可按照如下的步骤实现游标。

1)构建语法树:构造Declare关键字的语法树。构造流程如下:

1.Input:Declare关键字

2.生成根节点(Declare)node;

3.生成子节点children_[0],存放游标定义名称cs1;

4.因为(游标关键字类型=Declare)

{生成子节点children_[1];

children_[1]=(select)node;}

5.语法树生成完成

2)构建逻辑计划:构造游标Declare的逻辑计划。构造流程如下:

1.Input:Declare语法树

2.生成逻辑计划根节点Logic_plan,创建存储容器ObVector<ObBasicStmt>stms_;

3.生成子节点stms_[0];

4.生成游标容器cursor_stmt,存放游标查询信息query_id,游标名称cs1,查询语句类为select;

5.因为(游标关键字类型=Declare),生成declare_query_id,存入cursor_stmt;

6.stms_[0]=cursor_stmt;

7.生成子节点children_[1];children_[1]=(select)node;

8.逻辑计划生成完成。

3)构建物理计划:构造游标Declare的物理计划。构造流程如下:

1.Input:Declare逻辑计划

2.生成根节点ObPhysicalPlan,保存主查询信息Main_query;

3.生成子节点cursor_phyOp,保存游标物理操作符;

4.因为(游标关键字类型=Declare)

5.{生成子节点child_op;

6.child_op=Select物理操作符;}

7.物理计划生成完成。

4)游标的执行流程:Declare的SQL语句首先通过词法和语法解析后,生成语法树,相应的处理程序从语法树解析出表名、列名、并赋予查询ID后将其转换为逻辑计划,逻辑计划进一步转换为可执行的物理计划,并在ChunkServer上执行,获得静态数据,和UpdateServer上的动态数据融合,将结果返回给客户端,执行流程如下:

1.Input:Declare Cursor cs1 for select c1,c2 from test;

2.词法语法解析,生成游标语法树;

3.逻辑计划生成,输出游标逻辑计划;

4.物理计划生成,输出游标物理计划;

5.物理计划执行,输出查询结果,返回客户端。

5)作用效果:由于采用了技术方案中的游标构造方法,解决了Oceanbase中无法存储游标数据、构造游标执行流程的问题,实现了游标功能。通过与商用数据库DB2在100万数据集上的游标执行性能对比,本发明的游标性能比DB2的查询速度快70倍左右。下面是游标的性能测试实验。

● 实验环境:Oceanbase单服务器部署。服务器由1T硬盘,16G内存,16核CPU,一块网卡组成。服务器操作系统是Red Hat6.2,内核是2.6.32-220.el6.x86_64。

● 实验验证:

实验目的:测试Oceanbase和DB2的游标功能在100万级数据量的表中取数据的性能差异。表中有100万数据,结果集为各种数据量(1万到80万),Fetch完所有数据,测open和fetch语句取全部结果集的执行时间。

测试SQL语句模板如下所示。

1.declare cursor csr1 for select*from test_100w where id<n;

2.open csr1

3.fetch csr1

4.close csr1

表2 OB与DB2游标性能测试

表2结果表明:随着数据量的增加,Oceanbase的游标获取数据的时间远远小于DB2,查询速度更快,性能优于DB2。这也体现了分布式数据库在大数据量查询时的优势。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号