CN109857814A - 一种内存数据处理方法及存储介质 - Google Patents
一种内存数据处理方法及存储介质 Download PDFInfo
- Publication number
- CN109857814A CN109857814A CN201811628501.9A CN201811628501A CN109857814A CN 109857814 A CN109857814 A CN 109857814A CN 201811628501 A CN201811628501 A CN 201811628501A CN 109857814 A CN109857814 A CN 109857814A
- Authority
- CN
- China
- Prior art keywords
- data
- memory
- length
- column
- type
- 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.)
- Pending
Links
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Memory System (AREA)
Abstract
本发明实施例公开了一种内存数据处理方法及存储介质,涉及计算机数据处理技术领域,所述内存数据处理方法包括:建立列式内存数据结构,对所述内存数据结构进行配置;针对不同类型数据的字符串长度选择对应的内存数据结构;采用列式存储管理方法针对不同的数据类型进行内存管理;其中,采用动态内存配置策略对数据长度大于预设字节的数据进行管理,采用内联存储管理方法对数据长度小于预设字节的数据进行处理。本发明实施例能够解决现有技术中的内存数据结构在处理大批量数据时性能不佳的问题。
Description
技术领域
本发明实施例涉及计算机数据处理技术领域,具体涉及一种内存数据处理方法及存储介质。
背景技术
现有的数据库软件和分布式数据处理引擎中,都需要设计一种位于内存中的数据结构,用于基于行列关系模型数据的存储、计算和传输,这种内存中的数据结构和算法的设计直接影响了整个处理引擎的性能。
然而现在常见的用于处理OLTP场景的关系型数据库软件通常采用逐行存储描述,为了支持实务处理,数据结构嵌套且复杂,对于OLAP 场景需要处理大批量的数据,目前的数据结构尚不具备高性能,如现有的分布式处理引擎Spark和impala,虽然做了一些改进,但是Spark是基于行式的管理方式,并利用哈希表的键值管理,在数据读写、计算角度来看蚁人性能不佳。Impala采用基于指针的管理方式,计算过程过于依赖指针,其高速缓冲存储器的缓冲命中率不高,导致性能不足,从而导致计算机的查找速度、内存更新速度不高。
发明内容
为此,本发明实施例提供一种内存数据处理方法及存储介质,以解决现有技术中的内存数据结构在处理大批量数据时性能不佳的问题。
为了实现上述目的,本发明的实施方式提供如下技术方案:提供一种内存数据处理方法,所述内存数据处理方法包括:建立列式内存数据结构,对所述内存数据结构进行配置;针对不同类型数据的字符串长度选择对应的内存数据结构;采用列式存储管理方法针对不同的数据类型进行内存管理;其中,采用动态内存配置策略对数据长度大于预设字节的数据进行管理,采用内联存储管理方法对数据长度小于预设字节的数据进行处理。
优选地,所述列式内存数据结构包括M列N行,每行的M列数据类型包括若干不同的数据类型,同一列的数据类型是一致的。
优选地,所述列式内存数据结构包括原生类型列、内联类型列和字符串类型列。
优选地,所述针对不同类型数据的字符串长度选择对应的内存数据结构的方法包括:若数据类型的长度小于预设字节时,选取内联类型列;若数据类型的长度大于预设字节时,选取字符串类型列;其中,当数据类型的长度小于预设字节且为布尔型或自定义数据类型或float或double 时,选取原生类型列。
优选地,所述处理方法包括:当数据类型的长度小于预设字节时,采用内联存储管理方法对内存进行管理;当数据类型的长度大于预设字节时,采用动态内存配置策略对内存进行管理。
优选地,所述动态内存配置策略包括:对内存块位置进行定址分配;进行求和函数计算;对内存进行回收释放;利用选择位向量函数查询有效分配内存。
优选地,所述对内存块位置进行定址分配的方法包括:当字符串的长度小于等于内存块的起始地址和结束地址之间的长度时,将内存块的结束地址向起始地址的方向移动;当字符串的长度大于内存块的起始地址和结束地址之间的长度,且小于最小存储单元减去16时,申请一个新的整形数据块放到块表的首端,再设置起始地址和结束地址;当字符串的长度大于等于最小存储单元减去16时,申请一个新的内存块放到块表的当前块和前一个块之间,再确定地址。
提供一种计算机存储介质,所述计算机存储介质中包含一个或多个程序指令,所述一个或多个程序指令用于被计算机执行如权利要求1-7 任一项所述的方法。
根据本发明的实施方式,本发明具有如下优点:本发明利用内置的内存块进行内存管理,能够提升内存申请和释放的效率;根据不同的数据类型匹配不同的列式数据结构,能够提升数据的定址和读写效率;本发明能够充分提高高速缓冲存储器的缓冲命中率;本发明采用列式存储区管理类方式,便于按列重组和序列化反序列化操作;本发明采用动态内存申请释放策略能够提高内存利用率,优化数据的查找更新速度。
具体实施方式
以下由特定的具体实施例说明本发明的实施方式,熟悉此技术的人士可由本说明书所揭露的内容轻易地了解本发明的其他优点及功效,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本实施例提供一种内存数据处理方法,所述内存数据处理方法包括:建立列式内存数据结构,对所述内存数据结构进行配置;针对不同类型数据的字符串长度选择对应的内存数据结构;采用列式存储管理方法针对不同的数据类型进行内存管理;其中,采用动态内存配置策略对数据长度大于预设字节的数据进行管理,采用内联存储管理方法对数据长度小于预设字节的数据进行处理。
进一步地,所述列式内存数据结构包括M列N行,每行的M列数据类型包括若干不同的数据类型,如bool,i32,i64,double,char[k], varchar[k]等,每一行的数据类型是一致的。
进一步地,所述列式内存数据结构包括原生类型列、内联类型列和字符串类型列,原生类型列适用数据类型包括bool、i32、i64、float、double。其主要有两部分空指针位向量NullBitVector和数值组ValueArray, NullBitVector用于描述每行是否为空指针null,占用N/8bytes。ValueArray 用于存储数值,占用的字节为N乘以内存容量sizeof(PrimitiveType)。
内联类型列InlineColumn<K>适用数据类型:length<64的数据类型, 如char[20],varchar[45],其中,K为内联存储长度,通常限定如下取值 K={8,16,32,64},InlineColumn<K>内存占用N*K字节。
字符串类型列StringColumn适用数据类型为:length>=64的数据类型,如char[64],varchar[2000],主要包含两部分定位数组PositingArray和块表BlockList,PositionArray占用内存为(N*16+extend_size)字节, extend_size为内存扩展的长度。BlockList是一个基于定长管理的block 单链表,其目的在于极度简化内存的申请和释放时间开销,用于存储长字串的数据。
进一步地,针对不同类型数据的字符串长度选择对应的内存数据结构的方法包括:若数据类型的长度小于预设字节时,选取内联类型列,本实施例的预设字节可以为64;若数据类型的长度大于64字节时,选取字符串类型列;其中,当数据类型的长度小于64字节且为布尔型或自定义数据类型或float或double时,选取原生类型列。当数据类型的长度小于64字节时,采用内联存储管理方法对内存进行管理;当数据类型的长度大于64字节时,采用动态内存配置策略对内存进行管理。内联存储管理指根据数据类型预先按特定数值分配内存。
动态内存配置策略包括内存的申请和释放两个动作,具体地,动态内存配置策略包括:对内存块位置进行分配;进行求和函数计算;对内存进行回收释放;利用选择位向量函数查询有效分配内存。对内存块位置进行分配的方法包括:当字符串的长度小于等于内存块的起始地址和结束地址之间的长度时,将内存块的结束地址向起始地址的方向移动;当字符串的长度大于内存块的起始地址和结束地址之间的长度,且小于最小存储单元减去16时,申请一个新的整形数据块放到块表的首端,再设置起始地址和结束地址;当字符串的长度大于等于最小存储单元减去 16时,申请一个新的内存块放到块表的当前块和前一个块之间。
本实施例以BlockList为例,begin为当前block可用区起始地址,end 为当前block可用区结束地址。当字符串长度小于等于内存块的起始地址和结束地址之间的长度,即size<=end-begin之间可分配量足够,则向左移动end,确定地址Position,偏移量blkoff=end-begin+8。
当字符串的长度大于等于最小存储单元减去16时,即 size>=kBlockSize-16,直接申请一个新的内存块large block放到block list 中当前块block和前一个块prevblock之间,确定地址Position偏移量 blkoff=16。
当字符串的长度大于内存块的起始地址和结束地址之间的长度,且小于最小存储单元减去16即size>end-begin且size<kBlockSize-16,申请一块新的整形数据块new char[kBlockSize],放到块表block list的首端 header处,再设置起始地址begin和结束地址end,确定地址Position,并舍弃上一个块的剩余空间。
进一步地,进行求和函数计算,更新sum_blk_size,计算所有管理的block内存总和,更新sum_alloc_size,计算通过allocate接口分配出去的内存总和;
对内存进行回收释放,更新sum_leak_size,计算通过Free接口归还的内存总和,判断是否需要回收内存,当sum_leak_size或sum_alloc_size 大于0.5时,释放并回收内存;
再利用选择位向量函数select bit vector查询有效分配内存,便于操作,且能够对数据进行过滤计算和行选择。
与上述实施例相对应的,本发明实施例还提供了一种计算机存储介质,该计算机存储介质中包含一个或多个程序指令。其中,一个或多个程序指令用于被计算机执行执行如上所介绍的一种内存数据处理方法。
虽然,上文中已经用一般性说明及具体实施例对本发明作了详尽的描述,但在本发明基础上,可以对之作一些修改或改进,这对本领域技术人员而言是显而易见的。因此,在不偏离本发明精神的基础上所做的这些修改或改进,均属于本发明要求保护的范围。
Claims (8)
1.一种内存数据处理方法,其特征在于,所述内存数据处理方法包括:
建立列式内存数据结构,对所述内存数据结构进行配置;
针对不同类型数据的字符串长度选择对应的内存数据结构;
采用列式存储管理方法针对不同的数据类型进行内存管理;
其中,采用动态内存配置策略对数据长度大于预设字节的数据进行管理,采用内联存储管理方法对数据长度小于预设字节的数据进行处理。
2.如权利要求1所述的一种内存数据处理方法,其特征在于,所述列式内存数据结构包括M列N行,每行的M列数据类型包括若干不同的数据类型,同一列的数据类型是一致的。
3.如权利要求1所述的一种内存数据处理方法,其特征在于,所述列式内存数据结构包括原生类型列、内联类型列和字符串类型列。
4.如权利要求1所述的一种内存数据处理方法,其特征在于,所述针对不同类型数据的字符串长度选择对应的内存数据结构的方法包括:若数据类型的长度小于预设字节时,选取内联类型列;若数据类型的长度大于预设字节时,选取字符串类型列;其中,当数据类型的长度小于预设字节且为布尔型或自定义数据类型或float或double时,选取原生类型列。
5.如权利要求1所述的一种内存数据处理方法,其特征在于,所述处理方法包括:当数据类型的长度小于预设字节时,采用内联存储管理方法对内存进行管理;当数据类型的长度大于预设字节时,采用动态内存配置策略对内存进行管理。
6.如权利要求1或5所述的一种内存数据处理方法,其特征在于,所述动态内存配置策略包括:对内存块位置进行定址分配;进行求和函数计算;对内存进行回收释放;利用选择位向量函数查询有效分配内存。
7.如权利要求6所述的一种内存数据处理方法,其特征在于,所述对内存块位置进行定址分配的方法包括:当字符串的长度小于等于内存块的起始地址和结束地址之间的长度时,将内存块的结束地址向起始地址的方向移动;当字符串的长度大于内存块的起始地址和结束地址之间的长度,且小于最小存储单元减去16时,申请一个新的整形数据块放到块表的首端,再设置起始地址和结束地址;当字符串的长度大于等于最小存储单元减去16时,申请一个新的内存块放到块表的当前块和前一个块之间,再确定地址。
8.一种计算机存储介质,其特征在于,所述计算机存储介质中包含一个或多个程序指令,所述一个或多个程序指令用于被计算机执行如权利要求1-7任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811628501.9A CN109857814A (zh) | 2018-12-28 | 2018-12-28 | 一种内存数据处理方法及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811628501.9A CN109857814A (zh) | 2018-12-28 | 2018-12-28 | 一种内存数据处理方法及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN109857814A true CN109857814A (zh) | 2019-06-07 |
Family
ID=66893040
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811628501.9A Pending CN109857814A (zh) | 2018-12-28 | 2018-12-28 | 一种内存数据处理方法及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109857814A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111291059A (zh) * | 2020-05-12 | 2020-06-16 | 北京东方通科技股份有限公司 | 基于内存数据网格的数据处理方法 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9262330B2 (en) * | 2009-11-04 | 2016-02-16 | Microsoft Technology Licensing, Llc | Column oriented in-memory page caching |
CN105824574A (zh) * | 2015-12-07 | 2016-08-03 | 国家电网公司 | 一种内存数据存储方法 |
CN106293939A (zh) * | 2016-08-05 | 2017-01-04 | 北京航空航天大学 | 一种在内存垃圾收集器中动态重用对象的方法 |
CN108038002A (zh) * | 2017-12-15 | 2018-05-15 | 天津津航计算技术研究所 | 一种嵌入式软件内存管理方法 |
CN108563923A (zh) * | 2017-12-05 | 2018-09-21 | 华南理工大学 | 一种基因变异数据分布式存储方法及架构 |
CN108984310A (zh) * | 2018-08-21 | 2018-12-11 | 郑州云海信息技术有限公司 | 一种对象数据的构建方法和装置 |
-
2018
- 2018-12-28 CN CN201811628501.9A patent/CN109857814A/zh active Pending
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9262330B2 (en) * | 2009-11-04 | 2016-02-16 | Microsoft Technology Licensing, Llc | Column oriented in-memory page caching |
CN105824574A (zh) * | 2015-12-07 | 2016-08-03 | 国家电网公司 | 一种内存数据存储方法 |
CN106293939A (zh) * | 2016-08-05 | 2017-01-04 | 北京航空航天大学 | 一种在内存垃圾收集器中动态重用对象的方法 |
CN108563923A (zh) * | 2017-12-05 | 2018-09-21 | 华南理工大学 | 一种基因变异数据分布式存储方法及架构 |
CN108038002A (zh) * | 2017-12-15 | 2018-05-15 | 天津津航计算技术研究所 | 一种嵌入式软件内存管理方法 |
CN108984310A (zh) * | 2018-08-21 | 2018-12-11 | 郑州云海信息技术有限公司 | 一种对象数据的构建方法和装置 |
Non-Patent Citations (2)
Title |
---|
刘黎明等: "《云计算应用基础》", 31 January 2015, 西南交通大学出版社 * |
曾祥楷: "基于内存的分布式列式数据库查询优化", 《中国优秀硕士学位论文全文数据库 信息科技辑》 * |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111291059A (zh) * | 2020-05-12 | 2020-06-16 | 北京东方通科技股份有限公司 | 基于内存数据网格的数据处理方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101916302B (zh) | 基于哈希表的三维空间数据自适应缓存管理方法及系统 | |
CN106708427B (zh) | 一种适用于键值对数据的存储方法 | |
JP6356675B2 (ja) | 集約/グループ化動作:ハッシュテーブル法のハードウェア実装 | |
CN107066393A (zh) | 提高地址映射表中映射信息密度的方法 | |
CN102663090B (zh) | 元数据查询方法和装置 | |
CN103544269B (zh) | 目录的存储方法、查询方法及节点控制器 | |
CN104809179B (zh) | 访问哈希表的装置和方法 | |
CN110888886B (zh) | 一种索引结构及构建方法、键值存储系统及请求处理方法 | |
CN104361113B (zh) | 一种内存‑闪存混合存储模式下的olap查询优化方法 | |
CN103645859B (zh) | 一种虚拟ssd与ssd异构镜像的磁盘阵列缓存方法 | |
US9959054B1 (en) | Log cleaning and tiering in a log-based data storage system | |
CN107515901A (zh) | 一种链式日志存储结构及其哈希索引结构、数据操作方法及服务器、介质 | |
CN105117417A (zh) | 一种读优化的内存数据库Trie树索引方法 | |
CN100383792C (zh) | 缓存数据库数据组织方法 | |
CN104112008A (zh) | 一种多表数据关联查询优化方法和装置 | |
CN103942343A (zh) | 一种面向哈希连接的数据存储优化方法 | |
CN103077125B (zh) | 一种高效利用存储空间的自适应自组织塔式缓存方法 | |
CN106055679A (zh) | 一种多层次缓存感知型索引方法 | |
CN105159616A (zh) | 一种磁盘空间管理方法及装置 | |
CN110297787A (zh) | I/o设备访问内存的方法、装置及设备 | |
CN104714898B (zh) | 一种Cache的分配方法和装置 | |
CN109857814A (zh) | 一种内存数据处理方法及存储介质 | |
CN107766258A (zh) | 内存存储方法与装置、内存查询方法与装置 | |
CN110109763A (zh) | 一种共享内存管理方法及装置 | |
CN105988720A (zh) | 数据存储装置和方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20190607 |