一种基于行存储数据库的数据处理方法及装置制造方法

文档序号:6491088阅读:191来源:国知局
一种基于行存储数据库的数据处理方法及装置制造方法
【专利摘要】本发明公开了一种基于行存储数据库的数据处理方法及装置,涉及数据处理领域,解决了现有技术中列存储数据库访问特定几列时查询效率较低,难以与行存储数据库的优点相兼容等问题。该方法包括:数据库系统接收到用户提交的在行存储数据库中创建目标数据表的建表SQL语句后,创建与目标数据表对应的数个列表,将该表SQL语句中包括的分组标识符所指示的多个列创建在同一列表中,并创建对应数个列表的统一视图;当数据库系统接收到用户提交的对行存储数据库中的目标数据表中的数据进行处理的请求时,数据库系统根据所请求处理的目标数据表所对应的统一视图,对相应列表中的数据进行相应处理。本发明主要用于数据处理。
【专利说明】一种基于行存储数据库的数据处理方法及装置
【技术领域】
[0001]本发明涉及数据处理领域,特别涉及一种基于行存储数据库的数据处理方法及装置。
【背景技术】
[0002]行存储方式是目前主流的关系数据库存储技术实现方式,其基本思路是:将数据按照行为单位进行存储,并通过索引技术提高查询的效率。该方式很适合OLTP (On-LineTransaction Processing,联机事务处理)的场景,在频繁的插入、删除、更新操作,以及小数据量(若干行)的查询方面优势较为突出。但是,随着PB (PetaByte,千万亿字节)级别的超大型数据仓库的出现,行存储方式的不足逐渐显现。
[0003]由于传统的数据仓库产品是以行为单位进行存储的,且数据仓库查询操作多而更新和插入操作较少,而多数查询分析都是基于某些特定列进行操作。因此,通过行存储方式实现的数据仓库不可避免的会带来非必要的IO (Input/Output,输出/输入)操作。同时,行存储方式实现的数据仓库存储单元中的数据的共性较少,不利于数据压缩。
[0004]正是针对上述行存储数据仓库的不足,列存储数据仓库应运而生。其基本实现思路是将数据按照列为单位进行存储,并通过链接表示不同的列值之间的关系。因为它是基于列进行存储的,可以很好的克服上述行存储数据仓库的缺陷。但是,列存储数据仓库同样也有不足:首先,虽然数据仓库的多数OLAP操作是针对某些特定的列而非全部列,但是多数的操作是针对某几列而非某一列,因此往往需要访问某几个列才能得到分析结果,这些操作在以单个列为单位进行存储的列存储数据仓库产品中,必然会增加更多的查询开销。其次,由于列存储数据仓库出现的时间较短,虽然基本的数据仓库功能已经很好的满足,但是很多传统的行存储数据仓库功能比如存储过程等,还无法兼容,这增加了用户迁移数据仓库系统的难度。另外,让用户放弃多年的数据仓库产品投资,而转向全新的列存储数据仓库产品,本身也是一个艰难的抉择。

【发明内容】

[0005]为了解决现有技术中列存储数据库访问特定几列时查询效率较低,难以与行存储数据库的优点相兼容等问题,本发明的提出一种基于行存储数据库的数据处理方法及装置。
[0006]一种基于行存储数据库的数据处理方法,包括:
[0007]数据库系统接收到用户提交的在行存储数据库中创建目标数据表的建表结构化查询语言SQL语句后,创建与所述目标数据表对应的数个列表,其中,所述建表SQL语句中包括分组标识符;
[0008]数据库系统将所述分组标识符指示的多个列创建在同一列表中,并创建对应所述数个列表的统一视图;
[0009]当所述数据库系统接收到用户提交的对所述行存储数据库中的所述目标数据表中的数据进行处理的请求时,所述数据库系统根据所请求处理的目标数据表所对应的统一视图,对相应列表中的数据进行相应处理。
[0010]一种基于行存储数据库的数据处理装置,包括:
[0011]接收模块,用于接收用户提交的在行存储数据库中创建目标数据表的建表结构化查询语言SQL语句以及对所述行存储数据库中的所述目标数据表中的数据进行处理的请求,该建表SQL语句中包括分组标识符;
[0012]模拟器模块,用于当所述接收模块接收到用户提交的在行存储数据库中创建目标数据表的建表结构化查询语言SQL语句后,创建与所述目标数据表对应的数个列表,将所述分组标识符指示的多个列创建在同一列表中,并创建对应所述数个列表的统一视图;
[0013]处理模块,用于当所述接收模块接收到用户提交的对所述行存储数据库中的所述目标数据表中的数据进行处理的请求时,所述数据库系统根据所请求处理的目标数据表所对应的统一视图,对相应列表中的数据进行相应处理。
[0014]本申请提出的方案是一种基于行存储数据库的列存储模拟器,并且在现有的标准SQL语言里增加了分组标识符功能,该功能允许用户自由组合将哪些列存储在一个列表中。通过这种自由组合,将那些分析统计中经常同时访问的列放在同一个列表中,不需再对几个列表进行外连接就可进行分析统计,可以有效提升多数查询分析的效率,更好的发挥列存储模拟器的作用。
【专利附图】

【附图说明】
[0015]附图用来提供对本发明的进一步理解,并且构成说明书的一部分,与本发明的实施例一起用于解释本发明,并不构成对本发明的限制。在附图中:
[0016]为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
[0017]图1为本发明实施例1中提供的具体的创建列表语句格式的事例框图;
[0018]图2为本发明实施例1中提供的数据库系统的工作原理示意图;
[0019]图3-4为本发明实施例1中提供的基于行存储数据库的数据处理方法的流程示意图;
[0020]图5为本发明实施例2中提供的基于行存储数据库的数据处理装置的结构示意图。
【具体实施方式】
[0021]针对现有技术中行存储技术和列存储技术各自的缺陷,本发明实施例提供了一种基于行存储数据库的数据处理的技术方案,在现有行存储数据库的基础上,模拟列存储数据库,并提供可将任意几列存放在同一列表中的功能,以使行存储数据库产品用户无需进行存储数据库产品更换即可获得列存储技术的优点,同时在多次查询相同几列的情况下,效果尤其显著。
[0022]为了实现基于行存储数据库的列存储技术,本发明实施例提供的技术方案通过在现有的行存储数据库系统(以下简称“数据库系统”)中设置列存储模拟器(以下简称“模拟器”)的同时,提供允许用户自由组合某些列存储在同一列表中的功能(需要说明的是:本发明主要用于描述“提供允许用户自由组合某些列存储在同一列表中的功能”的实现过程。因此,对于在现有的行存储数据库系统中设置列存储模拟器的具体实施过程,下述实施例若有描述有不详尽的地方,请参考本 申请人:的另一专利申请201110447629.7),并且通过该模拟器对数据库系统接收到的建表/删表SQL语句进行相应的处理,实现行存储数据库中的列表创建和删除,以及对某些列的高效访问。
[0023]下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。并且,以下各实施例均为本发明的可选方案,实施例的排列顺序及实施例的编号与其优选执行的顺序无关。
[0024]实施例1
[0025]与标准建表SQL的语句(如图1左边框图)相比,本实施例提供的模拟器的建表SQL语句(如图1右边框图)增加了若干可以由用户自由选择的分组标识符,如图1中的括号“(”和“)”(需要说明的是,该分组标识符包括但不限于“(”和“)”,也可以为【和】、《和》,甚至也是无需成对的符合,如@、#和*均可,本实施例中仅以“(”和“)”为例进行描述),标识那几列需要集中存放在同一列表中。具体的Create Table语句格式可以如图1所示。
[0026]模拟器接收到用户输入的建表SQL后,解析建表SQL中的括号分组情况,自动创建相应的列表;同时模拟器创建对应的统一视图,这样用户对该表的访问就跟传统的行存储完全一样。用户访问和更新在视图上操作,跟原来的行存储完全一样;而用户的删除表的操作,跟创建表的过程基本类似。整个列存储的转换和访问对用户完全透明,使对访问该表的应用所造成的影响降低到最低。
[0027]如图2所示,为本`发明实施例中提供的数据库系统的工作原理示意图,其中:
[0028]通过利用本发明实施例提供的数据库系统中设置的模拟器,DBA (DatabaseAdministrator,数据库管理员)只需要直接输入标准的建表/删表SQL(Structured QueryLanguage,结构化查询语言)语句即可实现列表的创建和删除。例如:若要以id、Name、Rank和Salary为列名创建列表,其中,Rank和Salary列创建到同一列表中,则建表SQL语句如图1 所不,可为 Create t (id, Name, (Rank, Salary)) ? 其中 Rank 前的“(”和 Salary 后的“)”即为本实施例中的分组标识符,要创建的目标数据表表名为t。
[0029]其中,当数据库系统接收到建表SQL语句时,通过模拟器将其分解为相应的列表创建SQL语句,并根据该列表创建SQL语句创建相应的列表(如列表1、列表2和列表3);同时,模拟器根据接收到的建表SQL创建对应的统一视图。其中,统一视图即为对应建表SQL语句的数据表的虚拟映射表,该统一视图与现有行存储数据库中的数据表的形式一样。通过统一视图,用户可以使用现有行存储数据库的数据操作和访问方式实现对上述列表的操作和访问。
[0030]相应地,当数据库系统接收到删表SQL语句时,可以通过模拟器根据该删表SQL语句删除相应的统一视图;同时,模拟器对接收到的删表SQL进行解析,将其分解为相应的列表删除SQL语句,并根据该列表删除SQL语句删除相应的列表。[0031]在本发明实施例中,当接收到建表SQL语句时,模拟器通常先创建列表后建立统一视图;当接收到删表SQL语句时,模拟器通常先删除统一视图后删除列表。
[0032]当列表创建后,用户可以直接根据统一视图对相应的列表进行操作(包括插入数据、删除数据和更新数据)和访问(包括查询数据)。由于模拟器对用户输入的标准SQL语句的转换对用户(或管理员)来说是完全透明的,用户对表的操作和访问与传统对行存储数据库产品的访问一样,对访问相应的表的应用所造成的影响较低。
[0033]基于上述数据库系统的工作原理,本发明实施例提供了一种基于行存储数据库的数据处理方法,如图3所示,可以包括以下步骤:
[0034]步骤101,数据库系统接收到用户提交的在行存储数据库中创建目标数据表的建表结构化查询语言SQL语句,该建表SQL语句中包括分组标识符。
[0035]具体的,用户可以在模拟器的输入界面上输入建表SQL语句,并根据实际情况选择目标行存储数据库的类型。其中,目标行存储数据库类型可以包括目标行存储数据库产品的型号和版本。
[0036]步骤102,数据库系统创建与目标数据表对应的数个列表,将分组标识符指示的多个列创建在同一列表中,并创建对应数个列表的统一视图。
[0037]其中,上述将分组标识符指示的多个列创建在同一列表中,具体为:
[0038]所数据库系统将分组标识符指示的用于存放在同一列表中的多个列归为一组,并统计分组的组数;数据库系统根据组数生成将多个列创建在同一列表中的数个列建表SQL语句;根据数个列建表SQL语句建立对应的数个列表。
[0039]具体而与,包括:模拟器接到新型建表SQL语句,并解析建表SQL语句中的括号分组情况,确定哪些列要组合存放,模拟器再根据分组情况,生成对应的创建列表的建表SQL语句(即列建表SQL语句)。模拟器按照创建列表的建表SQL建立相应的列表,并且生成统一视图创建语句,并创建统一视图。
[0040]本实施例中根据分组标识符将多个列存放在同一列表是本实施例的关键技术之一,其是根据用户添加的括号得出各列的分组情况,因此,上述数据库系统将分组标识符指不的用于存放在同一列表中的多个列归为一组具体包括:
[0041]数据库系统对建表SQL语句中列名定义字段进行扫描;当扫描到分组标识符的起始指示时,记录起始指示关联到的每个列的列名,直到扫描到分组标识符的终止指示时停止记录;将从起始指示开始到终止指示为止的所有扫描到的列名作为存放在同一列表中的多个列。
[0042]例如可采用如下算法:模拟器解析建表SQL语句中列名定义字段,从而获取列名定义部分;定义新分组标识符newGroup=true ;并对列名定义字段每列进行循环,包括:a)如果newGroup=true,则添加一个新分组,b)
[0043]将当前列加入新分组;c)如果在列名定义之前有则newGroup=false ;d)如果在列名定义之前有“)”,则newGroup=true ;4)如果newGroup=false,则报错“括号分组没有正常结束”;然后对每一个分组,生成列建表SQL语句,并创建列表,其中表名为“列名1_列名_2....列名N”,列名为每个分组里边的列名。
[0044]下面就是本实施例提供的一个将一个简单的建表SQL语句分解成若干列表的建表SQL (即列建表SQL语句)以及统一视图创建SQL的例子。[0045]管理原输入的建表SQL语句为:
[0046]
【权利要求】
1.一种基于行存储数据库的数据处理方法,其特征在于,包括: 数据库系统接收到用户提交的在行存储数据库中创建目标数据表的建表结构化查询语言SQL语句后,创建与所述目标数据表对应的数个列表,其中,所述建表SQL语句中包括分组标识符; 数据库系统将所述分组标识符指示的多个列创建在同一列表中,并创建对应所述数个列表的统一视图; 当所述数据库系统接收到用户提交的对所述行存储数据库中的所述目标数据表中的数据进行处理的请求时,所述数据库系统根据所请求处理的目标数据表所对应的统一视图,对相应列表中的数据进行相应处理。
2.如权利要求1所述的方法,其特征在于,所述将所述分组标识符指示的多个列创建在同一列表中,具体为: 所述数据库系统将所述分组标识符指示的用于存放在同一列表中的多个列归为一组,并统计分组的组数; 数据库系统根据所述组数生成将所述多个列创建在同一列表中的数个列建表SQL语句; 根据所述数个列建表SQL语句建立对应的数个列表。
3.根据权利要求 2所述的方法,其特征在于,所述数据库系统将所述分组标识符指示的用于存放在同一列表中的多个列归为一组具体包括: 所述数据库系统对所述建表SQL语句中列名定义字段进行扫描; 当扫描到分组标识符的起始指示时,记录所述起始指示关联到的每个列的列名,直到扫描到分组标识符的终止指示时停止记录; 将从起始指示开始到终止指示为止的所有扫描到的列名作为存放在同一列表中的多个列。
4.如权利要求1所述的方法,其特征在于,还包括: 所述数据库系统接收到用户提交的删除行存储数据库中目标数据表的删表SQL语句后,删除对应的统一视图,并删除行存储数据库中与所述目标数据表对应的列表。
5.如权利要求4所述的方法,其特征在于,所述数据库系统删除行存储数据库中与所述目标数据表对应的列表,具体为: 所述数据库系统通过解析所述删表SQL语句,得到目标数据表的表名,并根据所述目标数据表的表名获取对应的列名; 所述数据库系统根据所述目标数据表的表名删除对应的统一视图,并根据所述列名删除所述行存储数据库中所述列名对应的列表。
6.如权利要求1-5之一所述的方法,其特征在于,所述对所述行存储数据库中的所述目标数据表中的数据进行处理的请求包括: 数据查询请求、数据插入请求、数据删除请求或数据更新请求。
7.一种基于行存储数据库的数据处理装置,其特征在于,包括: 接收模块,用于接收用户提交的在行存储数据库中创建目标数据表的建表结构化查询语言SQL语句以及对所述行存储数据库中的所述目标数据表中的数据进行处理的请求,该建表SQL语句中包括分组标识符;模拟器模块,用于当所述接收模块接收到用户提交的在行存储数据库中创建目标数据表的建表结构化查询语言SQL语句后,创建与所述目标数据表对应的数个列表,将所述分组标识符指示的多个列创建在同一列表中,并创建对应所述数个列表的统一视图; 处理模块,用于当所述接收模块接收到用户提交的对所述行存储数据库中的所述目标数据表中的数据进行处理的请求时,所述数据库系统根据所请求处理的目标数据表所对应的统一视图,对相应列表中的数据进行相应处理。
8.如权利要求7所述的基于行存储数据库的数据处理装置,其特征在于,所述模拟器模块具体用于,将所述分组标识符指示的用于存放在同一列表中的多个列归为一组,并统计分组的组数,再根据所述组数生成将所述多个列创建在同一列表中的数个列建表SQL语句,根据所述数个列建表SQL语句建立对应的数个列表。
9.如权利要求8所述的基于行存储数据库的数据处理装置,其特征在于, 所述模拟器模块具体用于,对所述建表SQL语句中列名定义字段进行扫描;当扫描到分组标识符的起始指示时,记录所述起始指示关联到的每个列的列名,直到扫描到分组标识符的终止指示时停止记录;将从起始指示开始到终止指示为止的所有扫描到的列名作为存放在同一列表中的多个列。
10.如权利要求7所述的基于行存储数据库的数据处理装置,其特征在于,所述模拟器模块还用于,当所述接收模块接收到用户提交的删除行存储数据库中目标数据表的删表SQL语句后,删除对应的统一视图,并删除行存储数据库中与所述目标数据表对应的列表。
11.如权利要求10所述的基于行存储数据库的数据处理装置,其特征在于,所述模拟器模块具体用于,所 述数据库系统通过解析所述删表SQL语句,得到目标数据表的表名,并根据所述目标数据表的表名获取对应的列名; 所述数据库系统根据所述目标数据表的表名删除对应的统一视图,并根据所述列名删除所述行存储数据库中所述列名对应的列表。
12.如权利要求7-11任一项所述的基于行存储数据库的数据处理装置,其特征在于,所述接收模块接收到的对所述行存储数据库中的所述目标数据表中的数据进行处理的请求包括:数据查询请求、数据插入请求、数据删除请求或数据更新请求。
【文档编号】G06F17/30GK103810219SQ201210459226
【公开日】2014年5月21日 申请日期:2012年11月15日 优先权日:2012年11月15日
【发明者】隋琪, 袁向阳 申请人:中国移动通信集团公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1