一种基于共享内存的键值对存储方法及装置制造方法

文档序号:6511162阅读:221来源:国知局
一种基于共享内存的键值对存储方法及装置制造方法
【专利摘要】本发明涉及一种基于共享内存的键值对存储方法及装置,包括以下步骤:在共享内存中创建内存索引单元和内存数据块单元,所述内存索引单元用于存储key在内存数据块单元中相对数据存储区域首地址的偏移量,所述内存数据块单元用于存储value;采用散列算法计算value的哈希值;将哈希值作为key在内存索引单元中的相对数据存储区域首地址的偏移量;若偏移量为零,将value存储于内存数据块单元的起始位置,若偏移量大于零,执行步骤5;比较与偏移量对应的内存数据块单元中的存储位置处已有的value与待存储的value的长度,根据比较结果,将待存储的value存储在内存数据块单元中。本发明基于共享内存实现键值对的存储,极大程度的提高了共享内存数据存储性能。
【专利说明】一种基于共享内存的键值对存储方法及装置
【技术领域】
[0001]本发明涉及键值对的数据存储,特别涉及一种基于共享内存的键值对存储方法及
>J-U ρ?α装直。
【背景技术】
[0002]NoSQL存储指非关系型数据库,它以键值对存储,结构不固定,每一个元组可以有不一样的字段,每个元组可以根据需要增加一些自己的键值对,不局限于固定的结构,可以减少一些时间和空间的开销。
[0003]键值存储,即Key-Value存储,简称KV存储。它是NoSQL存储的一种方式。它的数据按照键值对的形式进行组织,索引和存储。KV存储非常适合不涉及过多数据关系业务关系的业务数据,同时能有效减少读写磁盘的次数,比SQL数据库存储拥有更好的读写性能。
[0004]关系型数据库中的表都是存储一些格式化的数据结构,每个元组字段的组成都一样,即使不是每个元组都需要所有的字段,但数据库会为每个元组分配所有的字段,这样的结构可以便于表与表之间进行连接等操作,但从另一个角度来说它也是关系型数据库性能瓶颈的一个因素。它不能满足以下“高”需求:对数据库高并发读写的需求;对海量数据的高效率存储和访问的需求;对数据库的高可扩展性和高可用性的需求。为了解决这类问题,以非关系数据库应运而生,而键值对存储又是非关系数据库性能最高的数据存储之一。

【发明内容】

[0005]本发明所要解决的技术 问题是提供一种提高共享内存存储性能的基于共享内存的键值对存储方法及系统。
[0006]本发明解决上述技术问题的技术方案如下:一种基于共享内存的键值对存储方法,包括以下步骤:
[0007]步骤1:在共享内存中创建内存索引单元和内存数据块单元,所述内存索引单元用于存储key在内存数据块单元中相对数据存储区域首地址的偏移量,所述内存数据块单元用于存储value ;
[0008]步骤2:采用散列算法计算value的哈希值;
[0009]步骤3:将哈希值作为key在内存索引单元中的相对数据存储区域首地址的偏移量;
[0010]步骤4:若偏移量为零,将value存储于内存数据块单元的起始位置,若偏移量大于零,执行步骤5;
[0011]步骤5:比较与偏移量对应的内存数据块单元中的存储位置处已有的value与待存储的value的长度,根据比较结果,将待存储的value存储在内存数据块单元中。
[0012]本发明的有益效果是:采用散列算法确定数据存储地址,并且数据的存储通过静态共享内存实现,无需动态分配,极大程度的提高了共享内存的存储性能。
[0013]在上述技术方案的基础上,本发明还可以做如下改进。[0014]进一步,比较与偏移量对应的内存数据块单元中的存储位置处已存储的value的长度是否大于待存储的value,如若已存储的value的长度大于或等于待存储的value,将待存储的value覆盖已存储的value,否则,将待存储的value存储于内存数据块单元中数据存储区域的末尾。
[0015]进一步,所述value在内存数据块单元中的存储位置为内存数据块单元中数据存储区域的首地址加上偏移量。
[0016]进一步,一种基于共享内存的键值对存储装置,包括创建存储单元模块,计算哈希模块,偏移量模块,判断模块和比较存储模块;
[0017]所述创建存储单元模块,用于在共享内存中创建内存索引单元和内存数据块单元,所述内存索引单元用于存储key在内存数据块单元中相对数据存储区域首地址的偏移量,所述内存数据块单元用于存储value,将内存索引单元信息的信息和内存数据块单元的信息发送给比较存储模块;
[0018]所述计算哈希模块,用于采用散列算法计算value的哈希值,将哈希值发送给偏移量模块;
[0019]所述偏移量模块,用于接收哈希值,将哈希值作为key在内存索引单元中的相对数据存储区域首地址的偏移量,将偏移量发送给判断模块;
[0020]所述判断模块,用于接收偏移量,若偏移量为零,将value存储于内存数据块单元的起始位置,若偏移量大于零,执行比较存储模块;
[0021]所述比较存储模块,用于接收内存索引单元信息的信息和内存数据块单元的信息,比较与偏移量对应的内存数据块单元中的存储位置处已有的value与待存储的value的长度,根据比较结果,将待存储的value存储在内存数据块单元中。
[0022]采用上述进一步方案的有益效果是采用散列算法确定数据存储地址,并且数据的存储通过静态共享内存实现,无需动态分配,极大程度的提高了共享内存的存储性能。
[0023]进一步,比较与偏移量对应的内存数据块单元中的存储位置处已存储的value的长度是否大于待存储的value,如若已存储的value的长度大于或等于待存储的value,将待存储的value覆盖已存储的value,否则,将待存储的value存储于内存数据块单元中数据存储区域的末尾。
[0024]进一步,所述value在内存数据块单元中的存储位置为内存数据块单元中数据存储区域的首地址加上偏移量。
【专利附图】

【附图说明】
[0025]图1为本发明方法步骤流程图;
[0026]图2为本发明装置结构图。
[0027]附图中,各标号所代表的部件列表如下:
[0028]1、创建存储单元模块,2、计算哈希模块,3、偏移量模块,4、判断模块,5、比较存储模块。
【具体实施方式】
[0029]以下结合附图对本发明的原理和特征进行描述,所举实例只用于解释本发明,并非用于限定本发明的范围。
[0030]如图1所示,为本发明方法步骤流程图;图2为本发明装置结构图。
[0031]实施例1
[0032]一种基于共享内存的键值对存储方法,包括以下步骤:
[0033]步骤1:在共享内存中创建内存索引单元和内存数据块单元,所述内存索引单元用于存储key在内存数据块单元中相对数据存储区域首地址的偏移量,所述内存数据块单元用于存储value ;
[0034]步骤2:采用散列算法计算value的哈希值;
[0035]步骤3:将哈希值作为key在内存索引单元中的相对数据存储区域首地址的偏移量;
[0036]步骤4:若偏移量为零,将value存储于内存数据块单元的起始位置,若偏移量大于零,执行步骤5;
[0037]步骤5:比较与偏移量对应的内存数据块单元中的存储位置处已有的value与待存储的value的长度,根据比较结果,将待存储的value存储在内存数据块单元中。
[0038]所述步骤5具体为:比较与偏移量对应的内存数据块单元中的存储位置处已存储的value的长度是否大于待存储的value,如若已存储的value的长度大于或等于待存储的value,将待存储的value覆盖已存储的value,否则,将待存储的value存储于内存数据块单元中数据存储区域的末尾。
[0039]所述value在内存数据块单元中的存储位置为内存数据块单元中数据存储区域的首地址加上偏移量。
[0040]一种基于共享内存的键值对存储装置,包括创建存储单元模块I,计算哈希模块2,偏移量模块3,判断模块4和比较存储模块5 ;
[0041]所述创建存储单元模块1,用于在共享内存中创建内存索引单元和内存数据块单元,所述内存索引单元用于存储key在内存数据块单元中相对数据存储区域首地址的偏移量,所述内存数据块单元用于存储value,将内存索引单元信息的信息和内存数据块单元的信息发送给比较存储模块5 ;
[0042]所述计算哈希模块2,用于采用散列算法计算value的哈希值,将哈希值发送给偏移量模块3 ;
[0043]所述偏移量模块3,用于接收哈希值,将哈希值作为key在内存索引单元中的相对数据存储区域首地址的偏移量,将偏移量发送给判断模块4 ;
[0044]所述判断模块4,用于接收偏移量,若偏移量为零,将value存储于内存数据块单元的起始位置,若偏移量大于零,执行比较存储模块5 ;
[0045]所述比较存储模块5,用于接收内存索引单元信息的信息和内存数据块单元的信息,比较与偏移量对应的内存数据块单元中的存储位置处已有的value与待存储的value的长度,根据比较结果,将待存储的value存储在内存数据块单元中。
[0046]比较与偏移量对应的内存数据块单元中的存储位置处已存储的value的长度是否大于待存储的value,如若已存储的value的长度大于或等于待存储的value,将待存储的value覆盖已存储的value,否则,将待存储的value存储于内存数据块单元中数据存储区域的末尾。[0047]所述value在内存数据块单元中的存储位置为内存数据块单元中数据存储区域的首地址加上偏移量。
[0048]本发明采用共享内存作为存储,利用共享内存首地址的相对偏移量作为键值对的
存储地址。整个存储分两部分:内存索引结构和内存数据块结构,具体定义如下:
[0049]
【权利要求】
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在内存数据块单元中的存储位置为内存数据块单元中数据存储区域的首地址加上偏移量。
【文档编号】G06F17/30GK103473314SQ201310412659
【公开日】2013年12月25日 申请日期:2013年9月11日 优先权日:2013年9月11日
【发明者】闫永涛 申请人:北京思特奇信息技术股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1