Olap聚合运算时的内存优化方法和装置的制造方法

文档序号:10594171阅读:380来源:国知局
Olap聚合运算时的内存优化方法和装置的制造方法
【专利摘要】本发明公开了一种OLAP聚合运算时的内存优化方法和装置,该方法包括:根据预设编码方式对原始数据中的键创建对应的索引编码;在非关系型数据库的键值表中存储原始数据中的键以及对应的索引编码,索引编码被保存为键值表的键,原始数据中的键被保存为键值表的值;当进行OLAP聚合运算时,从键值表中将索引编码读取到内存中来完成OLAP聚合运算。在运算过程中通过索引编码代替了原始数据中的键,能够降低OLAP聚合运算过程中的内存占用。
【专利说明】
OLAP聚合运算时的内存优化方法和装置
技术领域
[0001 ]本发明属于计算机技术领域,具体地说,涉及一种OLAP聚合运算时的内存优化方法和装置。
【背景技术】
[0002]联机分析处理(On-Line Analytical Processing,0LAP)是数据仓库系统的主要应用,支持复杂的分析操作,侧重决策支持,并且提供直观易懂的查询结果。对于OLAP系统来说,绝大多数时候数据库上运行着的是报表作业,执行基本上是聚合类的SQL操作,比如分组(group by) ο
[0003]OLAP的聚合运算,例如求和(Sum)、最大值(Max)、最小值(Min)、取平均(Ave)等,通常需要计算各个键(Key)所对应的度量值。在一个报表中,每一个键通常由多个维度的属性组成,例如姓名(name)、地址(adress)等等。在计算时,利用各个维度之间的不同组合分别做为键来计算对应的度量值,那么,把键放入到内存中进行运算时,由各个维度组合而成的键都是字符串(String)类型,对内存空间的占用较大,并且维度越高,所占用的内存空间就越大。

【发明内容】

[0004]有鉴于此,本发明实施例提供了一种OLAP聚合运算时的内存优化方法和装置,用以解决现有技术中OLAP聚合运算过程中内存占用过大的技术问题。
[0005]为了解决上述技术问题,本发明公开了一种OLAP聚合运算时的内存优化方法,包括:根据预设编码方式对原始数据中的键创建对应的索引编码;在非关系型数据库的键值表中存储所述原始数据中的键以及对应的索引编码,所述索引编码被保存为所述键值表的键,所述原始数据中的键被保存为所述键值表的值;当进行OLAP聚合运算时,从所述键值表中将所述索弓I编码读取到内存中来完成OLAP聚合运算。
[0006]为了解决上述技术问题,本发明公开了一种OLAP聚合运算时的内存优化装置,包括:编码模块,用于根据预设编码方式对原始数据中的键创建对应的索引编码;映射模块,用于在非关系型数据库的键值表中存储所述原始数据中的键以及对应的索引编码,所述索引编码被保存为所述键值表的键,所述原始数据中的键被保存为所述键值表的值;运算模块,用于当进行OLAP聚合运算时,从所述键值表中将所述索引编码读取到内存中来完成OLAP聚合运算。
[0007]与现有技术相比,本发明实施例提供的OLAP聚合运算时的内存优化方法和装置,针对原始数据中的键建立索引编码,在运算过程中通过索引编码代替了原始数据中的键,能够降低OLAP聚合运算过程中的内存占用。
【附图说明】
[0008]为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0009]图1是本发明实施例的系统架构示意图;
[0010]图2是本发明实施例在内存中创建的字典树的示意图;
[0011]图3是本发明实施例在内存中创建的字典树的示意图;
[0012]图4是本发明实施例在内存中创建的字典树的示意图;
[0013]图5是本发明实施例提供的一种OLAP聚合运算时的内存优化方法的流程图;
[0014]图6是本发明实施例提供的一种OLAP聚合运算时的内存优化方法的流程图;
[0015]图7是本发明实施例提供的一种OLAP聚合运算时的内存优化装置的框图。
【具体实施方式】
[0016]为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0017]本发明实施例对OLAP聚合运算所使用的原始数据中的键(Key)建立索引编码,并记录在非关系型数据库(nosql)的键值表中,将索引编码做为键值表中的键,将原始数据中的键做为键值表中的值,进行OLAP聚合运算时,将键值表的中的索引编码读取到内存中完成聚合运算,通过索引编码代替了原始数据中的键,从而降低了运算过程中的内存占用。此夕卜,还可以在内存中依据读取到的索引编码建立对应的字典树,进一步减少了需要维护的内存数据量。
[0018]图1是本发明实施例的系统架构示意图,包括分布式存储系统10和终端设备11。分布式存储系统10可采用HBase(Hadoop Database,基于Hadoop系统架构的数据库),所有数据文件都存储在HDFS(Hadoop分布式文件系统,Hadoop Distributed File System)文件系统上,包括大量的Key-Value数据。终端设备10可以是计算机设备或者其他提供OLAP的服务设备。
[0019]在分布式存储系统10中保存的Key-Value数据中,键(Key)是各种维(Dimens1n)的组合,例如,“时间,地点,产品”等数据的维共同组成一个键;值(Value)是在对应的键(维组合)下的取值,例如,“价格、销量”等。这些Key-Value数据可能分别存储在分布式存储系统的不同集群中,也是终端设备11进行OLAP聚合运算所要使用的原始数据。
[0020]本发明实施例中,在分布式存储系统10的元数据服务器中,可以利用非关系型数据库(nosql)创建一个索引表,该索引表是一个键值(Key-Value)表。在这个键值表中,将分布式存储系统10中保存的原始数据的键做为键值表的值,根据预设编码方式为原始数据的键创建对应的索引编码,并将该索引编码做为键值表中对应的键。例如,将原始数据中由“时间,地点,产品”等维所组成的键“2016年I月,上海,智能电视”存储为键值表的值,根据预设编码方式创建索引编码“121”,将“121”做为键值表中与值“2016年I月,上海,智能电视”对应的键。那么,通过这个键值表的键(索引编码)就能够定位到原始数据的键以及对应的度量(如“价格、销量”等)。
[0021]预设编码方式包括以下几种方式。
[0022](I)采用十进制数字编码
[0023]编码中的每一位都可以采用0-9的数字,如果编码位数为三位,则可代表10+102+13种不同的维组合。数字0-9数据类型可使用整型,相对于字符型占用的内存空间更少。
[0024](2)采用boolean类型的二进制数字编码
[0025]在这种编码中,使用的数字都是boolean类型的O和I,每一位仅占用一个字节,对内存的优化效果最好。但是由于每一位只能代表两种情形,当数据的维很高,各种维组合的数量很大时,编码的位数会变得相当长。当原始数据量较小(例如100GB以内时),可以优选使用这种编码方式,使内存优化效果更佳。
[0026](3)采用二十六进制字符编码
[0027]编码中的每一位都可以采用A-Z的字符,每一位都可以代表二十六种情形,如果编码位数是3位,则可以代表26+262+263种不同的维组合。当原始数据量很大(例如1TB以上时),可以优选考虑这种编码方式。
[0028]本发明实施例中优选使用第(I)种编码方式,既可以达到不错的内存优化效果,也能够应付较多的原始数据量。
[0029]终端设备11进行进行OLAP聚合运算时,从该键值表中将索引编码读取到内存中,并利用该索引编码来完成OLAP聚合运算。此时,不再需要将原始数据的键读取到内存中,由于原始数据的键通常是字符串型,因此通过索引编码代替了原始数据中的键,能够降低OLAP聚合运算过程中的内存占用。
[0030]为了进一步优化内存空间,终端设备11在将键值表中的索引编码读取到内存中时,根据索引编码的预设编码方式在内存中构建字典树。
[0031]如果索引编码采用第(I)种编码方式,则创建的字典树如图2所示,每个节点的下一级节点都可以包括0-9这十个子节点。如果索引编码采用第(2)种编码方式,则创建的字典树如图3所示,每个节点的下一级节点都可以包括O和I这两个子节点。如果索引编码采用第(3)种编码方式,则创建的字典树如图4所示,每个节点的下一级节点都可以包括A-Z这二十六个子节点。
[0032]当进行OLAP聚合运算时,读取键值表中的索引编码再查询内存中的字典树来完成OLAP聚合运算。
[0033]构建字典树之后,对于索引编码中同一个编码位的相同编码,可以只通过一个节点就可以维护,例如索引编码“121”和“122”,前两位“I”和“2”相同,通过一个一级节点T和一个二级节点“2”,就可以同时维护这两个索引编码的前两位,从而进一步压缩了内存数据量,减小了内存开销,使内存空间得到进一步优化。
[0034]在利用非关系型数据库(nosql)创建索引表时,还可以同时再创建一个反向索引表。在该反向索引表中,将原始数据的键做为反向索引表中的键,将索引编码做为反向索引表中的值。这样,在利用索引编码查询聚合运算的结果时,就可以通过反向索引表定位到原始数据的键。
[0035]基于以上论述,本发明实施例提供了一种OLAP聚合运算时的内存优化方法,如图5所示,包括:
[0036]S20,根据预设编码方式对原始数据中的键创建对应的索引编码;
[0037]S21,在非关系型数据库的键值表中存储原始数据中的键以及对应的索引编码,索引编码被保存为键值表的键,原始数据中的键被保存为键值表的值;
[0038]S22,当进行OLAP聚合运算时,从键值表中将索引编码读取到内存中来完成OLAP聚合运算。
[0039]原始数据的键通常是字符串型,通过索引编码代替了原始数据中的键,能够降低OLAP聚合运算过程中的内存占用。
[0040]在一个实施例中,如图6所示,步骤S22进一步包括以下步骤。
[0041 ] S221,在内存中创建与预设编码方式对应的字典树;
[0042]S222,当进行OLAP聚合运算时,读取索引编码并查询字典树来完成OLAP聚合运算。
[0043]通过在内存中建立字典树来进一步压缩内存数据量,使内存空间能够得到进一步优化。
[0044]在本发明的上述实施例中,步骤S20可以进一步包括:
[0045]利用十进制数字编码对原始数据中的键创建对应的索引编码。既能达到不错的内存优化效果,又能够应对原始数据较多的情形。
[0046]该步骤20还可以进一步包括:
[0047]利用boolean类型的二进制数字编码对原始数据中的键创建对应的索引编码。boolean类型的二进制数字编码每一位占用一个字节,能达到更加的内存优化效果。
[0048]此外,该步骤20还可以进一步包括:
[0049]利用二十六进制字符编码对原始数据中的键创建对应的索引编码。编码中的每一位都可以有二十六种变化,索引效果更好,适用于原始数据量较大或者数据维的组合较多的情形。
[0050]在一个实施例中,该步骤21进一步包括以下步骤。
[0051 ] S211,在非关系型数据库的键值表和反向索引表中分别存储原始数据中的键以及对应的索引编码;在键值表中,索引编码被保存为键值表的键,原始数据中的键被保存为键值表的值;在反向索引表中,索引编码被保存为值,原始数据中的键被保存为键。
[0052]在查询该聚合运算的结果时,可通过该反向索引表进行查询,通过索引编码定位到原始数据的键。
[0053]下面是本发明的装置实施例,用于执行本发明的上述方法实施例。
[0054]图7是本发明实施例提供的一种OLAP聚合运算时的内存优化装置,其包括:
[0055]编码模块30,用于根据预设编码方式对原始数据中的键创建对应的索引编码;
[0056]映射模块31,用于在非关系型数据库的键值表中存储原始数据中的键以及对应的索引编码,索引编码被保存为键值表的键,原始数据中的键被保存为所述键值表的值;
[0057]运算模块32,用于当进行OLAP聚合运算时,从键值表中将索引编码读取到内存中来完成OLAP聚合运算。
[0058]在一个实施例中,该运算模块32进一步包括:
[0059]处理子模块,用于在内存中创建与预设编码方式对应的字典树;
[0060]运算子模块,用于当进行OLAP聚合运算时,读取索引编码并查询字典树来完成OLAP聚合运算。
[0061]在本发明的上述实施例中,该编码模块30可以进一步包括:
[0062]第一编码子模块,用于利用十进制数字编码对原始数据中的键创建对应的索引编码。
[0063]该编码模块30还可以进一步包括:
[0064]第二编码子模块,用于利用boolean类型的二进制数字编码对原始数据中的键创建对应的索引编码。
[0065]该编码模块30还可以进一步包括:
[0066]第三编码子模块,用于利用二十六进制字符编码对原始数据中的键创建对应的索引编码。
[0067]在一个实施例中,映射模块31可以进一步包括:
[0068]映射子模块,用于在非关系型数据库的键值表和反向索引表中分别存储原始数据中的键以及对应的索引编码;在键值表中,索引编码被保存为键值表的键,原始数据中的键被保存为键值表的值;在反向索引表中,索引编码被保存为值,原始数据中的键被保存为键。
[0069]上述OLAP聚合运算时的内存优化装置提供的各功能模块可以位于同一设备(例如都位于图1的终端设备11或者分布式存储系统10的元数据服务器),或者,上述各功能模块也可以位于不同设备(例如,编码模块30和映射模块31位于图1中分布式存储系统10的元数据服务器,而运算模块32位于终端设备11)。
[0070]此外,本发明实施例中可以通过硬件处理器(hardware processor)来实现上述各个功能模块。
[0071]以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
[0072]通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如R0M/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。
[0073]最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
【主权项】
1.一种OLAP聚合运算时的内存优化方法,其特征在于,包括: 根据预设编码方式对原始数据中的键创建对应的索引编码; 在非关系型数据库的键值表中存储所述原始数据中的键以及对应的索引编码,所述索引编码被保存为所述键值表的键,所述原始数据中的键被保存为所述键值表的值; 当进行OLAP聚合运算时,从所述键值表中将所述索引编码读取到内存中来完成OLAP聚合运算。2.根据权利要求1所述的方法,其特征在于,所述当进行OLAP聚合运算时,从所述键值表中将所述索弓I编码读取到内存中来完成OLAP聚合运算包括: 在内存中创建与所述预设编码方式对应的字典树; 当进行OLAP聚合运算时,读取所述索引编码并查询所述字典树来完成OLAP聚合运算。3.根据权利要求1所述的方法,其特征在于,所述根据预设编码方式对原始数据中的键创建对应的索引编码包括: 利用十进制数字编码对原始数据中的键创建对应的索引编码。4.根据权利要求1所述的方法,其特征在于,所述根据预设编码方式对原始数据中的键创建对应的索引编码包括: 利用boolean类型的二进制数字编码对原始数据中的键创建对应的索引编码。5.根据权利要求1所述的方法,其特征在于,所述根据预设编码方式对原始数据中的键创建对应的索引编码包括: 利用二十六进制字符编码对原始数据中的键创建对应的索引编码。6.一种OLAP聚合运算时的内存优化装置,其特征在于,包括: 编码模块,用于根据预设编码方式对原始数据中的键创建对应的索引编码; 映射模块,用于在非关系型数据库的键值表中存储所述原始数据中的键以及对应的索引编码,所述索引编码被保存为所述键值表的键,所述原始数据中的键被保存为所述键值表的值; 运算模块,用于当进行OLAP聚合运算时,从所述键值表中将所述索引编码读取到内存中来完成OLAP聚合运算。7.根据权利要求6所述的装置,其特征在于,所述运算模块包括: 处理子模块,用于在内存中创建与所述预设编码方式对应的字典树; 运算子模块,用于当进行OLAP聚合运算时,读取所述索引编码并查询所述字典树来完成OLAP聚合运算。8.根据权利要求6所述的装置,其特征在于,所述编码模块包括: 第一编码子模块,用于利用十进制数字编码对原始数据中的键创建对应的索引编码。9.根据权利要求6所述的装置,其特征在于,所述编码模块包括: 第二编码子模块,用于利用boolean类型的二进制数字编码对原始数据中的键创建对应的索引编码。10.根据权利要求6所述的装置,其特征在于,所述编码模块包括: 第三编码子模块,用于利用二十六进制字符编码对原始数据中的键创建对应的索引编码。
【文档编号】G06F17/30GK105956071SQ201610279001
【公开日】2016年9月21日
【申请日】2016年4月28日
【发明人】杨海乐
【申请人】乐视控股(北京)有限公司, 乐视网信息技术(北京)股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1