CN103473314A - 一种基于共享内存的键值对存储方法及装置 - Google Patents
一种基于共享内存的键值对存储方法及装置 Download PDFInfo
- Publication number
- CN103473314A CN103473314A CN2013104126593A CN201310412659A CN103473314A CN 103473314 A CN103473314 A CN 103473314A CN 2013104126593 A CN2013104126593 A CN 2013104126593A CN 201310412659 A CN201310412659 A CN 201310412659A CN 103473314 A CN103473314 A CN 103473314A
- Authority
- CN
- China
- Prior art keywords
- value
- stored
- memory
- play amount
- module unit
- 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
Images
Landscapes
- Storage Device Security (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明涉及一种基于共享内存的键值对存储方法及装置,包括以下步骤:在共享内存中创建内存索引单元和内存数据块单元,所述内存索引单元用于存储key在内存数据块单元中相对数据存储区域首地址的偏移量,所述内存数据块单元用于存储value;采用散列算法计算value的哈希值;将哈希值作为key在内存索引单元中的相对数据存储区域首地址的偏移量;若偏移量为零,将value存储于内存数据块单元的起始位置,若偏移量大于零,执行步骤5;比较与偏移量对应的内存数据块单元中的存储位置处已有的value与待存储的value的长度,根据比较结果,将待存储的value存储在内存数据块单元中。本发明基于共享内存实现键值对的存储,极大程度的提高了共享内存数据存储性能。
Description
技术领域
本发明涉及键值对的数据存储,特别涉及一种基于共享内存的键值对存储方法及装置。
背景技术
NoSQL存储指非关系型数据库,它以键值对存储,结构不固定,每一个元组可以有不一样的字段,每个元组可以根据需要增加一些自己的键值对,不局限于固定的结构,可以减少一些时间和空间的开销。
键值存储,即Key-Value存储,简称KV存储。它是NoSQL存储的一种方式。它的数据按照键值对的形式进行组织,索引和存储。KV存储非常适合不涉及过多数据关系业务关系的业务数据,同时能有效减少读写磁盘的次数,比SQL数据库存储拥有更好的读写性能。
关系型数据库中的表都是存储一些格式化的数据结构,每个元组字段的组成都一样,即使不是每个元组都需要所有的字段,但数据库会为每个元组分配所有的字段,这样的结构可以便于表与表之间进行连接等操作,但从另一个角度来说它也是关系型数据库性能瓶颈的一个因素。它不能满足以下“高”需求:对数据库高并发读写的需求;对海量数据的高效率存储和访问的需求;对数据库的高可扩展性和高可用性的需求。为了解决这类问题,以非关系数据库应运而生,而键值对存储又是非关系数据库性能最高的数据存储之一。
发明内容
本发明所要解决的技术问题是提供一种提高共享内存存储性能的基于共享内存的键值对存储方法及***。
本发明解决上述技术问题的技术方案如下:一种基于共享内存的键值对存储方法,包括以下步骤:
步骤1:在共享内存中创建内存索引单元和内存数据块单元,所述内存索引单元用于存储key在内存数据块单元中相对数据存储区域首地址的偏移量,所述内存数据块单元用于存储value;
步骤2:采用散列算法计算value的哈希值;
步骤3:将哈希值作为key在内存索引单元中的相对数据存储区域首地址的偏移量;
步骤4:若偏移量为零,将value存储于内存数据块单元的起始位置,若偏移量大于零,执行步骤5;
步骤5:比较与偏移量对应的内存数据块单元中的存储位置处已有的value与待存储的value的长度,根据比较结果,将待存储的value存储在内存数据块单元中。
本发明的有益效果是:采用散列算法确定数据存储地址,并且数据的存储通过静态共享内存实现,无需动态分配,极大程度的提高了共享内存的存储性能。
在上述技术方案的基础上,本发明还可以做如下改进。
进一步,比较与偏移量对应的内存数据块单元中的存储位置处已存储的value的长度是否大于待存储的value,如若已存储的value的长度大于或等于待存储的value,将待存储的value覆盖已存储的value,否则,将待存储的value存储于内存数据块单元中数据存储区域的末尾。
进一步,所述value在内存数据块单元中的存储位置为内存数据块单元中数据存储区域的首地址加上偏移量。
进一步,一种基于共享内存的键值对存储装置,包括创建存储单元模块,计算哈希模块,偏移量模块,判断模块和比较存储模块;
所述创建存储单元模块,用于在共享内存中创建内存索引单元和内存数据块单元,所述内存索引单元用于存储key在内存数据块单元中相对数据存储区域首地址的偏移量,所述内存数据块单元用于存储value,将内存索引单元信息的信息和内存数据块单元的信息发送给比较存储模块;
所述计算哈希模块,用于采用散列算法计算value的哈希值,将哈希值发送给偏移量模块;
所述偏移量模块,用于接收哈希值,将哈希值作为key在内存索引单元中的相对数据存储区域首地址的偏移量,将偏移量发送给判断模块;
所述判断模块,用于接收偏移量,若偏移量为零,将value存储于内存数据块单元的起始位置,若偏移量大于零,执行比较存储模块;
所述比较存储模块,用于接收内存索引单元信息的信息和内存数据块单元的信息,比较与偏移量对应的内存数据块单元中的存储位置处已有的value与待存储的value的长度,根据比较结果,将待存储的value存储在内存数据块单元中。
采用上述进一步方案的有益效果是采用散列算法确定数据存储地址,并且数据的存储通过静态共享内存实现,无需动态分配,极大程度的提高了共享内存的存储性能。
进一步,比较与偏移量对应的内存数据块单元中的存储位置处已存储的value的长度是否大于待存储的value,如若已存储的value的长度大于或等于待存储的value,将待存储的value覆盖已存储的value,否则,将待存储的value存储于内存数据块单元中数据存储区域的末尾。
进一步,所述value在内存数据块单元中的存储位置为内存数据块单元中数据存储区域的首地址加上偏移量。
附图说明
图1为本发明方法步骤流程图;
图2为本发明装置结构图。
附图中,各标号所代表的部件列表如下:
1、创建存储单元模块,2、计算哈希模块,3、偏移量模块,4、判断模块,5、比较存储模块。
具体实施方式
以下结合附图对本发明的原理和特征进行描述,所举实例只用于解释本发明,并非用于限定本发明的范围。
如图1所示,为本发明方法步骤流程图;图2为本发明装置结构图。
实施例1
一种基于共享内存的键值对存储方法,包括以下步骤:
步骤1:在共享内存中创建内存索引单元和内存数据块单元,所述内存索引单元用于存储key在内存数据块单元中相对数据存储区域首地址的偏移量,所述内存数据块单元用于存储value;
步骤2:采用散列算法计算value的哈希值;
步骤3:将哈希值作为key在内存索引单元中的相对数据存储区域首地址的偏移量;
步骤4:若偏移量为零,将value存储于内存数据块单元的起始位置,若偏移量大于零,执行步骤5;
步骤5:比较与偏移量对应的内存数据块单元中的存储位置处已有的value与待存储的value的长度,根据比较结果,将待存储的value存储在内存数据块单元中。
所述步骤5具体为:比较与偏移量对应的内存数据块单元中的存储位置处已存储的value的长度是否大于待存储的value,如若已存储的value的长度大于或等于待存储的value,将待存储的value覆盖已存储的value,否则,将待存储的value存储于内存数据块单元中数据存储区域的末尾。
所述value在内存数据块单元中的存储位置为内存数据块单元中数据存储区域的首地址加上偏移量。
一种基于共享内存的键值对存储装置,包括创建存储单元模块1,计算哈希模块2,偏移量模块3,判断模块4和比较存储模块5;
所述创建存储单元模块1,用于在共享内存中创建内存索引单元和内存数据块单元,所述内存索引单元用于存储key在内存数据块单元中相对数据存储区域首地址的偏移量,所述内存数据块单元用于存储value,将内存索引单元信息的信息和内存数据块单元的信息发送给比较存储模块5;
所述计算哈希模块2,用于采用散列算法计算value的哈希值,将哈希值发送给偏移量模块3;
所述偏移量模块3,用于接收哈希值,将哈希值作为key在内存索引单元中的相对数据存储区域首地址的偏移量,将偏移量发送给判断模块4;
所述判断模块4,用于接收偏移量,若偏移量为零,将value存储于内存数据块单元的起始位置,若偏移量大于零,执行比较存储模块5;
所述比较存储模块5,用于接收内存索引单元信息的信息和内存数据块单元的信息,比较与偏移量对应的内存数据块单元中的存储位置处已有的value与待存储的value的长度,根据比较结果,将待存储的value存储在内存数据块单元中。
比较与偏移量对应的内存数据块单元中的存储位置处已存储的value的长度是否大于待存储的value,如若已存储的value的长度大于或等于待存储的value,将待存储的value覆盖已存储的value,否则,将待存储的value存储于内存数据块单元中数据存储区域的末尾。
所述value在内存数据块单元中的存储位置为内存数据块单元中数据存储区域的首地址加上偏移量。
本发明采用共享内存作为存储,利用共享内存首地址的相对偏移量作为键值对的存储地址。整个存储分两部分:内存索引结构和内存数据块结构,具体定义如下:
内存索引结构主要记录数据的相对偏移位置和共享内存总体情况,包括数据总数量,共享内存的空闲起始偏移位置和末尾偏移位置。数据对key的hashID作为data_offset数组的下标,数组值保存数据对在共享内存的相对偏移位置。
内存数据块结构为数据对的存储结构,包括数据对key和value的长度、实际存储数据,数据对的有效性和后续数据对的相对偏移位置等。通过后续数据对的相对偏移位置(next_offset)将相同hashID的多个数据对静态串联起来。
对于新增加的key-value数据对,首先通过散列算法计算key的hashID,将hashID作为内存索引结构中data_offset数组的下标得到该哈希值在共享内存的偏移位置,如果该偏移位置为初始值0,表示key在共享内存数据区中不存在,可以在共享内存空闲区的开始位置添加新数据;如果偏移位置>0,表示key在共享内存数据区中已存在,新数据将做修改操作,将原数据进行覆盖。核心代码如下:
采用散列算法查询数据地址,并且数据的存储都是通过静态共享内存实现,无需动态分配,从而提高性能。
以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (6)
1.一种基于共享内存的键值对存储方法,其特征在于,包括以下步骤:
步骤1:在共享内存中创建内存索引单元和内存数据块单元,所述内存索引单元用于存储key在内存数据块单元中相对数据存储区域首地址的偏移量,所述内存数据块单元用于存储value;
步骤2:采用散列算法计算value的哈希值;
步骤3:将哈希值作为key在内存索引单元中的相对数据存储区域首地址的偏移量;
步骤4:若偏移量为零,将value存储于内存数据块单元的起始位置,若偏移量大于零,执行步骤5;
步骤5:比较与偏移量对应的内存数据块单元中的存储位置处已有的value与待存储的value的长度,根据比较结果,将待存储的value存储在内存数据块单元中。
2.根据权利要求1所述的键值对存储方法,其特征在于:所述步骤5具体为:比较与偏移量对应的内存数据块单元中的存储位置处已存储的value的长度是否大于待存储的value,如若已存储的value的长度大于或等于待存储的value,将待存储的value覆盖已存储的value,否则,将待存储的value存储于内存数据块单元中数据存储区域的末尾。
3.根据权利要求1所述的键值对存储方法,其特征在于:所述value在内存数据块单元中的存储位置为内存数据块单元中数据存储区域的首地址加上偏移量。
4.一种基于共享内存的键值对存储装置,其特征在于:包括创建存储单元模块(1),计算哈希模块(2),偏移量模块(3),判断模块(4)和比较存储模块(5);
所述创建存储单元模块(1),用于在共享内存中创建内存索引单元和内存数据块单元,所述内存索引单元用于存储key在内存数据块单元中相对数据存储区域首地址的偏移量,所述内存数据块单元用于存储value,将内存索引单元信息的信息和内存数据块单元的信息发送给比较存储模块(5);
所述计算哈希模块(2),用于采用散列算法计算value的哈希值,将哈希值发送给偏移量模块(3);
所述偏移量模块(3),用于接收哈希值,将哈希值作为key在内存索引单元中的相对数据存储区域首地址的偏移量,将偏移量发送给判断模块(4);
所述判断模块(4),用于接收偏移量,若偏移量为零,将value存储于内存数据块单元的起始位置,若偏移量大于零,执行比较存储模块(5);
所述比较存储模块(5),用于接收内存索引单元信息的信息和内存数据块单元的信息,比较与偏移量对应的内存数据块单元中的存储位置处已有的value与待存储的value的长度,根据比较结果,将待存储的value存储在内存数据块单元中。
5.根据权利要求4所述的键值对存储装置,其特征在于:所述比较存储模块(5)具体用于:比较与偏移量对应的内存数据块单元中的存储位置处已存储的value的长度是否大于待存储的value,如若已存储的value的长度大于或等于待存储的value,将待存储的value覆盖已存储的value,否则,将待存储的value存储于内存数据块单元中数据存储区域的末尾。
6.根据权利要求4所述的键值对存储装置,其特征在于:所述value在内存数据块单元中的存储位置为内存数据块单元中数据存储区域的首地址加上偏移量。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2013104126593A CN103473314A (zh) | 2013-09-11 | 2013-09-11 | 一种基于共享内存的键值对存储方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2013104126593A CN103473314A (zh) | 2013-09-11 | 2013-09-11 | 一种基于共享内存的键值对存储方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN103473314A true CN103473314A (zh) | 2013-12-25 |
Family
ID=49798162
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2013104126593A Pending CN103473314A (zh) | 2013-09-11 | 2013-09-11 | 一种基于共享内存的键值对存储方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103473314A (zh) |
Cited By (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103714009A (zh) * | 2013-12-20 | 2014-04-09 | 华中科技大学 | 一种GPU上基于内存统一管理的MapReduce实现方法 |
CN104036054A (zh) * | 2014-07-08 | 2014-09-10 | 携程计算机技术(上海)有限公司 | 目标地查找方法及*** |
CN104484471A (zh) * | 2014-12-31 | 2015-04-01 | 天津南大通用数据技术股份有限公司 | 一种高性能数据存储引擎的实现方法 |
CN104809183A (zh) * | 2015-04-17 | 2015-07-29 | 北京奇艺世纪科技有限公司 | 一种数据读取及写入的方法和装置 |
CN105630612A (zh) * | 2014-10-31 | 2016-06-01 | 腾讯科技(深圳)有限公司 | 进程更新方法和装置 |
CN106202548A (zh) * | 2016-07-25 | 2016-12-07 | 网易(杭州)网络有限公司 | 数据存储方法、查找方法及装置 |
CN106294205A (zh) * | 2015-05-15 | 2017-01-04 | 北京国双科技有限公司 | 缓存数据处理方法及装置 |
CN106547484A (zh) * | 2016-10-20 | 2017-03-29 | 华中科技大学 | 一种基于raid5的实现内存数据可靠性方法及*** |
CN108052290A (zh) * | 2017-12-13 | 2018-05-18 | 北京百度网讯科技有限公司 | 用于存储数据的方法和装置 |
CN108874897A (zh) * | 2018-05-23 | 2018-11-23 | 新华三大数据技术有限公司 | 数据查询方法及装置 |
CN110569398A (zh) * | 2019-09-09 | 2019-12-13 | 广州虎牙科技有限公司 | 数据处理方法、装置、计算机设备和可读存储介质 |
CN112099979A (zh) * | 2020-11-18 | 2020-12-18 | 数字广东网络建设有限公司 | 一种访问控制方法、装置、计算机设备和存储介质 |
WO2021017647A1 (zh) * | 2019-07-29 | 2021-02-04 | 华为技术有限公司 | 一种数据单元的合并方法及装置 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101315628A (zh) * | 2007-06-01 | 2008-12-03 | 华为技术有限公司 | 内存数据库***及实现内存数据库的方法和装置 |
CN102117340A (zh) * | 2011-04-19 | 2011-07-06 | 北京神州数码思特奇信息技术股份有限公司 | 一种动态数据存储方法 |
CN102122285A (zh) * | 2010-01-11 | 2011-07-13 | 卓望数码技术(深圳)有限公司 | 一种数据缓存***和数据查询方法 |
-
2013
- 2013-09-11 CN CN2013104126593A patent/CN103473314A/zh active Pending
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101315628A (zh) * | 2007-06-01 | 2008-12-03 | 华为技术有限公司 | 内存数据库***及实现内存数据库的方法和装置 |
CN102122285A (zh) * | 2010-01-11 | 2011-07-13 | 卓望数码技术(深圳)有限公司 | 一种数据缓存***和数据查询方法 |
CN102117340A (zh) * | 2011-04-19 | 2011-07-06 | 北京神州数码思特奇信息技术股份有限公司 | 一种动态数据存储方法 |
Cited By (21)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103714009A (zh) * | 2013-12-20 | 2014-04-09 | 华中科技大学 | 一种GPU上基于内存统一管理的MapReduce实现方法 |
CN104036054A (zh) * | 2014-07-08 | 2014-09-10 | 携程计算机技术(上海)有限公司 | 目标地查找方法及*** |
CN105630612A (zh) * | 2014-10-31 | 2016-06-01 | 腾讯科技(深圳)有限公司 | 进程更新方法和装置 |
CN105630612B (zh) * | 2014-10-31 | 2020-06-02 | 腾讯科技(深圳)有限公司 | 进程更新方法和装置 |
CN104484471B (zh) * | 2014-12-31 | 2017-09-15 | 天津南大通用数据技术股份有限公司 | 一种高性能数据存储引擎的实现方法 |
CN104484471A (zh) * | 2014-12-31 | 2015-04-01 | 天津南大通用数据技术股份有限公司 | 一种高性能数据存储引擎的实现方法 |
CN104809183A (zh) * | 2015-04-17 | 2015-07-29 | 北京奇艺世纪科技有限公司 | 一种数据读取及写入的方法和装置 |
CN104809183B (zh) * | 2015-04-17 | 2018-06-22 | 北京奇艺世纪科技有限公司 | 一种数据读取及写入的方法和装置 |
CN106294205B (zh) * | 2015-05-15 | 2019-12-10 | 北京国双科技有限公司 | 缓存数据处理方法及装置 |
CN106294205A (zh) * | 2015-05-15 | 2017-01-04 | 北京国双科技有限公司 | 缓存数据处理方法及装置 |
CN106202548B (zh) * | 2016-07-25 | 2018-09-04 | 网易(杭州)网络有限公司 | 数据存储方法、查找方法及装置 |
CN106202548A (zh) * | 2016-07-25 | 2016-12-07 | 网易(杭州)网络有限公司 | 数据存储方法、查找方法及装置 |
CN106547484A (zh) * | 2016-10-20 | 2017-03-29 | 华中科技大学 | 一种基于raid5的实现内存数据可靠性方法及*** |
CN106547484B (zh) * | 2016-10-20 | 2019-05-14 | 华中科技大学 | 一种基于raid5的实现内存数据可靠性方法及*** |
CN108052290A (zh) * | 2017-12-13 | 2018-05-18 | 北京百度网讯科技有限公司 | 用于存储数据的方法和装置 |
US10860478B2 (en) | 2017-12-13 | 2020-12-08 | Beijing Baidu Netcom Science And Technology Co., Ltd. | Method and device for storing data |
CN108874897A (zh) * | 2018-05-23 | 2018-11-23 | 新华三大数据技术有限公司 | 数据查询方法及装置 |
CN108874897B (zh) * | 2018-05-23 | 2019-09-13 | 新华三大数据技术有限公司 | 数据查询方法及装置 |
WO2021017647A1 (zh) * | 2019-07-29 | 2021-02-04 | 华为技术有限公司 | 一种数据单元的合并方法及装置 |
CN110569398A (zh) * | 2019-09-09 | 2019-12-13 | 广州虎牙科技有限公司 | 数据处理方法、装置、计算机设备和可读存储介质 |
CN112099979A (zh) * | 2020-11-18 | 2020-12-18 | 数字广东网络建设有限公司 | 一种访问控制方法、装置、计算机设备和存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103473314A (zh) | 一种基于共享内存的键值对存储方法及装置 | |
CN110825748B (zh) | 利用差异化索引机制的高性能和易扩展的键值存储方法 | |
CN102364474B (zh) | 用于机群文件***的元数据存储***和管理方法 | |
CN102222085B (zh) | 一种基于相似性与局部性结合的重复数据删除方法 | |
CN102968503B (zh) | 数据库***的数据处理方法以及数据库*** | |
CN104346357A (zh) | 一种嵌入式终端的文件存取方法及*** | |
CN106708427A (zh) | 一种适用于键值对数据的存储方法 | |
CN103399823B (zh) | 业务数据的存储方法、设备和*** | |
CN105242881A (zh) | 分布式存储***及其数据读写方法 | |
CN102915278A (zh) | 重复数据删除方法 | |
CN103593436A (zh) | 文件合并方法和装置 | |
CN103383690B (zh) | 分布式数据存储方法及*** | |
CN104156380A (zh) | 一种分布式存储器哈希索引方法及*** | |
CN103914483B (zh) | 文件存储方法、装置及文件读取方法、装置 | |
CN102402602A (zh) | 一种实时数据库的b+树索引方法及装置 | |
CN104112008A (zh) | 一种多表数据关联查询优化方法和装置 | |
CN103838770A (zh) | 一种数据逻辑分区的方法和*** | |
CN103440245A (zh) | 数据库***的行列混合存储方法 | |
CN102033924A (zh) | 一种数据存储方法和*** | |
CN102521419A (zh) | 分级存储的实现方法和*** | |
CN103838853A (zh) | 一种基于不同存储介质的混合文件*** | |
US20150169623A1 (en) | Distributed File System, File Access Method and Client Device | |
CN103544124B (zh) | Nand Flash存储器的访问方法 | |
CN103473258A (zh) | 云存储文件*** | |
CN104536908A (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 | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20131225 |
|
RJ01 | Rejection of invention patent application after publication |