一種緩存數(shù)據(jù)的存儲方法及系統(tǒng)及讀取方法【專利摘要】本發(fā)明涉及一種緩存數(shù)據(jù)的存儲方法及系統(tǒng)及讀取方法,其存儲方法,包括以下步驟:步驟1:創(chuàng)建用于存放數(shù)據(jù)塊的緩存庫;步驟2:在緩存庫內(nèi)創(chuàng)建多個緩存表,所述緩存表以數(shù)據(jù)塊形式存儲在緩存庫中;步驟3:為緩存表建立索引表,將索引表存入緩存庫;步驟4:定義每個緩存表中的數(shù)據(jù)記錄的個數(shù)和每個緩存表中存儲數(shù)據(jù)類型;步驟5:接收數(shù)據(jù),將數(shù)據(jù)中每個字段的內(nèi)容按照數(shù)據(jù)類型寫入數(shù)據(jù)記錄,依次將數(shù)據(jù)記錄寫入緩存表;步驟6:將數(shù)據(jù)記錄進行壓縮得到壓縮文件,并將壓縮文件存入緩存表,結(jié)束。在寫入后還采用壓縮技術(shù)對內(nèi)存塊進行壓縮,減少內(nèi)存占用的空間,也便于在網(wǎng)絡(luò)上傳輸?!緦@f明】一種緩存數(shù)據(jù)的存儲方法及系統(tǒng)及讀取方法【
技術(shù)領(lǐng)域:
】[0001]本發(fā)明涉及一種緩存數(shù)據(jù)的存儲方法及系統(tǒng)及讀取方法,屬于通信【
技術(shù)領(lǐng)域:
】?!?br>背景技術(shù):
】[0002]Ehcache本身含有緩存數(shù)據(jù)組織方式,為KEY-VALUE方式,不支持類似關(guān)系數(shù)據(jù)庫方式的存儲,不支持樹形的數(shù)據(jù)結(jié)構(gòu)存儲方式。本方法提供一種新的內(nèi)存內(nèi)數(shù)據(jù)組織方式,采用樹形,類關(guān)系數(shù)據(jù)庫方式的結(jié)構(gòu)存儲內(nèi)存數(shù)據(jù),便于內(nèi)存數(shù)據(jù)的組織和篩選等操作。[0003]Ehcache:Java緩存框架EhCacheEhCache是一個純Java的進程內(nèi)緩存框架,具有快速、精干等特點。[0004]KEY-VALUE:key-Value分布式存儲系統(tǒng)查詢速度快、存放數(shù)據(jù)量大、支持高并發(fā),非常適合通過主鍵進行查詢,但不能進行復(fù)雜的條件查詢?!?br/>發(fā)明內(nèi)容】[0005]本發(fā)明所要解決的技術(shù)問題是提供一種可以存儲復(fù)雜的數(shù)據(jù)結(jié)構(gòu)的緩存數(shù)據(jù)存儲方法。[0006]本發(fā)明解決上述技術(shù)問題的技術(shù)方案如下:一種緩存數(shù)據(jù)的存儲方法,具體包括以下步驟:[0007]步驟1:創(chuàng)建用于存放數(shù)據(jù)塊的緩存庫;[0008]步驟2:在緩存庫內(nèi)創(chuàng)建多個緩存表,所述緩存表以數(shù)據(jù)塊形式存儲在緩存庫中;[0009]步驟3:為緩存表建立索引表,將索引表存入緩存庫;[0010]步驟4:定義每個緩存表中的數(shù)據(jù)記錄的個數(shù)和每個緩存表中存儲數(shù)據(jù)類型;[0011]步驟5:接收數(shù)據(jù),將數(shù)據(jù)中每個字段的內(nèi)容按照數(shù)據(jù)類型寫入數(shù)據(jù)記錄,依次將數(shù)據(jù)記錄寫入緩存表;[0012]步驟6:將數(shù)據(jù)記錄進行壓縮得到壓縮文件,并將壓縮文件存入緩存表,結(jié)束。[0013]本發(fā)明的有益效果是:本發(fā)明實現(xiàn)緩存寫入采用類似關(guān)系數(shù)據(jù)庫的數(shù)據(jù)存儲結(jié)構(gòu),并在分配內(nèi)存時候采用動態(tài)分配的方式,減少了內(nèi)存浪費和內(nèi)存碎塊的產(chǎn)生。同時,在寫入后還采用壓縮技術(shù)對內(nèi)存塊進行壓縮,減少內(nèi)存占用的空間,也便于在網(wǎng)絡(luò)上傳輸。[0014]在上述技術(shù)方案的基礎(chǔ)上,本發(fā)明還可以做如下改進。[0015]進一步,所述數(shù)據(jù)類型包括String、Int、Char、Long、Float和Clob等數(shù)據(jù)類型。[0016]進一步,所述緩存表在緩存庫中采用動態(tài)分配內(nèi)存的方式存在。[0017]本發(fā)明所要解決的技術(shù)問題是提供一種可以存儲復(fù)雜的數(shù)據(jù)結(jié)構(gòu)的緩存數(shù)據(jù)存儲系統(tǒng)。[0018]本發(fā)明解決上述技術(shù)問題的技術(shù)方案如下:一種緩存數(shù)據(jù)的存儲系統(tǒng),包括緩存庫創(chuàng)建模塊、緩存表創(chuàng)建模塊、索引模塊、定義模塊、接收模塊和壓縮存儲模塊;[0019]所述緩存庫創(chuàng)建模塊創(chuàng)建用于存放數(shù)據(jù)塊的緩存庫;[0020]所述緩存表創(chuàng)建模塊在緩存庫內(nèi)創(chuàng)建多個緩存表,所述緩存表以數(shù)據(jù)塊形式存儲在緩存庫中;[0021]所述索引模塊為緩存表建立索引表,將索引表存入緩存庫;[0022]所述定義模塊用于定義每個緩存表中的數(shù)據(jù)記錄的個數(shù)和每個緩存表中存儲數(shù)據(jù)類型;[0023]所述接收模塊用于接收數(shù)據(jù),將數(shù)據(jù)中每個字段的內(nèi)容按照數(shù)據(jù)類型寫入數(shù)據(jù)記錄,依次將數(shù)據(jù)記錄寫入緩存表;[0024]所述壓縮存儲模塊用于將數(shù)據(jù)記錄進行壓縮得到壓縮文件,并將壓縮文件存入緩存表。[0025]本發(fā)明的有益效果是:本發(fā)明實現(xiàn)緩存寫入采用類似關(guān)系數(shù)據(jù)庫的數(shù)據(jù)存儲結(jié)構(gòu),并在分配內(nèi)存時候采用動態(tài)分配的方式,減少了內(nèi)存浪費和內(nèi)存碎塊的產(chǎn)生。同時,在寫入后還采用壓縮技術(shù)對內(nèi)存塊進行壓縮,減少內(nèi)存占用的空間,也便于在網(wǎng)絡(luò)上傳輸。[0026]在上述技術(shù)方案的基礎(chǔ)上,本發(fā)明還可以做如下改進。[0027]進一步,所述數(shù)據(jù)類型包括String、Int、Char、Long、Float和Clob等數(shù)據(jù)類型。[0028]進一步,所述緩存表在緩存庫中采用動態(tài)分配內(nèi)存的方式存在。[0029]本發(fā)明解決上述技術(shù)問題的技術(shù)方案如下:一種緩存數(shù)據(jù)的讀取方法,具體包括以下步驟:[0030]步驟1:加載緩存庫;[0031]步驟2:讀取緩存庫中的索引表;[0032]步驟3:根據(jù)索引表得到對應(yīng)的緩存表;[0033]步驟4:從緩存表中得到壓縮文件;[0034]步驟5:對壓縮文件進行解壓得到數(shù)據(jù)記錄和數(shù)據(jù)類型;[0035]步驟6:將數(shù)據(jù)記錄按照數(shù)據(jù)類型進行解析,得到數(shù)據(jù)和數(shù)據(jù)中每個字段的內(nèi)容。【專利附圖】【附圖說明】[0036]圖1為本發(fā)明所述的一種緩存數(shù)據(jù)的存儲方法流程圖;[0037]圖2為本發(fā)明所述的一種緩存數(shù)據(jù)的存儲系統(tǒng)結(jié)構(gòu)框圖;[0038]圖3為本發(fā)明所述的一種緩存數(shù)據(jù)的讀取方法流程圖。[0039]附圖中,各標號所代表的部件列表如下:[0040]1、緩存庫創(chuàng)建模塊,2、緩存表創(chuàng)建模塊,3、索引模塊,4、定義模塊,5、接收模塊,6、壓縮存儲模塊。【具體實施方式】[0041]以下結(jié)合附圖對本發(fā)明的原理和特征進行描述,所舉實例只用于解釋本發(fā)明,并非用于限定本發(fā)明的范圍。[0042]如圖1所示,本發(fā)明所述的一種緩存數(shù)據(jù)的存儲方法,具體包括以下步驟:[0043]步驟1:創(chuàng)建用于存放數(shù)據(jù)塊的緩存庫;[0044]步驟2:在緩存庫內(nèi)創(chuàng)建多個緩存表,所述緩存表以數(shù)據(jù)塊形式存儲在緩存庫中;[0045]步驟3:為緩存表建立索引表,將索引表存入緩存庫;[0046]步驟4:定義每個緩存表中的數(shù)據(jù)記錄的個數(shù)和每個緩存表中存儲數(shù)據(jù)類型;[0047]步驟5:接收數(shù)據(jù),將數(shù)據(jù)中每個字段的內(nèi)容按照數(shù)據(jù)類型寫入數(shù)據(jù)記錄,依次將數(shù)據(jù)記錄寫入緩存表;[0048]步驟6:將數(shù)據(jù)記錄進行壓縮得到壓縮文件,并將壓縮文件存入緩存表,結(jié)束。[0049]所述數(shù)據(jù)類型包括String、Int、Char、Long、Float和Clob等數(shù)據(jù)類型。[0050]所述緩存表在緩存庫中采用動態(tài)分配內(nèi)存的方式存在。[0051]如圖2所示,本發(fā)明所述的一種緩存數(shù)據(jù)的存儲系統(tǒng),包括緩存庫創(chuàng)建模塊1、緩存表創(chuàng)建模塊2、索引模塊3、定義模塊4、接收模塊5和壓縮存儲模塊6;[0052]所述緩存庫創(chuàng)建模塊1創(chuàng)建用于存放數(shù)據(jù)塊的緩存庫;[0053]所述緩存表創(chuàng)建模塊2在緩存庫內(nèi)創(chuàng)建多個緩存表,所述緩存表以數(shù)據(jù)塊形式存儲在緩存庫中;[0054]所述索引模塊3為緩存表建立索引表,將索引表存入緩存庫;[0055]所述定義模塊4用于定義每個緩存表中的數(shù)據(jù)記錄的個數(shù)和每個緩存表中存儲數(shù)據(jù)類型;[0056]所述接收模塊5用于接收數(shù)據(jù),將數(shù)據(jù)中每個字段的內(nèi)容按照數(shù)據(jù)類型寫入數(shù)據(jù)記錄,依次將數(shù)據(jù)記錄寫入緩存表;[0057]所述壓縮存儲模塊6用于將數(shù)據(jù)記錄進行壓縮得到壓縮文件,并將壓縮文件存入緩存表。[0058]所述數(shù)據(jù)類型包括String、Int、Char、Long、Float和Clob等數(shù)據(jù)類型。[0059]所述緩存表在緩存庫中采用動態(tài)分配內(nèi)存的方式存在。[0060]如圖3所示,本發(fā)明所述的一種緩存數(shù)據(jù)的讀取方法,具體包括以下步驟:[0061]步驟1:加載緩存庫;[0062]步驟2:讀取緩存庫中的索引表;[0063]步驟3:根據(jù)索引表得到對應(yīng)的緩存表;[0064]步驟4:從緩存表中得到壓縮文件;[0065]步驟5:對壓縮文件進行解壓得到數(shù)據(jù)記錄和數(shù)據(jù)類型;[0066]步驟6:將數(shù)據(jù)記錄按照數(shù)據(jù)類型進行解析,得到數(shù)據(jù)和數(shù)據(jù)中每個字段的內(nèi)容。[0067]采用分層方式把數(shù)據(jù)層分為:庫、表、記錄、基礎(chǔ)數(shù)據(jù)項Item,其中基礎(chǔ)數(shù)據(jù)項有String,Int,Char,Long,Float,Clob等類型?,F(xiàn)在分別對緩存寫入,緩存讀取進行說明。[0068]緩存寫入:[0069]第一步,創(chuàng)建緩存存放庫,用于存放緩存數(shù)據(jù)塊。[0070]第二步,創(chuàng)建緩存表,以數(shù)據(jù)塊方式存在,其中數(shù)據(jù)塊采用動態(tài)分配空間形式,節(jié)省了緩存空間,并減少了內(nèi)存碎塊。[0071]第三步,創(chuàng)建緩存表索引,本方法后續(xù)會自動維護該索引,使內(nèi)存數(shù)據(jù)獲取更加快速。[0072]第四步,定義緩存表的列數(shù),以及每列字段的數(shù)據(jù)類型,這里支持String,Int,Char,Long,F(xiàn)loat,Clob等類型。[0073]第五步,依次按照類型寫入數(shù)據(jù)塊,寫入每個字段內(nèi)容。[0074]第六步,保存內(nèi)存文件為二進制文件,并進行相應(yīng)壓縮。[0075]緩存讀?。篬0076]第一步,創(chuàng)建緩存存放庫,用于存放緩存數(shù)據(jù)塊。[0077]第二步,讀取內(nèi)存文件,進行解壓,獲取到內(nèi)存文件內(nèi)數(shù)據(jù)結(jié)構(gòu)以及數(shù)據(jù)。[0078]第三步,按照數(shù)據(jù)結(jié)構(gòu),解析內(nèi)存塊,解析出數(shù)據(jù),得到每個字段內(nèi)容。[0079]讀取緩存數(shù)據(jù)程序。示例代碼如下:[0080]//加載cacheCacheFaclory.gelCache();"TODO緩存加載Serviceservice=nev\JCFService("LoadCodeService","getAllCode");Booleanret=(Boolean)service.invoke();service=newJCFService("LoadCodeService",[0081]"cache!,);service.seiParam(ret);service,invoke();CodeShareshare=newCodeShare(CodeShare.READ,rei.toString());//加入緩存CodeTablecl=share.readBlock();ct.saveCahce();share,close();[0082]寫入緩存信息,示例代碼如下:[0083]//創(chuàng)建一個共享[0084]CodeShareshare=newCodeShare(CodeShare.WRITE,irue);try{StringblockName=nul1;intblocklndex=0;Map<String,Object〉map=newHashMap<String,Object〉();LisKMap<String,Siring>>obj=codeValueDao.queryLisi(map);Map<Siring,Siring>m=null;for(int1=0;i<obj.size();i++){[0085]m=obj.gel(i);StringcodeId=m.get("codeld");Stringcode¥alueId=m.get("codeValue");StringcodeValueNarne=m.get("codeValueName");StringlableName=CacheDaLaConfig.ΚΕΥΜΛΡ.get(codeld);iΓ(tab1eName=nu11)continue;if(!tableName.equals(blockName)){//創(chuàng)建blockblockName=tableName;blockIndex=share.writeBlock(tableName,newSiring[]{"code","name"newint[]{CodeTable.ATTR_STRTNG,CodeTable.ATTR.STRING},null);}//寫入一條sharewrileHead(blockIndex,2);share.wriIcSlring(codcVa1ucld);[0086]share,wrileSlring(codeVa1ueName);}1oadSpecia1(share);share.c1ose〇;}catch(···){//如果加載出現(xiàn)異常,加載最后一次備份的數(shù)據(jù)log.info("碼表力口載異常,使用最后一次備份");e.printSlackTrace();resu1i=fa1se;share,close();}[0087]以上所述僅為本發(fā)明的較佳實施例,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改進等,均應(yīng)包含在本發(fā)明的保護范圍之內(nèi)?!緳?quán)利要求】1.一種緩存數(shù)據(jù)的存儲方法,其特征在于,具體包括以下步驟:步驟1:創(chuàng)建用于存放數(shù)據(jù)塊的緩存庫;步驟2:在緩存庫內(nèi)創(chuàng)建多個緩存表,所述緩存表以數(shù)據(jù)塊形式存儲在緩存庫中;步驟3:為緩存表建立索引表,將索引表存入緩存庫;步驟4:定義每個緩存表中的數(shù)據(jù)記錄的個數(shù)和每個緩存表中存儲數(shù)據(jù)類型;步驟5:接收數(shù)據(jù),將數(shù)據(jù)中每個字段的內(nèi)容按照數(shù)據(jù)類型寫入數(shù)據(jù)記錄,依次將數(shù)據(jù)記錄寫入緩存表;步驟6:將數(shù)據(jù)記錄進行壓縮得到壓縮文件,并將壓縮文件存入緩存表,結(jié)束。2.根據(jù)權(quán)利要求1所述的一種緩存數(shù)據(jù)的存儲方法,其特征在于,所述數(shù)據(jù)類型包括String、Int、Char、Long、Float和Clob等數(shù)據(jù)類型。3.根據(jù)權(quán)利要求1或2所述的一種緩存數(shù)據(jù)的存儲方法,其特征在于,所述緩存表在緩存庫中采用動態(tài)分配內(nèi)存的方式存在。4.一種緩存數(shù)據(jù)的存儲系統(tǒng),其特征在于,包括緩存庫創(chuàng)建模塊、緩存表創(chuàng)建模塊、索引模塊、定義模塊、接收模塊和壓縮存儲模塊;所述緩存庫創(chuàng)建模塊創(chuàng)建用于存放數(shù)據(jù)塊的緩存庫;所述緩存表創(chuàng)建模塊在緩存庫內(nèi)創(chuàng)建多個緩存表,所述緩存表以數(shù)據(jù)塊形式存儲在緩存庫中;所述索引模塊為緩存表建立索引表,將索引表存入緩存庫;所述定義模塊用于定義每個緩存表中的數(shù)據(jù)記錄的個數(shù)和每個緩存表中存儲數(shù)據(jù)類型;所述接收模塊用于接收數(shù)據(jù),將數(shù)據(jù)中每個字段的內(nèi)容按照數(shù)據(jù)類型寫入數(shù)據(jù)記錄,依次將數(shù)據(jù)記錄寫入緩存表;所述壓縮存儲模塊用于將數(shù)據(jù)記錄進行壓縮得到壓縮文件,并將壓縮文件存入緩存表。5.根據(jù)權(quán)利要求4所述的一種緩存數(shù)據(jù)的存儲系統(tǒng),其特征在于,所述數(shù)據(jù)類型包括String、Int、Char、Long、Float和Clob等數(shù)據(jù)類型。6.根據(jù)權(quán)利要求4或5所述的一種緩存數(shù)據(jù)的存儲系統(tǒng),其特征在于,所述緩存表在緩存庫中采用動態(tài)分配內(nèi)存的方式存在。7.-種緩存數(shù)據(jù)的讀取方法,其特征在于,具體包括以下步驟:步驟1:加載緩存庫;步驟2:讀取緩存庫中的索引表;步驟3:根據(jù)索引表得到對應(yīng)的緩存表;步驟4:從緩存表中得到壓縮文件;步驟5:對壓縮文件進行解壓得到數(shù)據(jù)記錄和數(shù)據(jù)類型;步驟6:將數(shù)據(jù)記錄按照數(shù)據(jù)類型進行解析,得到數(shù)據(jù)和數(shù)據(jù)中每個字段的內(nèi)容?!疚臋n編號】G06F12/08GK104111899SQ201410314744【公開日】2014年10月22日申請日期:2014年7月3日優(yōu)先權(quán)日:2014年7月3日【發(fā)明者】李靜申請人:北京思特奇信息技術(shù)股份有限公司