一種基于共享內(nèi)存的鍵值對(duì)存儲(chǔ)方法及裝置制造方法
【專利摘要】本發(fā)明涉及一種基于共享內(nèi)存的鍵值對(duì)存儲(chǔ)方法及裝置,包括以下步驟:在共享內(nèi)存中創(chuàng)建內(nèi)存索引單元和內(nèi)存數(shù)據(jù)塊單元,所述內(nèi)存索引單元用于存儲(chǔ)key在內(nèi)存數(shù)據(jù)塊單元中相對(duì)數(shù)據(jù)存儲(chǔ)區(qū)域首地址的偏移量,所述內(nèi)存數(shù)據(jù)塊單元用于存儲(chǔ)value;采用散列算法計(jì)算value的哈希值;將哈希值作為key在內(nèi)存索引單元中的相對(duì)數(shù)據(jù)存儲(chǔ)區(qū)域首地址的偏移量;若偏移量為零,將value存儲(chǔ)于內(nèi)存數(shù)據(jù)塊單元的起始位置,若偏移量大于零,執(zhí)行步驟5;比較與偏移量對(duì)應(yīng)的內(nèi)存數(shù)據(jù)塊單元中的存儲(chǔ)位置處已有的value與待存儲(chǔ)的value的長(zhǎng)度,根據(jù)比較結(jié)果,將待存儲(chǔ)的value存儲(chǔ)在內(nèi)存數(shù)據(jù)塊單元中。本發(fā)明基于共享內(nèi)存實(shí)現(xiàn)鍵值對(duì)的存儲(chǔ),極大程度的提高了共享內(nèi)存數(shù)據(jù)存儲(chǔ)性能。
【專利說(shuō)明】一種基于共享內(nèi)存的鍵值對(duì)存儲(chǔ)方法及裝置
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及鍵值對(duì)的數(shù)據(jù)存儲(chǔ),特別涉及一種基于共享內(nèi)存的鍵值對(duì)存儲(chǔ)方法及
>J-U ρ?α裝直。
【背景技術(shù)】
[0002]NoSQL存儲(chǔ)指非關(guān)系型數(shù)據(jù)庫(kù),它以鍵值對(duì)存儲(chǔ),結(jié)構(gòu)不固定,每一個(gè)元組可以有不一樣的字段,每個(gè)元組可以根據(jù)需要增加一些自己的鍵值對(duì),不局限于固定的結(jié)構(gòu),可以減少一些時(shí)間和空間的開(kāi)銷。
[0003]鍵值存儲(chǔ),即Key-Value存儲(chǔ),簡(jiǎn)稱KV存儲(chǔ)。它是NoSQL存儲(chǔ)的一種方式。它的數(shù)據(jù)按照鍵值對(duì)的形式進(jìn)行組織,索引和存儲(chǔ)。KV存儲(chǔ)非常適合不涉及過(guò)多數(shù)據(jù)關(guān)系業(yè)務(wù)關(guān)系的業(yè)務(wù)數(shù)據(jù),同時(shí)能有效減少讀寫(xiě)磁盤(pán)的次數(shù),比SQL數(shù)據(jù)庫(kù)存儲(chǔ)擁有更好的讀寫(xiě)性能。
[0004]關(guān)系型數(shù)據(jù)庫(kù)中的表都是存儲(chǔ)一些格式化的數(shù)據(jù)結(jié)構(gòu),每個(gè)元組字段的組成都一樣,即使不是每個(gè)元組都需要所有的字段,但數(shù)據(jù)庫(kù)會(huì)為每個(gè)元組分配所有的字段,這樣的結(jié)構(gòu)可以便于表與表之間進(jìn)行連接等操作,但從另一個(gè)角度來(lái)說(shuō)它也是關(guān)系型數(shù)據(jù)庫(kù)性能瓶頸的一個(gè)因素。它不能滿足以下“高”需求:對(duì)數(shù)據(jù)庫(kù)高并發(fā)讀寫(xiě)的需求;對(duì)海量數(shù)據(jù)的高效率存儲(chǔ)和訪問(wèn)的需求;對(duì)數(shù)據(jù)庫(kù)的高可擴(kuò)展性和高可用性的需求。為了解決這類問(wèn)題,以非關(guān)系數(shù)據(jù)庫(kù)應(yīng)運(yùn)而生,而鍵值對(duì)存儲(chǔ)又是非關(guān)系數(shù)據(jù)庫(kù)性能最高的數(shù)據(jù)存儲(chǔ)之一。
【發(fā)明內(nèi)容】
[0005]本發(fā)明所要解決的技術(shù) 問(wèn)題是提供一種提高共享內(nèi)存存儲(chǔ)性能的基于共享內(nèi)存的鍵值對(duì)存儲(chǔ)方法及系統(tǒng)。
[0006]本發(fā)明解決上述技術(shù)問(wèn)題的技術(shù)方案如下:一種基于共享內(nèi)存的鍵值對(duì)存儲(chǔ)方法,包括以下步驟:
[0007]步驟1:在共享內(nèi)存中創(chuàng)建內(nèi)存索引單元和內(nèi)存數(shù)據(jù)塊單元,所述內(nèi)存索引單元用于存儲(chǔ)key在內(nèi)存數(shù)據(jù)塊單元中相對(duì)數(shù)據(jù)存儲(chǔ)區(qū)域首地址的偏移量,所述內(nèi)存數(shù)據(jù)塊單元用于存儲(chǔ)value ;
[0008]步驟2:采用散列算法計(jì)算value的哈希值;
[0009]步驟3:將哈希值作為key在內(nèi)存索引單元中的相對(duì)數(shù)據(jù)存儲(chǔ)區(qū)域首地址的偏移量;
[0010]步驟4:若偏移量為零,將value存儲(chǔ)于內(nèi)存數(shù)據(jù)塊單元的起始位置,若偏移量大于零,執(zhí)行步驟5;
[0011]步驟5:比較與偏移量對(duì)應(yīng)的內(nèi)存數(shù)據(jù)塊單元中的存儲(chǔ)位置處已有的value與待存儲(chǔ)的value的長(zhǎng)度,根據(jù)比較結(jié)果,將待存儲(chǔ)的value存儲(chǔ)在內(nèi)存數(shù)據(jù)塊單元中。
[0012]本發(fā)明的有益效果是:采用散列算法確定數(shù)據(jù)存儲(chǔ)地址,并且數(shù)據(jù)的存儲(chǔ)通過(guò)靜態(tài)共享內(nèi)存實(shí)現(xiàn),無(wú)需動(dòng)態(tài)分配,極大程度的提高了共享內(nèi)存的存儲(chǔ)性能。
[0013]在上述技術(shù)方案的基礎(chǔ)上,本發(fā)明還可以做如下改進(jìn)。[0014]進(jìn)一步,比較與偏移量對(duì)應(yīng)的內(nèi)存數(shù)據(jù)塊單元中的存儲(chǔ)位置處已存儲(chǔ)的value的長(zhǎng)度是否大于待存儲(chǔ)的value,如若已存儲(chǔ)的value的長(zhǎng)度大于或等于待存儲(chǔ)的value,將待存儲(chǔ)的value覆蓋已存儲(chǔ)的value,否則,將待存儲(chǔ)的value存儲(chǔ)于內(nèi)存數(shù)據(jù)塊單元中數(shù)據(jù)存儲(chǔ)區(qū)域的末尾。
[0015]進(jìn)一步,所述value在內(nèi)存數(shù)據(jù)塊單元中的存儲(chǔ)位置為內(nèi)存數(shù)據(jù)塊單元中數(shù)據(jù)存儲(chǔ)區(qū)域的首地址加上偏移量。
[0016]進(jìn)一步,一種基于共享內(nèi)存的鍵值對(duì)存儲(chǔ)裝置,包括創(chuàng)建存儲(chǔ)單元模塊,計(jì)算哈希模塊,偏移量模塊,判斷模塊和比較存儲(chǔ)模塊;
[0017]所述創(chuàng)建存儲(chǔ)單元模塊,用于在共享內(nèi)存中創(chuàng)建內(nèi)存索引單元和內(nèi)存數(shù)據(jù)塊單元,所述內(nèi)存索引單元用于存儲(chǔ)key在內(nèi)存數(shù)據(jù)塊單元中相對(duì)數(shù)據(jù)存儲(chǔ)區(qū)域首地址的偏移量,所述內(nèi)存數(shù)據(jù)塊單元用于存儲(chǔ)value,將內(nèi)存索引單元信息的信息和內(nèi)存數(shù)據(jù)塊單元的信息發(fā)送給比較存儲(chǔ)模塊;
[0018]所述計(jì)算哈希模塊,用于采用散列算法計(jì)算value的哈希值,將哈希值發(fā)送給偏移量模塊;
[0019]所述偏移量模塊,用于接收哈希值,將哈希值作為key在內(nèi)存索引單元中的相對(duì)數(shù)據(jù)存儲(chǔ)區(qū)域首地址的偏移量,將偏移量發(fā)送給判斷模塊;
[0020]所述判斷模塊,用于接收偏移量,若偏移量為零,將value存儲(chǔ)于內(nèi)存數(shù)據(jù)塊單元的起始位置,若偏移量大于零,執(zhí)行比較存儲(chǔ)模塊;
[0021]所述比較存儲(chǔ)模塊,用于接收內(nèi)存索引單元信息的信息和內(nèi)存數(shù)據(jù)塊單元的信息,比較與偏移量對(duì)應(yīng)的內(nèi)存數(shù)據(jù)塊單元中的存儲(chǔ)位置處已有的value與待存儲(chǔ)的value的長(zhǎng)度,根據(jù)比較結(jié)果,將待存儲(chǔ)的value存儲(chǔ)在內(nèi)存數(shù)據(jù)塊單元中。
[0022]采用上述進(jìn)一步方案的有益效果是采用散列算法確定數(shù)據(jù)存儲(chǔ)地址,并且數(shù)據(jù)的存儲(chǔ)通過(guò)靜態(tài)共享內(nèi)存實(shí)現(xiàn),無(wú)需動(dòng)態(tài)分配,極大程度的提高了共享內(nèi)存的存儲(chǔ)性能。
[0023]進(jìn)一步,比較與偏移量對(duì)應(yīng)的內(nèi)存數(shù)據(jù)塊單元中的存儲(chǔ)位置處已存儲(chǔ)的value的長(zhǎng)度是否大于待存儲(chǔ)的value,如若已存儲(chǔ)的value的長(zhǎng)度大于或等于待存儲(chǔ)的value,將待存儲(chǔ)的value覆蓋已存儲(chǔ)的value,否則,將待存儲(chǔ)的value存儲(chǔ)于內(nèi)存數(shù)據(jù)塊單元中數(shù)據(jù)存儲(chǔ)區(qū)域的末尾。
[0024]進(jìn)一步,所述value在內(nèi)存數(shù)據(jù)塊單元中的存儲(chǔ)位置為內(nèi)存數(shù)據(jù)塊單元中數(shù)據(jù)存儲(chǔ)區(qū)域的首地址加上偏移量。
【專利附圖】
【附圖說(shuō)明】
[0025]圖1為本發(fā)明方法步驟流程圖;
[0026]圖2為本發(fā)明裝置結(jié)構(gòu)圖。
[0027]附圖中,各標(biāo)號(hào)所代表的部件列表如下:
[0028]1、創(chuàng)建存儲(chǔ)單元模塊,2、計(jì)算哈希模塊,3、偏移量模塊,4、判斷模塊,5、比較存儲(chǔ)模塊。
【具體實(shí)施方式】
[0029]以下結(jié)合附圖對(duì)本發(fā)明的原理和特征進(jìn)行描述,所舉實(shí)例只用于解釋本發(fā)明,并非用于限定本發(fā)明的范圍。
[0030]如圖1所示,為本發(fā)明方法步驟流程圖;圖2為本發(fā)明裝置結(jié)構(gòu)圖。
[0031]實(shí)施例1
[0032]一種基于共享內(nèi)存的鍵值對(duì)存儲(chǔ)方法,包括以下步驟:
[0033]步驟1:在共享內(nèi)存中創(chuàng)建內(nèi)存索引單元和內(nèi)存數(shù)據(jù)塊單元,所述內(nèi)存索引單元用于存儲(chǔ)key在內(nèi)存數(shù)據(jù)塊單元中相對(duì)數(shù)據(jù)存儲(chǔ)區(qū)域首地址的偏移量,所述內(nèi)存數(shù)據(jù)塊單元用于存儲(chǔ)value ;
[0034]步驟2:采用散列算法計(jì)算value的哈希值;
[0035]步驟3:將哈希值作為key在內(nèi)存索引單元中的相對(duì)數(shù)據(jù)存儲(chǔ)區(qū)域首地址的偏移量;
[0036]步驟4:若偏移量為零,將value存儲(chǔ)于內(nèi)存數(shù)據(jù)塊單元的起始位置,若偏移量大于零,執(zhí)行步驟5;
[0037]步驟5:比較與偏移量對(duì)應(yīng)的內(nèi)存數(shù)據(jù)塊單元中的存儲(chǔ)位置處已有的value與待存儲(chǔ)的value的長(zhǎng)度,根據(jù)比較結(jié)果,將待存儲(chǔ)的value存儲(chǔ)在內(nèi)存數(shù)據(jù)塊單元中。
[0038]所述步驟5具體為:比較與偏移量對(duì)應(yīng)的內(nèi)存數(shù)據(jù)塊單元中的存儲(chǔ)位置處已存儲(chǔ)的value的長(zhǎng)度是否大于待存儲(chǔ)的value,如若已存儲(chǔ)的value的長(zhǎng)度大于或等于待存儲(chǔ)的value,將待存儲(chǔ)的value覆蓋已存儲(chǔ)的value,否則,將待存儲(chǔ)的value存儲(chǔ)于內(nèi)存數(shù)據(jù)塊單元中數(shù)據(jù)存儲(chǔ)區(qū)域的末尾。
[0039]所述value在內(nèi)存數(shù)據(jù)塊單元中的存儲(chǔ)位置為內(nèi)存數(shù)據(jù)塊單元中數(shù)據(jù)存儲(chǔ)區(qū)域的首地址加上偏移量。
[0040]一種基于共享內(nèi)存的鍵值對(duì)存儲(chǔ)裝置,包括創(chuàng)建存儲(chǔ)單元模塊I,計(jì)算哈希模塊2,偏移量模塊3,判斷模塊4和比較存儲(chǔ)模塊5 ;
[0041]所述創(chuàng)建存儲(chǔ)單元模塊1,用于在共享內(nèi)存中創(chuàng)建內(nèi)存索引單元和內(nèi)存數(shù)據(jù)塊單元,所述內(nèi)存索引單元用于存儲(chǔ)key在內(nèi)存數(shù)據(jù)塊單元中相對(duì)數(shù)據(jù)存儲(chǔ)區(qū)域首地址的偏移量,所述內(nèi)存數(shù)據(jù)塊單元用于存儲(chǔ)value,將內(nèi)存索引單元信息的信息和內(nèi)存數(shù)據(jù)塊單元的信息發(fā)送給比較存儲(chǔ)模塊5 ;
[0042]所述計(jì)算哈希模塊2,用于采用散列算法計(jì)算value的哈希值,將哈希值發(fā)送給偏移量模塊3 ;
[0043]所述偏移量模塊3,用于接收哈希值,將哈希值作為key在內(nèi)存索引單元中的相對(duì)數(shù)據(jù)存儲(chǔ)區(qū)域首地址的偏移量,將偏移量發(fā)送給判斷模塊4 ;
[0044]所述判斷模塊4,用于接收偏移量,若偏移量為零,將value存儲(chǔ)于內(nèi)存數(shù)據(jù)塊單元的起始位置,若偏移量大于零,執(zhí)行比較存儲(chǔ)模塊5 ;
[0045]所述比較存儲(chǔ)模塊5,用于接收內(nèi)存索引單元信息的信息和內(nèi)存數(shù)據(jù)塊單元的信息,比較與偏移量對(duì)應(yīng)的內(nèi)存數(shù)據(jù)塊單元中的存儲(chǔ)位置處已有的value與待存儲(chǔ)的value的長(zhǎng)度,根據(jù)比較結(jié)果,將待存儲(chǔ)的value存儲(chǔ)在內(nèi)存數(shù)據(jù)塊單元中。
[0046]比較與偏移量對(duì)應(yīng)的內(nèi)存數(shù)據(jù)塊單元中的存儲(chǔ)位置處已存儲(chǔ)的value的長(zhǎng)度是否大于待存儲(chǔ)的value,如若已存儲(chǔ)的value的長(zhǎng)度大于或等于待存儲(chǔ)的value,將待存儲(chǔ)的value覆蓋已存儲(chǔ)的value,否則,將待存儲(chǔ)的value存儲(chǔ)于內(nèi)存數(shù)據(jù)塊單元中數(shù)據(jù)存儲(chǔ)區(qū)域的末尾。[0047]所述value在內(nèi)存數(shù)據(jù)塊單元中的存儲(chǔ)位置為內(nèi)存數(shù)據(jù)塊單元中數(shù)據(jù)存儲(chǔ)區(qū)域的首地址加上偏移量。
[0048]本發(fā)明采用共享內(nèi)存作為存儲(chǔ),利用共享內(nèi)存首地址的相對(duì)偏移量作為鍵值對(duì)的
存儲(chǔ)地址。整個(gè)存儲(chǔ)分兩部分:內(nèi)存索引結(jié)構(gòu)和內(nèi)存數(shù)據(jù)塊結(jié)構(gòu),具體定義如下:
[0049]
【權(quán)利要求】
1.一種基于共享內(nèi)存的鍵值對(duì)存儲(chǔ)方法,其特征在于,包括以下步驟: 步驟1:在共享內(nèi)存中創(chuàng)建內(nèi)存索引單元和內(nèi)存數(shù)據(jù)塊單元,所述內(nèi)存索引單元用于存儲(chǔ)key在內(nèi)存數(shù)據(jù)塊單元中相對(duì)數(shù)據(jù)存儲(chǔ)區(qū)域首地址的偏移量,所述內(nèi)存數(shù)據(jù)塊單元用于存儲(chǔ)value ; 步驟2:采用散列算法計(jì)算value的哈希值; 步驟3:將哈希值作為key在內(nèi)存索引單元中的相對(duì)數(shù)據(jù)存儲(chǔ)區(qū)域首地址的偏移量; 步驟4:若偏移量為零,將value存儲(chǔ)于內(nèi)存數(shù)據(jù)塊單元的起始位置,若偏移量大于零,執(zhí)行步驟5 ; 步驟5:比較與偏移量對(duì)應(yīng)的內(nèi)存數(shù)據(jù)塊單元中的存儲(chǔ)位置處已有的value與待存儲(chǔ)的value的長(zhǎng)度,根據(jù)比較結(jié)果,將待存儲(chǔ)的value存儲(chǔ)在內(nèi)存數(shù)據(jù)塊單元中。
2.根據(jù)權(quán)利要求1所述的鍵值對(duì)存儲(chǔ)方法,其特征在于:所述步驟5具體為:比較與偏移量對(duì)應(yīng)的內(nèi)存數(shù)據(jù)塊單元中的存儲(chǔ)位置處已存儲(chǔ)的value的長(zhǎng)度是否大于待存儲(chǔ)的value,如若已存儲(chǔ)的value的長(zhǎng)度大于或等于待存儲(chǔ)的value,將待存儲(chǔ)的value覆蓋已存儲(chǔ)的value,否則,將待存儲(chǔ)的value存儲(chǔ)于內(nèi)存數(shù)據(jù)塊單元中數(shù)據(jù)存儲(chǔ)區(qū)域的末尾。
3.根據(jù)權(quán)利要求1所述的鍵值對(duì)存儲(chǔ)方法,其特征在于:所述value在內(nèi)存數(shù)據(jù)塊單元中的存儲(chǔ)位置為內(nèi)存數(shù)據(jù)塊單元中數(shù)據(jù)存儲(chǔ)區(qū)域的首地址加上偏移量。
4.一種基于共享內(nèi)存的鍵值對(duì)存儲(chǔ)裝置,其特征在于:包括創(chuàng)建存儲(chǔ)單元模塊(1),計(jì)算哈希模塊(2),偏移量模塊(3),判斷模塊(4)和比較存儲(chǔ)模塊(5); 所述創(chuàng)建存儲(chǔ)單元模塊(1),用于在共享內(nèi)存中創(chuàng)建內(nèi)存索引單元和內(nèi)存數(shù)據(jù)塊單元,所述內(nèi)存索引單元用于存儲(chǔ)key在內(nèi)存數(shù)據(jù)塊單元中相對(duì)數(shù)據(jù)存儲(chǔ)區(qū)域首地址的偏移量,所述內(nèi)存數(shù)據(jù)塊單元用于存儲(chǔ)value,將內(nèi)存索引單元信息的信息和內(nèi)存數(shù)據(jù)塊單元的信息發(fā)送給比較存儲(chǔ)模塊(5); 所述計(jì)算哈希模塊(2),用于采用散列算法計(jì)算value的哈希值,將哈希值發(fā)送給偏移量模塊(3); 所述偏移量模塊(3),用于接收哈希值,將哈希值作為key在內(nèi)存索引單元中的相對(duì)數(shù)據(jù)存儲(chǔ)區(qū)域首地址的偏移量,將偏移量發(fā)送給判斷模塊(4); 所述判斷模塊(4),用于接收偏移量,若偏移量為零,將value存儲(chǔ)于內(nèi)存數(shù)據(jù)塊單元的起始位置,若偏移量大于零,執(zhí)行比較存儲(chǔ)模塊(5); 所述比較存儲(chǔ)模塊(5),用于接收內(nèi)存索引單元信息的信息和內(nèi)存數(shù)據(jù)塊單元的信息,比較與偏移量對(duì)應(yīng)的內(nèi)存數(shù)據(jù)塊單元中的存儲(chǔ)位置處已有的value與待存儲(chǔ)的value的長(zhǎng)度,根據(jù)比較結(jié)果,將待存儲(chǔ)的value存儲(chǔ)在內(nèi)存數(shù)據(jù)塊單元中。
5.根據(jù)權(quán)利要求4所述的鍵值對(duì)存儲(chǔ)裝置,其特征在于:所述比較存儲(chǔ)模塊(5)具體用于:比較與偏移量對(duì)應(yīng)的內(nèi)存數(shù)據(jù)塊單元中的存儲(chǔ)位置處已存儲(chǔ)的value的長(zhǎng)度是否大于待存儲(chǔ)的value,如若已存儲(chǔ)的value的長(zhǎng)度大于或等于待存儲(chǔ)的value,將待存儲(chǔ)的value覆蓋已存儲(chǔ)的value,否則,將待存儲(chǔ)的value存儲(chǔ)于內(nèi)存數(shù)據(jù)塊單元中數(shù)據(jù)存儲(chǔ)區(qū)域的末尾。
6.根據(jù)權(quán)利要求4所述的鍵值對(duì)存儲(chǔ)裝置,其特征在于:所述value在內(nèi)存數(shù)據(jù)塊單元中的存儲(chǔ)位置為內(nèi)存數(shù)據(jù)塊單元中數(shù)據(jù)存儲(chǔ)區(qū)域的首地址加上偏移量。
【文檔編號(hào)】G06F17/30GK103473314SQ201310412659
【公開(kāi)日】2013年12月25日 申請(qǐng)日期:2013年9月11日 優(yōu)先權(quán)日:2013年9月11日
【發(fā)明者】閆永濤 申請(qǐng)人:北京思特奇信息技術(shù)股份有限公司