CN104598385B - 内存分配方法及装置 - Google Patents
内存分配方法及装置 Download PDFInfo
- Publication number
- CN104598385B CN104598385B CN201310528997.3A CN201310528997A CN104598385B CN 104598385 B CN104598385 B CN 104598385B CN 201310528997 A CN201310528997 A CN 201310528997A CN 104598385 B CN104598385 B CN 104598385B
- Authority
- CN
- China
- Prior art keywords
- data
- column
- value
- maximum
- division operation
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/023—Free address space management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/221—Column-oriented storage; Management thereof
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种内存分配方法及装置,属于计算机技术领域。所述方法包括:获取分组操作所涉及的至少一列数据列各自的最小数据值和最大数据值;根据每列数据列中的最小数据值和最大数据值计算最大可能分组数;根据最大可能分组数为分组操作的输出结果列分配内存存储空间;解决了在数据列的行数特别大时,现有内存分配方法容易浪费系统内存资源以及在重新分配时非常影响系统性能的问题;达到了根据最大可能分组数为分组操作的输出结果列分配内存存储空间,节约了内存存储空间,同时避免重新分配内存存储空间的发生,提高了系统性能的效果。
Description
技术领域
本发明涉及计算机技术领域,特别涉及一种内存分配方法及装置。
背景技术
随着数据库中信息量爆炸式的增长,数据库管理系统在查询数据库时所要处理的数据量已达到G级、T级甚至P级。为了提高查询效率,大量的查询操作包含有Group-by(分组)操作,因此数据库对Group-by操作的处理响应时间对保证数据库的查询性能至关重要。
在列式数据库中,其处理Group-by操作时通常采用HASH分组。在HASH分组过程中,需要根据列式数据的总行数的大小建立HASH表空间以及输出结果列,输出结果列通常包括gn列、en列和hn列。其中,gn列记录了每一行在分组后所属于的组号,en列记录了每个组中最先出现的组成员的行号,hn列则记录了每个组中的组成员的个数。结合参考图1,假设需要分组的数据列为A1,共有9行数据。在分组后输出的gn列中,记录了每行数据在分组后所属于的组号,比如数据a属于0组、数据b属于1组、数据c属于2组、数据d属于3组和数据e属于4组;在分组后输出的en列中,记录了每个组中最先出现的组成员的行号,比如0组中最先出现的组成员a的行号为0、4组中最先出现的组成员e的行号为8;在分组后的输出的hn列中,则记录了0组有2个组成员、1组有1个组成员、2组有2个组成员、3组有2个组成员和4组有1个组成员。
为了存储分组后的输出结果列:gn列、en列和hn列,需要事先分配相应的内存存储空间。其中,gn列的行数等于数据列A1的行数,为分组前的已知量,但en列和hn列的行数是与分组后的组数相等,为分组前的未知量,所以目前的内存分配方法为:首先按照数据列A1的行数的十分之一来初始分配en列和hn列的内存存储空间,若初始分配的内存存储空间不够,再根据分组情况进行内存存储空间的扩展。
在实现本发明的过程中,发明人发现现有技术至少存在以下问题:在数据列A1的行数特别大时,按照十分之一来初始分配就会占用很大的内存存储空间,很容易浪费系统内存资源;另外,如果初始分配的内存存储空间不够,需要进行内存存储空间的扩展,则需要重新分配内存存储空间和进行拷贝操作,非常影响系统性能。
发明内容
为了解决在数据列的行数特别大时,现有内存分配方法容易浪费系统内存资源以及在重新分配时非常影响系统性能的问题,本发明实施例提供了一种内存分配方法及装置。所述技术方案如下:
第一方面,提供了一种内存分配方法,所述方法包括:
获取分组操作所涉及的至少一列数据列各自的最小数据值和最大数据值;
根据每列所述数据列中的最小数据值和最大数据值计算最大可能分组数;
根据所述最大可能分组数为所述分组操作的输出结果列分配内存存储空间。
在第一方面的第一种可能的实施方式中,所述获取分组操作所涉及的至少一列数据列各自的最小数据值和最大数据值之前,包括:
获取所述分组操作所涉及的至少一列数据列的数据总宽度,所述数据总宽度等于各列数据列的数据类型所对应的字节数之和;
判断所述数据总宽度是否大于1;
若判断结果为所述数据总宽度大于1,则执行所述获取分组操作所涉及的至少一列数据列各自的最小数据值和最大数据值的步骤;
若判断结果为所述数据总宽度等于1,则直接将所述数据总宽度所对应的取值范围作为所述最大可能分组数。
结合第一方面或者第一方面的第一种可能的实施方式,在第二种可能的实施方式中,所述根据每列所述数据列中的最小数据值和最大数据值计算最大可能分组数,包括:
若所述分组操作所涉及的数据列为1列,则将所述数据列中的所述最大数据值减去所述最小数据值所得到的数值作为所述最大可能分组数;
若所述分组操作所涉及的数据列不止1列,则将各列数据列中各自的所述最小数据值合并得到合并后的最小数据值;将各列数据列中各自的所述最大数据值合并得到合并后的最大数据值;将所述合并后的最大数据值减去所述合并后的所述最小数据值所得到的数值作为所述最大可能分组数。
结合第一方面或者第一方面的第一种可能的实施方式,在第三种可能的实施方式中,所述获取分组操作所涉及的至少一列数据列各自的最小数据值和最大数据值之前,还包括:
将列宽度超过预定宽度的长数据列存储为两列,一列数据列存储所述长数据列的实际数据;另一列数据列对应存储所述实际数据的存储位置;
在所述分组操作涉及所述长数据列时,以所述另一列数据列作为所述分组操作所操作的数据列;
其中,所述列宽度超过预定宽度的长数据列包括但不限于数据类型为String类型的数据列。
结合第一方面或者第一方面的第一种可能的实施方式,在第四种可能的实施方式中,所述根据所述最大可能分组数为所述分组操作的输出结果列分配内存存储空间之后,还包括:
判断所述最大可能分组数n是否超过预定阈值;
若所述最大可能分组数n未超过所述预定阈值,则在分组过程中划分n个分组,直接将每行数据映射到所述n个分组中的一个分组中;
若所述最大可能分组数n超过所述预定阈值,则按照哈希分组操作进行所述分组操作。
第二方面,提供了一种内存分配装置,所述装置包括:
最值获取模块,用于获取分组操作所涉及的至少一列数据列各自的最小数据值和最大数据值;
分组数计算模块,用于根据每列所述数据列中的最小数据值和最大数据值计算最大可能分组数;
空间分配模块,用于根据所述最大可能分组数为所述分组操作的输出结果列分配内存存储空间。
在第二方面的第一种可能的实施方式中,所述装置,包括:
总宽度获取模块,用于获取所述分组操作所涉及的至少一列数据列的数据总宽度,所述数据总宽度等于各列数据列的数据类型所对应的字节数之和;
总宽度判断模块,用于判断所述数据总宽度是否大于1;
所述最值获取模块,用于若判断结果为所述数据总宽度大于1,则执行所述获取分组操作所涉及的至少一列数据列各自的最小数据值和最大数据值的步骤;
分组数获取模块,用于若判断结果为所述数据总宽度等于1,则直接将所述数据总宽度所对应的取值范围作为所述最大可能分组数。
结合第二方面或者第二方面的第一种可能的实施方式,在第二种可能的实施方式中,所述分组数计算模块,包括:第一计算单元和第二计算单元;
所述第一计算单元,用于若所述分组操作所涉及的数据列为1列,则将所述数据列中的所述最大数据值减去所述最小数据值所得到的数值作为所述最大可能分组数;
所述第二计算单元,用于若所述分组操作所涉及的数据列不止1列,则将各列数据列中各自的所述最小数据值合并得到合并后的最小数据值;将各列数据列中各自的所述最大数据值合并得到合并后的最大数据值;将所述合并后的最大数据值减去所述合并后的所述最小数据值所得到的数值作为所述最大可能分组数。
结合第二方面或者第二方面的第一种可能的实施方式,在第三种可能的实施方式中,所述装置,还包括:
长数据存储模块,用于将列宽度超过预定宽度的长数据列存储为两列,一列数据列存储所述长数据列的实际数据;另一列数据列对应存储所述实际数据的存储位置;
数据列操作模块,用于在所述分组操作涉及所述长数据列时,以所述另一列数据列作为所述分组操作所操作的数据列;
其中,所述列宽度超过预定宽度的长数据列包括但不限于数据类型为String类型的数据列。
结合第二方面或者第二方面的第一种可能的实施方式,在第四种可能的实施方式中,所述装置,还包括:
阈值判断模块,用于判断所述最大可能分组数n是否超过预定阈值;
映射分组模块,用于若所述最大可能分组数n未超过所述预定阈值,则在分组过程中划分n个分组,直接将每行数据映射到所述最大可能分组数n中数个分组中的一个分组中;
哈希分组模块,用于若所述最大可能分组数n超过所述预定阈值,则按照哈希分组操作进行所述分组操作。
本发明实施例提供的技术方案带来的有益效果是:
通过获取分组操作所涉及的至少一列数据列各自的最小数据值和最大数据值;根据每列数据列中的最小数据值和最大数据值计算最大可能分组数;根据最大可能分组数为分组操作的输出结果列分配内存存储空间;解决了在数据列的行数特别大时,现有内存分配方法容易浪费系统内存资源以及在重新分配时非常影响系统性能的问题;达到了根据最大可能分组数为分组操作的输出结果列分配内存存储空间,节约了内存存储空间,同时避免了重新分配内存存储空间的发生,提高了系统性能的效果。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是HASH分组的示意图;
图2是本发明一个实施例提供的内存分配方法的方法流程图;
图3A是本发明另一个实施例提供的内存分配方法的方法流程图;
图3B是本发明另一个实施例提供的数据总宽度和最大可能分组数的示意图;
图3C是本发明另一个实施例提供的String类型的数据存储的示意图;
图3D是本发明另一个实施例提供的求最大可能分组数的示意图;
图3E是本发明另一个实施例提供的映射分组法的示意图;
图3F是本发明另一个实施例提供的哈希分组法的示意图;
图4是本发明一个实施例提供的内存分配装置结构示意图;
图5是本发明另一个实施例提供的内存分配装置结构示意图;
图6是本发明一个实施例提供的服务器的结构示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步地详细描述。
请参考图2,其示出了本发明一个实施例提供的内存分配方法的方法流程图。所述内存分配方法,包括:
步骤202,获取分组操作所涉及的至少一列数据列各自的最小数据值和最大数据值;
步骤204,根据每列数据列中的最小数据值和最大数据值计算最大可能分组数;
步骤206,根据最大可能分组数为分组操作的输出结果列分配内存存储空间。
综上所述,本实施例提供的内存分配方法,通过获取分组操作所涉及的至少一列数据列各自的最小数据值和最大数据值;根据每列数据列中的最小数据值和最大数据值计算最大可能分组数;根据最大可能分组数为分组操作的输出结果列分配内存存储空间;解决了在数据列的行数特别大时,现有内存分配方法容易浪费系统内存资源以及在重新分配时非常影响系统性能的问题;达到了根据最大可能分组数为分组操作的输出结果列分配内存存储空间,节约了内存存储空间,同时避免了重新分配内存存储空间的发生,提高了系统性能的效果。
请参考图3A,其示出了本发明另一个实施例提供的内存分配方法的方法流程图。所述内存分配方法,包括:
步骤301,获取分组操作所涉及的至少一列数据列的数据总宽度;
数据库管理系统获取分组操作所涉及的至少一列数据列的数据总宽度,数据总宽度等于各列数据列的数据类型所对应的字节数之和。也即数据总宽度为正整数。
比如,假设分组操作所涉及的至少一列数据列中有数据列A、数据列B和数据列C,数据列A的数据对应的数据类型为整型,数据列B的数据对应的数据类型为整型,数据列C的数据对应的数据类型为字符型,则根据整型占4个字节,字符型占1个字节,每个字节的取值范围为0~255,得到该分组操作所涉及的至少一列数据列的数据总宽度为4+4+1=9。
具体来讲,数据库管理系统接收携带有结构查询语言SQL查询命令的查询请求消息;结构查询语言SQL查询命令中具体可以包括SQL语句和SQL参数,还可以包含group-by执行操作。
数据库管理系统从查询请求消息中获取分组操作所涉及的至少一列数据列,有如下子步骤:
1、数据库管理系统将结构查询语言SQL查询命令解析成对应的执行树;
2、数据库管理系统根据执行树生成对应的可执行操作,可执行操作中包含有分组操作;
分组操作中包含有的分组操作可以是group-by操作。
3、数据库管理系统获取分组操作所涉及的至少一列数据列;
分组操作所涉及的至少一列数据列可以是group-by数据列。
步骤302,判断数据总宽度是否大于1;
数据库管理系统判断数据总宽度是否大于1。若判断结果为数据总宽度等于1,则进入步骤303;若判断结果为数据总宽度大于1,则进入步骤304。
步骤303,若判断结果为数据总宽度等于1,则直接将数据总宽度所对应的取值范围作为最大可能分组数。
若判断结果为数据总宽度等于1,则数据库管理系统直接将数据总宽度所对应的取值范围作为最大可能分组数。也即,当分组操作所涉及的至少一列数据列的数据总宽度为1时,直接确定该分组操作所涉及的至少一列数据列的数据总宽度对应的最大可能分组数为256。
比如,如图3B,其示出了三个数据总宽度对应的最大可能分组数,数据总宽度1对应的最大可能分组数为256,数据总宽度2对应的最大可能分组数256^2,数据总宽度3对应的最大可能分组数256^3。
需要补充说明的是,当分组操作所涉及的至少一列数据列的数据总宽度为1时,也可以根据该分组操作所涉及的数据列的数据的最大数据值和最小数据值计算最大可能分组数。由于当分组操作所涉及的数据列的数据总宽度为1时,其所对应的最大可能分组数256的数值比较小,因此,也可以不采用根据最大数据值和最小数据值计算最大可能分组数的方式,直接将256作为该分组操作所涉及的数据列的数据的最大可能分组数。
还需要补充说明的是,为了占用字节数较多的数据列也适用于本实施例提供的方法,当分组操作所涉及的至少一列数据列的列宽度超过一定阈值时,事先将列宽度超过预定宽度的长数据列存储为两列,一列数据列存储长数据列的实际数据;另一列数据列对应存储实际数据的存储位置;
在分组操作涉及长数据列时,以另一列数据列作为分组操作所操作的数据列;
其中,列宽度超过预定宽度的长数据列包括但不限于数据类型为String类型的数据列。
比如,如图3C,当长数据列的数据类型为String类型时,用Bass address1列存储长数据列的实际数据,用固定字节数的Bass address列存储长数据列的对应存储实际数据的存储位置,该存储位置可以用偏移值表示,Bass address的固定字节数的宽度比Bassaddress1的实际数据的宽度要小。当进行分组操作时,以Bass address列作为分组操作所操作的数据列,也即,可以将Bass address的固定字节数作为长数据列的数据总宽度。
步骤304,获取分组操作所涉及的至少一列数据列各自的最小数据值和最大数据值;
数据库管理系统获取分组操作所涉及的至少一列数据列各自的最小数据值和最大数据值。
比如,如图3D,假设分组操作涉及数据列A1和A2,获取数据列A1中的最小数据值A,最大数据值R;同时获取数据列A2中的最小数据值F,最大数据值O。
步骤305,根据每列数据列中的最小数据值和最大数据值计算最大可能分组数;
数据库管理系统根据每列数据列中的最小数据值和最大数据值计算最大可能分组数。
本步骤包括如下子步骤:
1,若分组操作所涉及的数据列为1列,则将数据列中的最大数据值减去最小数据值所得到的数值作为最大可能分组数;
若分组操作所涉及的数据列为1列,则数据库管理系统将数据列中的最大数据值减去最小数据值所得到的数值作为最大可能分组数。也即,当分组操作所涉及的数据列为1列时,数据库管理系统只需获取该列对应的最大数据值和最小数据值,并用该列的最大数据值减去最小数据值就是最大可能分组数。
比如,如图3D,假设分组操作只涉及其中一个数据列A1,获取数据列A1中的最小数据值A,最大数据值R,用最大数据值R减去最小数据值A,即得到该数据列的最大可能分组数。
2,若分组操作所涉及的数据列不止1列,则将各列数据列中各自的最小数据值合并得到合并后的最小数据值;将各列数据列中各自的最大数据值合并得到合并后的最大数据值;将合并后的最大数据值减去合并后的最小数据值所得到的数值作为最大可能分组数。
若分组操作所涉及的数据列不止1列,则数据库管理系统将各列数据列中各自的最小数据值合并得到合并后的最小数据值;数据库管理系统将各列数据列中各自的最大数据值合并得到合并后的最大数据值;数据库管理系统将合并后的最大数据值减去合并后的最小数据值所得到的数值作为最大可能分组数。
比如,如图3D,假设分组操作所涉及的至少一列数据列有数据列A1和数据列A2,获取数据列A1对应的最大数据值为R,最小数据值为A;数据列A2对应的最大数据值为O,最小数据值为F;再将数据列A1对应的最大数据值R和数据列A2对应的最大数据值O进行合并,得到合并后的最大数据值RO;将数据列A1对应的最小数据值A和数据列A2对应的最小数据值F进行合并,得到合并后的最小数据值AF;然后将合并后的最大数据值RO减去合并后的最小数据值AF,由于合并后的最大数据值RO为21071,合并后的最小数据值AF为16710,因此根据公式:21071-16710=4361,得到最大可能分组数4361。
步骤306,根据最大可能分组数为分组操作的输出结果列分配内存存储空间;
数据库管理系统根据最大可能分组数为分组操作的输出结果列分配内存存储空间。输出结果列可以是en列和hn列。
步骤307,判断最大可能分组数n是否超过预定阈值;
数据库管理系统判断最大可能分组数n是否超过预定阈值。
步骤308,若最大可能分组数n未超过预定阈值,则在分组过程中划分n个分组,直接将每行数据映射到n个分组中的一个分组中;
若最大可能分组数n未超过预定阈值,则数据库管理系统在分组过程中划分n个分组,直接将每行数据映射到n个分组中的一个分组中。
比如,图3E,根据公式:(组合值-最小数据值)计算出来的数值可以在n个分组找出该行数据所对应的组号,组合值是各列数据列中同一行的数据值合并得到的。从图中可以看到行号为0所对应的数据为AF,其组合值为16710,上述计算过程中得到的合并后的最小数据值为16710,根据(组合值-最小数据值)得到0,则将行号0所对应的数据映射到4361个分组中标号为0的那一行的所对应的分组中,也即第一组;又比如,行号为1和行号为5所对应的数据都为NO,其组合值为20047,上述计算过程中得到的合并后的最小数据值为16710,根据(组合值-最小数据值)得到3337,则将行号1和5所对应的数据都映射到4361个分组中标号为3337的那一行所对应的分组中,也即第二组。
步骤309,若最大可能分组数n超过预定阈值,则按照哈希分组操作进行分组操作。
若最大可能分组数n超过预定阈值,则按照步骤308中提供的直接将数据映射至一个分组中的方法的可行性较差。此时,数据库管理系统按照传统的哈希分组操作进行分组操作。
比如,如图3F所示,数据列A1中的数据10、数据110和数据210,在HASH表中都存储在下标为10的位置上,若当输入数据310时,在HASH表中查找下标为10的位置上所存储的数,由于在HASH表中存储的是数据10、数据110和数据210中行号数值最大的一个数的行号,因此首先找到数据110,将数据310和数据110的大小进行对比,发现数据310和数据110的大小不一样,则通过LINK表查找到行号为4的数据210,将数据310和数据210的大小进行对比,发现数据310和数据210的大小不一样,则通过LINK表查找到行号为0的数据10,将数据310和数据10的大小进行对比,发现数据310和数据10的大小不一样,发现在列表中没有和数据310大小一样的数值,因此,需要新建一个与数据310对应的分组。
综上所述,本实施例提供的内存分配方法,通过获取分组操作所涉及的至少一列数据列各自的最小数据值和最大数据值;根据每列数据列中的最小数据值和最大数据值计算最大可能分组数;根据最大可能分组数为分组操作的输出结果列分配内存存储空间;解决了在数据列的行数特别大时,现有内存分配方法容易浪费系统内存资源以及在重新分配时非常影响系统性能的问题;达到了根据最大可能分组数为分组操作的输出结果列分配内存存储空间,节约了内存存储空间,同时避免了重新分配内存存储空间的发生,提高了系统性能的效果。
另外,当最大可能分组数n未超过预定阈值时,在分组过程中划分n个分组,直接将每行数据映射到n个分组中的一个分组中的方法,避免了传统的哈希分组中常见的哈希冲突问题,在数据量较大,特别是重复数据较多的场景中,可以提高查询效率,减少查询时间。
另外,还通过当分组操作所涉及的至少一列数据列的列宽度超过一定阈值时,事先将列宽度超过预定宽度的长数据列存储为两列,一列数据列存储长数据列的实际数据;另一列数据列对应存储实际数据的存储位置;在分组操作涉及长数据列时,以另一列数据列作为分组操作所操作的数据列,可以使得占用字节数较多的长数据列也适用于本实施例提供的内存分配方法,增强了实施例提供的内存分配方法对不同数据类型的数据列的适用性。
以下为本发明的装置实施例,对于其中未详尽描述的细节,可以参考上述对应的方法实施例。
请参考图4,其示出了本发明一个实施例提供的内存分配装置的结构示意图。该内存分配装置可以通过软件、硬件或者两者的结合实现成为服务器的全部或者一部分,该内存分配装置包括:最值获取模块420、分组数计算模块440和空间分配模块460;
最值获取模块420,用于获取分组操作所涉及的至少一列数据列各自的最小数据值和最大数据值;
分组数计算模块440,用于根据最值获取模块420获取到的每列数据列中的最小数据值和最大数据值计算最大可能分组数;
空间分配模块460,用于根据分组数计算模块440计算得到的最大可能分组数为分组操作的输出结果列分配内存存储空间。
综上所述,本实施例提供的内存分配装置,通过获取分组操作所涉及的至少一列数据列各自的最小数据值和最大数据值;根据每列数据列中的最小数据值和最大数据值计算最大可能分组数;根据最大可能分组数为分组操作的输出结果列分配内存存储空间;解决了在数据列的行数特别大时,现有内存分配方法容易浪费系统内存资源以及在重新分配时非常影响系统性能的问题;达到了根据最大可能分组数为分组操作的输出结果列分配内存存储空间,节约了内存存储空间,同时避免了重新分配内存存储空间的发生,提高了系统性能的效果。
请参考图5,其示出了本发明另一个实施例提供的内存分配装置的结构示意图。该内存分配装置可以通过软件、硬件或者两者的结合实现成为服务器的全部或者一部分,该内存分配装置包括:最值获取模块520、分组数计算模块540和空间分配模块560;
最值获取模块520,用于获取分组操作所涉及的至少一列数据列各自的最小数据值和最大数据值;
分组数计算模块540,用于根据最值获取模块520获取到的每列数据列中的最小数据值和最大数据值计算最大可能分组数;
空间分配模块560,用于根据分组数计算模块540计算得到的最大可能分组数为分组操作的输出结果列分配内存存储空间。
进一步的,该内存分配装置,包括:
总宽度获取模块510,用于获取分组操作所涉及的至少一列数据列的数据总宽度,数据总宽度等于各列数据列的数据类型所对应的字节数之和;
总宽度判断模块511,用于判断总宽度获取模块510获取到的数据总宽度是否大于1;
最值获取模块520,用于若总宽度判断模块511判断出的判断结果为数据总宽度大于1,则执行获取分组操作所涉及的至少一列数据列各自的最小数据值和最大数据值的步骤;
分组数获取模块512,用于若总宽度判断模块511判断出的判断结果为数据总宽度等于1,则直接将数据总宽度所对应的取值范围作为最大可能分组数。
进一步的,分组数计算模块540,包括:第一计算单元541和第二计算单元542;
第一计算单元541,用于若分组操作所涉及的数据列为1列,则将数据列中的最大数据值减去最小数据值所得到的数值作为最大可能分组数;
第二计算单元542,用于若分组操作所涉及的数据列不止1列,则将各列数据列中各自的最小数据值合并得到合并后的最小数据值;将各列数据列中各自的最大数据值合并得到合并后的最大数据值;将合并后的最大数据值减去合并后的最小数据值所得到的数值作为最大可能分组数。
进一步的,该内存分配装置,还包括:
长数据存储模块530,用于将列宽度超过预定宽度的长数据列存储为两列,一列数据列存储长数据列的实际数据;另一列数据列对应存储实际数据的存储位置;
数据列操作模块531,用于在分组操作涉及长数据列时,以另一列数据列作为分组操作所操作的数据列;
其中,列宽度超过预定宽度的长数据列包括但不限于数据类型为String类型的数据列。
进一步的,该内存分配装置,还包括:
阈值判断模块570,用于判断最大可能分组数n是否超过预定阈值;
映射分组模块580,用于若阈值判断模块570判断出的最大可能分组数n未超过预定阈值,则在分组过程中划分n个分组,直接将每行数据映射到n个分组中的一个分组中;
哈希分组模块590,用于若阈值判断模块570判断出的最大可能分组数n超过预定阈值,则按照哈希分组操作进行分组操作。
综上所述,本实施例提供的内存分配装置,通过获取分组操作所涉及的至少一列数据列各自的最小数据值和最大数据值;根据每列数据列中的最小数据值和最大数据值计算最大可能分组数;根据最大可能分组数为分组操作的输出结果列分配内存存储空间;解决了在数据列的行数特别大时,现有内存分配方法容易浪费系统内存资源以及在重新分配时非常影响系统性能的问题;达到了根据最大可能分组数为分组操作的输出结果列分配内存存储空间,节约了内存存储空间,同时避免了重新分配内存存储空间的发生,提高了系统性能的效果。
另外,当最大可能分组数n未超过预定阈值时,在分组过程中划分n个分组,直接将每行数据映射到n个分组中的一个分组中,避免了传统的哈希分组中常见的哈希冲突问题,在数据量较大,特别是重复数据较多的场景中,可以提高查询效率,减少查询时间。
另外,还通过当分组操作所涉及的至少一列数据列的列宽度超过一定阈值时,事先将列宽度超过预定宽度的长数据列存储为两列,一列数据列存储长数据列的实际数据;另一列数据列对应存储实际数据的存储位置;在分组操作涉及长数据列时,以另一列数据列作为分组操作所操作的数据列,可以使得占用字节数较多的长数据列也适用于本实施例提供的内存分配方法,增强了实施例提供的内存分配方法对不同数据类型的数据列的适用性。
请参考图6,其示出了本发明一个实施例提供的服务器的结构示意图。该服务器包括:处理器620和存储器640;
处理器620,用于获取分组操作所涉及的至少一列数据列各自的最小数据值和最大数据值;
处理器620,用于根据每列数据列中的最小数据值和最大数据值计算最大可能分组数;
处理器620,用于根据最大可能分组数为分组操作的输出结果列分配内存存储空间。
综上所述,本实施例提供的服务器,通过获取分组操作所涉及的至少一列数据列各自的最小数据值和最大数据值;根据每列数据列中的最小数据值和最大数据值计算最大可能分组数;根据最大可能分组数为分组操作的输出结果列分配内存存储空间;解决了在数据列的行数特别大时,现有内存分配方法容易浪费系统内存资源以及在重新分配时非常影响系统性能的问题;达到了根据最大可能分组数为分组操作的输出结果列分配内存存储空间,节约了内存存储空间,同时避免了重新分配内存存储空间的发生,提高了系统性能的效果。
作为基于图6所示实施例提供的更为优选的实施例,该服务器包括:处理器620和存储器640;
处理器620,用于获取分组操作所涉及的至少一列数据列各自的最小数据值和最大数据值;
处理器620,用于根据每列数据列中的最小数据值和最大数据值计算最大可能分组数;
处理器620,用于根据最大可能分组数为分组操作的输出结果列分配内存存储空间。
进一步的,
处理器620,用于获取分组操作所涉及的至少一列数据列的数据总宽度,数据总宽度等于各列数据列的数据类型所对应的字节数之和;
处理器620,用于判断数据总宽度是否大于1;
处理器620,用于若判断结果为数据总宽度大于1,则执行获取分组操作所涉及的至少一列数据列各自的最小数据值和最大数据值的步骤;
处理器620,用于若判断结果为数据总宽度等于1,则直接将数据总宽度所对应的取值范围作为最大可能分组数。
进一步的,
处理器620,用于若分组操作所涉及的数据列为1列,则将数据列中的最大数据值减去最小数据值所得到的数值作为最大可能分组数;
处理器620,用于若分组操作所涉及的数据列不止1列,则将各列数据列中各自的最小数据值合并得到合并后的最小数据值;将各列数据列中各自的最大数据值合并得到合并后的最大数据值;将合并后的最大数据值减去合并后的最小数据值所得到的数值作为最大可能分组数。
进一步的,
处理器620,用于将列宽度超过预定宽度的长数据列存储为两列,一列数据列存储长数据列的实际数据;另一列数据列对应存储实际数据的存储位置;
处理器620,用于在分组操作涉及长数据列时,以另一列数据列作为分组操作所操作的数据列;
其中,列宽度超过预定宽度的长数据列包括但不限于数据类型为String类型的数据列。
进一步的,
处理器620,用于判断最大可能分组数n是否超过预定阈值;
处理器620,用于若最大可能分组数n未超过预定阈值,则在分组过程中划分n个分组,直接将每行数据映射到n个分组中的一个分组中;
处理器620,用于若最大可能分组数n超过预定阈值,则按照哈希分组操作进行分组操作。
综上所述,本实施例提供的服务器,通过获取分组操作所涉及的至少一列数据列各自的最小数据值和最大数据值;根据每列数据列中的最小数据值和最大数据值计算最大可能分组数;根据最大可能分组数为分组操作的输出结果列分配内存存储空间;解决了在数据列的行数特别大时,现有内存分配方法容易浪费系统内存资源以及在重新分配时非常影响系统性能的问题;达到了根据最大可能分组数为分组操作的输出结果列分配内存存储空间,节约了内存存储空间,同时避免了重新分配内存存储空间的发生,提高了系统性能的效果。
另外,当最大可能分组数未超过预定阈值时,在分组过程中划分n个分组,直接将每行数据映射到n个分组中的一个分组中,避免了传统的哈希分组中常见的哈希冲突问题,在数据量较大,特别是重复数据较多的场景中,可以提高查询效率,减少查询时间。
另外,还通过当分组操作所涉及的至少一列数据列的列宽度超过一定阈值时,事先将列宽度超过预定宽度的长数据列存储为两列,一列数据列存储长数据列的实际数据;另一列数据列对应存储实际数据的存储位置;在分组操作涉及长数据列时,以另一列数据列作为分组操作所操作的数据列,可以使得占用字节数较多的长数据列也适用于本实施例提供的内存分配方法,增强了实施例提供的内存分配方法对不同数据类型的数据列的适用性。
本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (10)
1.一种内存分配方法,其特征在于,所述方法包括:
获取分组操作所涉及的至少一列数据列各自的最小数据值和最大数据值;
根据每列所述数据列中的最小数据值和最大数据值计算最大可能分组数;
根据所述最大可能分组数为所述分组操作的输出结果列分配内存存储空间。
2.根据权利要求1所述的方法,其特征在于,所述获取分组操作所涉及的至少一列数据列各自的最小数据值和最大数据值之前,包括:
获取所述分组操作所涉及的至少一列数据列的数据总宽度,所述数据总宽度等于各列数据列的数据类型所对应的字节数之和;
判断所述数据总宽度是否大于1个字节;
若判断结果为所述数据总宽度大于1个字节,则执行所述获取分组操作所涉及的至少一列数据列各自的最小数据值和最大数据值的步骤;
若判断结果为所述数据总宽度等于1个字节,则直接将所述数据总宽度所对应的取值范围作为所述最大可能分组数。
3.根据权利要求1或2所述的方法,其特征在于,所述根据每列所述数据列中的最小数据值和最大数据值计算最大可能分组数,包括:
若所述分组操作所涉及的数据列为1列,则将所述数据列中的所述最大数据值减去所述最小数据值所得到的数值作为所述最大可能分组数;
若所述分组操作所涉及的数据列不止1列,则将各列数据列中各自的所述最小数据值合并得到合并后的最小数据值;将各列数据列中各自的所述最大数据值合并得到合并后的最大数据值;将所述合并后的最大数据值减去所述合并后的所述最小数据值所得到的数值作为所述最大可能分组数。
4.根据权利要求1或2所述的方法,其特征在于,所述获取分组操作所涉及的至少一列数据列各自的最小数据值和最大数据值之前,还包括:
将列宽度超过预定宽度的长数据列存储为两列,一列数据列存储所述长数据列的实际数据;另一列数据列对应存储所述实际数据的存储位置;
在所述分组操作涉及所述长数据列时,以所述另一列数据列作为所述分组操作所操作的数据列;
其中,所述列宽度超过预定宽度的长数据列包括但不限于数据类型为String类型的数据列。
5.根据权利要求1或2所述的方法,其特征在于,所述根据所述最大可能分组数为所述分组操作的输出结果列分配内存存储空间之后,还包括:
判断所述最大可能分组数n是否超过预定阈值;
若所述最大可能分组数n未超过所述预定阈值,则在分组过程中划分n个分组,直接将每行数据映射到所述n个分组中的一个分组中;
若所述最大可能分组数n超过所述预定阈值,则按照哈希分组操作进行所述分组操作。
6.一种内存分配装置,其特征在于,所述装置包括:
最值获取模块,用于获取分组操作所涉及的至少一列数据列各自的最小数据值和最大数据值;
分组数计算模块,用于根据每列所述数据列中的最小数据值和最大数据值计算最大可能分组数;
空间分配模块,用于根据所述最大可能分组数为所述分组操作的输出结果列分配内存存储空间。
7.根据权利要求6所述的装置,其特征在于,所述装置,包括:
总宽度获取模块,用于获取所述分组操作所涉及的至少一列数据列的数据总宽度,所述数据总宽度等于各列数据列的数据类型所对应的字节数之和;
总宽度判断模块,用于判断所述数据总宽度是否大于1个字节;
所述最值获取模块,用于若判断结果为所述数据总宽度大于1个字节,则执行所述获取分组操作所涉及的至少一列数据列各自的最小数据值和最大数据值的步骤;
分组数获取模块,用于若判断结果为所述数据总宽度等于1个字节,则直接将所述数据总宽度所对应的取值范围作为所述最大可能分组数。
8.根据权利要求6或7所述的装置,其特征在于,所述分组数计算模块,包括:第一计算单元和第二计算单元;
所述第一计算单元,用于若所述分组操作所涉及的数据列为1列,则将所述数据列中的所述最大数据值减去所述最小数据值所得到的数值作为所述最大可能分组数;
所述第二计算单元,用于若所述分组操作所涉及的数据列不止1列,则将各列数据列中各自的所述最小数据值合并得到合并后的最小数据值;将各列数据列中各自的所述最大数据值合并得到合并后的最大数据值;将所述合并后的最大数据值减去所述合并后的所述最小数据值所得到的数值作为所述最大可能分组数。
9.根据权利要求6或7所述的装置,其特征在于,所述装置,还包括:
长数据存储模块,用于将列宽度超过预定宽度的长数据列存储为两列,一列数据列存储所述长数据列的实际数据;另一列数据列对应存储所述实际数据的存储位置;
数据列操作模块,用于在所述分组操作涉及所述长数据列时,以所述另一列数据列作为所述分组操作所操作的数据列;
其中,所述列宽度超过预定宽度的长数据列包括但不限于数据类型为String类型的数据列。
10.根据权利要求6或7所述的装置,其特征在于,所述装置,还包括:
阈值判断模块,用于判断所述最大可能分组数n是否超过预定阈值;
映射分组模块,用于若所述最大可能分组数n未超过所述预定阈值,则在分组过程中划分n个分组,直接将每行数据映射到所述n个分组中的一个分组中;
哈希分组模块,用于若所述最大可能分组数n超过所述预定阈值,则按照哈希分组操作进行所述分组操作。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310528997.3A CN104598385B (zh) | 2013-10-30 | 2013-10-30 | 内存分配方法及装置 |
PCT/CN2014/086597 WO2015062371A1 (zh) | 2013-10-30 | 2014-09-16 | 内存分配方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310528997.3A CN104598385B (zh) | 2013-10-30 | 2013-10-30 | 内存分配方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104598385A CN104598385A (zh) | 2015-05-06 |
CN104598385B true CN104598385B (zh) | 2019-05-10 |
Family
ID=53003295
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310528997.3A Active CN104598385B (zh) | 2013-10-30 | 2013-10-30 | 内存分配方法及装置 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN104598385B (zh) |
WO (1) | WO2015062371A1 (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105512091B (zh) * | 2015-12-03 | 2019-03-12 | 青岛海信移动通信技术股份有限公司 | 一种内存分配方法及装置 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101149752A (zh) * | 2007-11-10 | 2008-03-26 | 邹昌陆 | 基于sql的横向组合查询计算系统及方法 |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
AU713318B2 (en) * | 1995-08-31 | 1999-11-25 | Sand Technology Systems International Inc. | Memory management system and method using dual indexing structures |
EP2011035A4 (en) * | 2006-04-27 | 2011-08-24 | Intel Corp | SYSTEM-BASED PROCESSING FOR PARTITIONING AND MINING ON CONTENT BASE |
US7610468B2 (en) * | 2006-10-26 | 2009-10-27 | Hewlett-Packard Development Company, L.P. | Modified buddy system memory allocation |
CN102662853A (zh) * | 2012-03-22 | 2012-09-12 | 北京北大众志微系统科技有限责任公司 | 实现使用存储级并行的内存管理方法及装置 |
CN103106147B (zh) * | 2013-03-08 | 2016-03-16 | 中国科学院上海微系统与信息技术研究所 | 内存分配方法及系统 |
-
2013
- 2013-10-30 CN CN201310528997.3A patent/CN104598385B/zh active Active
-
2014
- 2014-09-16 WO PCT/CN2014/086597 patent/WO2015062371A1/zh active Application Filing
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101149752A (zh) * | 2007-11-10 | 2008-03-26 | 邹昌陆 | 基于sql的横向组合查询计算系统及方法 |
Non-Patent Citations (1)
Title |
---|
基于多维数据库的CUBE优化算法;熊东平;《电脑知识与技术》;20060115;第2006年卷(第2期);第28-29页 |
Also Published As
Publication number | Publication date |
---|---|
CN104598385A (zh) | 2015-05-06 |
WO2015062371A1 (zh) | 2015-05-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110199273B (zh) | 用于在多维数据库环境中的一次扫描中进行加载、聚合和批量计算的系统和方法 | |
CN102930062B (zh) | 一种数据库快速水平扩展的方法 | |
CN103678520B (zh) | 一种基于云计算的多维区间查询方法及其系统 | |
CN103577440B (zh) | 一种非关系型数据库中的数据处理方法和装置 | |
CN109815283B (zh) | 一种异构数据源可视化查询方法 | |
CN104408159B (zh) | 一种数据关联、加载、查询方法及装置 | |
US20140351239A1 (en) | Hardware acceleration for query operators | |
CN104885078A (zh) | 用于大规模并行处理数据库集群中的两阶段查询优化的方法 | |
US20150317345A1 (en) | Multiple fields parallel query method and corresponding storage organization | |
CN105468720A (zh) | 集成分布式数据处理系统的方法、相应系统及其数据处理方法 | |
CN109344153A (zh) | 业务数据的处理方法及终端设备 | |
CN110222029A (zh) | 一种大数据多维分析计算效率提升方法及系统 | |
CN101916280A (zh) | 并行计算系统及按查询内容进行负载均衡的方法 | |
CN108037967A (zh) | 一种基于多父子结构的菜单加载方法以及电子设备 | |
CN111352950A (zh) | 数据库表等值连接的优化方法、装置、服务器及存储介质 | |
CN104376109A (zh) | 一种基于数据分布库的多维度数据分布方法 | |
CN101916281B (zh) | 并行计算系统及去重计数方法 | |
CN105550332A (zh) | 一种基于双层索引结构的起源图查询方法 | |
Liroz-Gistau et al. | Dynamic workload-based partitioning for large-scale databases | |
CN106326012A (zh) | web应用集群缓存利用方法和系统 | |
CN109117426A (zh) | 分布式数据库查询方法、装置、设备及存储介质 | |
CN102402616B (zh) | 一种数据库集群的实现方法和系统 | |
CN105210059A (zh) | 一种数据处理方法及系统 | |
CN104714983B (zh) | 分布式索引的生成方法及装置 | |
CN104598385B (zh) | 内存分配方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |