一种数据混合存储结构、数据存储查询方法、终端及介质与流程

文档序号:15047395发布日期:2018-07-27 22:59阅读:186来源:国知局

本发明属于数据库技术领域,具体涉及一种数据混合存储结构、数据存储查询方法、终端及介质。



背景技术:

数据库,广泛地应用于各种应用程序,sql(结构化查询语言)是执行查询最常用的语言。传统rdbms(关系型数据库管理系统)以行为单位做数据存储(如图1所示),列式存储数据库以列为单位做数据存储(如图2所示)。行式存储适合于oltp(联机事务处理)系统,而列式存储适合于olap(联机分析处理)系统。它们各自有各自的优缺点,但却无法统一:行式存储适合随机的增删改查,但不适合大规模的扫描;列式存储非常适合大规模的扫描,但不适于随机的增删改查。传统的企业it系统需要两套不同系统:oltp处理业务;olap处理报表商业智能。业务数据需要通过etl搬移到olap系统中进行分析处理。数据搬移和冗余较大。

随着htap系统的兴起,对存储系统提出了更高的要求,即同一个存储系统即支持高速的大规模数据扫描,又可以高效地进行随机读写,因而出现了有所改进的存储方案。例如kudu,kudu提供了一个行列混合存储方案,是一种设计的折中,这种设计更加偏向于列式存储,这种折中的设计导致其在测试结果中证明拥有良好的扫描特性,但随机读写性能则较差。例如pax,pax同样是一种设计的折中,其列式性能和行式性能均无法和纯粹的列式系统以及行式系统相比。

大数据时代新技术不断出现。以apachehadoop为代表,众多的nosql方案也不断涌现。这些新型系统为了提高系统的处理能力都采用了大规模分布式结构。由此带来的问题就是数据的高可用性受到威胁,因为硬件故障率会随着节点数的增加而显著增高,为了保证数据的可靠性,所有这些系统都采用了多副本,即所有的数据都拥有n个副本,保存在不同的机器节点上。但这n个副本都采用完全相同的存储模式,没有充分利用副本,降低了副本的利用率和灵活性。



技术实现要素:

针对现有技术中的缺陷,本发明提供了一种数据混合存储结构、数据存储查询方法、终端及介质,本发明无需做oltp和olap的访问折中,将行式和列式两种存储结构有机地结合在一起,充分发挥各自的优势;充分利用了副本,提高了副本的利用率和灵活性。

第一方面,本发明提供了一种数据混合存储结构,包括n个存储副本,所述n个存储副本包括n1个行式存储副本和n2个列式存储副本;

n=n1+n2;

n1=n×(1-ω);

n2=n×ω;

ω∈[0,1];

其中,n、n1、n2均为正整数,ω为系统偏向参数。

第二方面,本发明提供了一种数据存储查询方法,包括以下步骤:

s1,根据设置的系统偏向参数,创建具有数据混合存储结构的数据表;

s2,获取写请求数据,将写请求数据写入数据表中的行式存储副本和列式存储副本;

s3,获取读请求数据,判断读请求数据的数据类型,所述数据类型包括oltp数据和olap数据;若是oltp数据,则通过行式存储引擎访问数据表中的行式存储副本,若是olap数据,则通过列式存储引擎访问数据表中的列式存储副本。

优选地,所述数据表中包括n个存储副本,所述n个存储副本包括n1个行式存储副本和n2个列式存储副本;

n=n1+n2;

n1=n×(1-ω);

n2=n×ω;

ω∈[0,1];

其中,n、n1、n2均为正整数,ω为系统偏向参数。

优选地,所述s2具体为:

数据库中的sql编译器获取写请求数据;

所述sql编译器根据存储于系统中的元数据,获得数据表中的行式存储副本和列式存储副本的副本位置信息;

根据所述副本位置信息,sql执行器采用并发模式通过存储引擎将写请求数据写入数据表中的行式存储副本和列式存储副本。

优选地,s3中判断读请求数据的数据类型具体为:

设置区别oltp数据和olap数据界限的阈值行a0;

所述sql编译器通过数据表的直方图,分析得到读请求数据影响的行数a1;

若a1小于a0,则所述读请求数据为oltp数据,若a1大于a0,则所述读请求数据为olap数据。

第三方面,本发明提供了一种终端,包括处理器和与所述处理器连接的存储器,其中,所述存储器用于存储计算机程序,所述计算机程序包括程序指令,所述处理器被配置用于调用所述程序指令,执行上述第二方面所述的方法。

第四方面,本发明提供了一种计算机可读存储介质,所述计算机存储介质存储有计算机程序,所述计算机程序包括程序指令,所述程序指令当被处理器执行时使所述处理器执行上述第二方面所述的方法。

本发明的有益效果为:无需做oltp和olap的访问折中,将行式和列式两种存储结构有机地结合在一起,充分发挥各自的优势;充分利用了副本,提高了副本的利用率和灵活性。

附图说明

为了更清楚地说明本发明具体实施方式或现有技术中的技术方案,下面将对具体实施方式或现有技术描述中所需要使用的附图作简单地介绍。在所有附图中,类似的元件或部分一般由类似的附图标记标识。附图中,各元件或部分并不一定按照实际的比例绘制。

图1为本实施例中以行为单位做数据存储的存储结构图;

图2为本实施例中以列为单位做数据存储的存储结构图;

图3为本实施例中数据存储查询方法的流程图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

应当理解,当在本说明书和所附权利要求书中使用时,术语“包括”和“包含”指示所描述特征、整体、步骤、操作、元素和/或组件的存在,但并不排除一个或多个其它特征、整体、步骤、操作、元素、组件和/或其集合的存在或添加。

还应当理解,在此本发明说明书中所使用的术语仅仅是出于描述特定实施例的目的而并不意在限制本发明。如在本发明说明书和所附权利要求书中所使用的那样,除非上下文清楚地指明其它情况,否则单数形式的“一”、“一个”及“该”意在包括复数形式。

还应当进一步理解,在本发明说明书和所附权利要求书中使用的术语“和/或”是指相关联列出的项中的一个或多个的任何组合以及所有可能组合,并且包括这些组合。

实施例一:

实施例一提供了一种数据混合存储结构,包括n个存储副本,所述n个存储副本包括n1个行式存储副本和n2个列式存储副本;

n=n1+n2;

n1=n×(1-ω);

n2=n×ω;

ω∈[0,1];

其中,n、n1、n2均为正整数,ω为系统偏向参数。ω的值由用户根据自己企业的业务需求情况而定,如果业务多数偏向于olap,则ω调高,这样副本中列式存储副本就更多,极端情况下可以设置为1,则所有的副本都是列式存储副本,适合于纯olap系统。如果业务多数偏向于oltp,则ω调低,这样副本中行式存储副本就更多,若设置为0,则所有的副本都是行式存储副本,适合存oltp系统。本实施例的数据混合存储结构,将行式和列式两种存储结构有机地结合在一起,充分发挥各自的优势。

实施例二:

实施例二提供了一种数据存储查询方法,如图3所示,包括以下步骤:

s1,根据设置的系统偏向参数,创建具有数据混合存储结构的数据表;

所述具有数据混合存储结构的数据表中包括n个存储副本,所述n个存储副本包括n1个行式存储副本和n2个列式存储副本;

n=n1+n2;

n1=n×(1-ω);

n2=n×ω;

ω∈[0,1];

其中,n、n1、n2均为正整数,ω为系统偏向参数。

ω的值由用户根据自己企业的业务需求情况而定,对于oltp业务为主的系统,ω<0.5;对于olap业务为主的系统,ω>0.5。

s2,获取写请求数据,将写请求数据写入数据表中的行式存储副本和列式存储副本;

本步骤具体为:

数据库中的sql编译器获取写请求数据;

所述sql编译器根据存储于系统中的元数据(所述元数据存储于系统元数据表中),获得数据表中的行式存储副本和列式存储副本的副本位置信息;

根据所述副本位置信息,sql执行器采用并发模式通过存储引擎将写请求数据写入数据表中的行式存储副本和列式存储副本。如有副本1和副本2两个副本,调用副本1存储引擎的写函数将写请求数据存入副本1,调用副本2存储引擎的写函数将写请求数据存入副本2。

每个存储引擎在成功后向sql执行器返回ack。sql执行器在收到所有副本的ack请求后确定写入成功,否则报错,执行undo操作。

s3,获取读请求数据,判断读请求数据的数据类型,所述数据类型包括oltp数据和olap数据;若是oltp数据,则通过行式存储引擎访问数据表中的行式存储副本,若是olap数据,则通过列式存储引擎访问数据表中的列式存储副本。

其中,s3中判断读请求数据的数据类型具体为:

设置区别oltp数据和olap数据界限的阈值行a0;

所述sql编译器(sql优化器)通过数据表的直方图,分析得到读请求数据影响的行数a1;

直方图描述了数据在一张表里面的分布情况,总共有多少行,不同数值范围的行数分布等信息。因此sql优化器分析给定sql语句时,根据其过滤条件,可以结合直方图中的分布数据,而估算出大致需要访问多少行数据。比如给定sql条件为访问表t1,where条件为c1>10。优化器通过直方图可以知道t1表一共有100万行数据,而符合条件c1>10的行数为50万行,因此可以计算出给定sql查询所需访问的行数。

本实施例中,若a1小于a0,则所述读请求数据为oltp数据,若a1大于a0,则所述读请求数据为olap数据。如设置阈值行a0为10000行,当分析得出读请求数据影响的行数为9800行,则读请求数据为oltp数据,则通过行式存储引擎访问数据表中的行式存储副本;当分析得出读请求数据影响的行数为11000行,则通过列式存储引擎访问数据表中的列式存储副本。

举例:在客户系统中有不同的业务,针对表a,需要执行大量的短查询,属于oltp业务;对于表b和c,需要执行大量的扫描操作,属于olap业务。

若总副本数为3,在创建表a时,指定w为0.3,则底层建立两个行式副本和一个列式副本。在运行关于业务a的查询时,可以充分利用两个行式副本执行快速的随机访问。

若总副本数为3,在创建表b和c,指定w为0.7,则分别建立两个列式副本和一个行式副本。在运行关于表b和c的查询时,则可以利用两个列式副本进行高效的大规模扫描操作。

综上所述,在一个数据库中,通过同时具有行式存储和列式存储的数据混合存储结构,能够获得好的oltp性能和olap性能;且充分利用了副本,提高了副本的利用率和灵活性。

实施例三:本发明提供了一种终端,包括处理器和与所述处理器连接的存储器,其中,所述存储器用于存储计算机程序,所述计算机程序包括程序指令,所述处理器被配置用于调用所述程序指令,执行实施例二所述的方法。

应当理解,在本实施例中,所称处理器可以是中央处理单元(centralprocessingunit,cpu),该处理器还可以是其他通用处理器、数字信号处理器(digitalsignalprocessor,dsp)、专用集成电路(applicationspecificintegratedcircuit,asic)、现成可编程门阵列(field-programmablegatearray,fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。

该存储器可以包括只读存储器和随机存取存储器,并向处理器提供指令和数据。存储器的一部分还可以包括非易失性随机存取存储器。例如,存储器还可以存储设备类型的信息。

实施例四:本发明提供了一种计算机可读存储介质,所述计算机存储介质存储有计算机程序,所述计算机程序包括程序指令,所述程序指令当被处理器执行时使所述处理器执行实施例二所述的方法。

所述计算机可读存储介质可以是前述实施例所述终端的存储器,例如终端的硬盘或内存。所述计算机可读存储介质也可以是所述终端的外部存储设备,例如所述终端上配备的插接式硬盘,智能存储卡(smartmediacard,smc),安全数字(securedigital,sd)卡,闪存卡(flashcard)等。进一步地,所述计算机可读存储介质还可以既包括所述终端的存储器也包括外部存储设备。所述计算机可读存储介质用于存储所述计算机程序以及所述终端所需的其他程序和数据。所述计算机可读存储介质还可以用于暂时地存储已经输出或者将要输出的数据。

所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,上述描述的终端和介质的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。

本发明的技术方案本质上或者说对现有技术做出贡献的部分,或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、磁碟或者光盘等各种可以存储程序代码的介质。

最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围,其均应涵盖在本发明的权利要求和说明书的范围当中。

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