亚洲狠狠干,亚洲国产福利精品一区二区,国产八区,激情文学亚洲色图

基于文件存儲(chǔ)數(shù)據(jù)的存儲(chǔ)方法及裝置制造方法

文檔序號(hào):6514030閱讀:239來(lái)源:國(guó)知局
基于文件存儲(chǔ)數(shù)據(jù)的存儲(chǔ)方法及裝置制造方法
【專(zhuān)利摘要】本發(fā)明涉及數(shù)據(jù)存儲(chǔ)領(lǐng)域,尤其涉及基于文件存儲(chǔ)數(shù)據(jù)的存儲(chǔ)方法及裝置。該方法包括:在操作系統(tǒng)中創(chuàng)建存儲(chǔ)文件和輔助文件,其中,所述存儲(chǔ)文件包括數(shù)據(jù)文件和索引文件,所述輔助文件包括空字節(jié)填充數(shù)組和空閑索引列表;接收待存儲(chǔ)的數(shù)據(jù)記錄;根據(jù)所述輔助文件將所述數(shù)據(jù)記錄以固定長(zhǎng)度的字節(jié)形式存儲(chǔ)到所述數(shù)據(jù)文件;分別生成每一個(gè)所述數(shù)據(jù)記錄的索引記錄,并將所述索引記錄存儲(chǔ)到所述索引文件,其中,所述索引記錄具有固定長(zhǎng)度。通過(guò)本發(fā)明,可以進(jìn)行高并發(fā)及高效讀寫(xiě)充分利用存儲(chǔ),避免過(guò)多編程,并有很廣泛的使用范圍。
【專(zhuān)利說(shuō)明】基于文件存儲(chǔ)數(shù)據(jù)的存儲(chǔ)方法及裝置
【技術(shù)領(lǐng)域】
[0001 ] 本發(fā)明涉及數(shù)據(jù)存儲(chǔ)領(lǐng)域,尤其涉及基于文件存儲(chǔ)數(shù)據(jù)的存儲(chǔ)方法及裝置。
【背景技術(shù)】
[0002]伴隨著計(jì)算機(jī)信息技術(shù)日益成熟和企業(yè)信息化建設(shè)的發(fā)展,動(dòng)態(tài)數(shù)據(jù)的存儲(chǔ)在企業(yè)信息化中具有十分重要的作用。
[0003]目前,在數(shù)據(jù)交換系統(tǒng)中,或者在信息系統(tǒng)中常用的動(dòng)態(tài)數(shù)據(jù)存儲(chǔ)基于關(guān)系型數(shù)據(jù)庫(kù)。基于關(guān)系型數(shù)據(jù)庫(kù)的數(shù)據(jù)存儲(chǔ)方法包括:獲得需要存儲(chǔ)的數(shù)據(jù)記錄;將所述數(shù)據(jù)記錄按行存儲(chǔ)、按定長(zhǎng)大小數(shù)據(jù)存儲(chǔ)或者按系列化對(duì)象存儲(chǔ)在關(guān)系型數(shù)據(jù)庫(kù)的數(shù)據(jù)表中,并對(duì)數(shù)據(jù)庫(kù)表中的單列或多列創(chuàng)建索引記錄,形成索引列表,以便處理所述數(shù)據(jù)文件的數(shù)據(jù)記錄。
[0004]然而,基于關(guān)系型數(shù)據(jù)庫(kù)的數(shù)據(jù)存儲(chǔ)方法存在著如下的不足:數(shù)據(jù)庫(kù)的中間件授權(quán)價(jià)格昂貴并且還需要額外的編程,造成實(shí)施成本及維護(hù)成本較高;針對(duì)整個(gè)數(shù)據(jù)表構(gòu)建的索引記錄導(dǎo)致在數(shù)據(jù)存儲(chǔ)過(guò)程中效率較低。

【發(fā)明內(nèi)容】

[0005]有鑒于此,本發(fā)明實(shí)施例提供基于文件存儲(chǔ)數(shù)據(jù)的存儲(chǔ)方法及裝置,來(lái)降低實(shí)施成本及維護(hù)成本。
[0006]一方面,本發(fā)明實(shí)施例提供了基于文件存儲(chǔ)數(shù)據(jù)的存儲(chǔ)方法,所述方法包括:
[0007]在操作系統(tǒng)中創(chuàng)建存儲(chǔ)文件和輔助文件,其中,所述存儲(chǔ)文件包括數(shù)據(jù)文件和索引文件,所述輔助文件包括空字節(jié)填充數(shù)組和空閑索引列表;
[0008]接收待存儲(chǔ)的數(shù)據(jù)記錄;
[0009]根據(jù)所述輔助文件將所述數(shù)據(jù)記錄以固定長(zhǎng)度的字節(jié)形式存儲(chǔ)到所述數(shù)據(jù)文件;
[0010]分別生成每一個(gè)所述數(shù)據(jù)記錄的索引記錄,并將所述索引記錄存儲(chǔ)到所述索引文件,其中,所述索引記錄具有固定長(zhǎng)度。
[0011]進(jìn)一步的,所述在操作系統(tǒng)中創(chuàng)建存儲(chǔ)文件和輔助文件包括:
[0012]接收所述數(shù)據(jù)文件的名稱(chēng)和所述數(shù)據(jù)文件的存儲(chǔ)單元的長(zhǎng)度;
[0013]根據(jù)所述數(shù)據(jù)文件的名稱(chēng)和所述數(shù)據(jù)文件的存儲(chǔ)單元的長(zhǎng)度,在操作系統(tǒng)中創(chuàng)建所述數(shù)據(jù)文件和所述索引文件,其中所述數(shù)據(jù)文件用于存儲(chǔ)所述數(shù)據(jù)記錄,所述數(shù)據(jù)文件和所述索引文件名稱(chēng)一致;
[0014]構(gòu)建空字節(jié)填充數(shù)組,所述空字節(jié)填充數(shù)組的長(zhǎng)度等于所述數(shù)據(jù)文件的存儲(chǔ)單元的長(zhǎng)度;
[0015]根據(jù)所述索引文件構(gòu)建空閑索引列表,其中,所述空閑索引列表用于獲取所述數(shù)據(jù)文件中的存儲(chǔ)位置。
[0016]進(jìn)一步的,所述接收待存儲(chǔ)的數(shù)據(jù)記錄之后還包括:[0017]將所述數(shù)據(jù)記錄轉(zhuǎn)化為字節(jié)形式;
[0018]從所述空閑索引列表中獲取第一個(gè)空閑索引編號(hào),并把所述第一個(gè)空閑索引編號(hào)從所述空閑索引列表中刪除;
[0019]在所述數(shù)據(jù)文件中定位到所述第一個(gè)空閑索引編號(hào)的存儲(chǔ)位置。
[0020]進(jìn)一步的,所述根據(jù)所述輔助文件將所述數(shù)據(jù)記錄以固定長(zhǎng)度的字節(jié)形式存儲(chǔ)到所述數(shù)據(jù)文件還包括當(dāng)實(shí)際存儲(chǔ)的所述數(shù)據(jù)記錄的長(zhǎng)度小于所述數(shù)據(jù)文件的存儲(chǔ)單元的長(zhǎng)度時(shí),使用所述空字節(jié)填充數(shù)組的部分字節(jié)填充所述存儲(chǔ)單元。
[0021]進(jìn)一步的,所述將所述索引記錄存儲(chǔ)到所述索引文件中之后包括更新最后一條索引記錄。
[0022]進(jìn)一步的,所述索引記錄的內(nèi)容包括所述數(shù)據(jù)記錄的狀態(tài)、所述數(shù)據(jù)記錄的上一條數(shù)據(jù)記錄的索引編號(hào)和所述數(shù)據(jù)記錄的下一條數(shù)據(jù)記錄的索引編號(hào)。
[0023]對(duì)應(yīng)地,本發(fā)明實(shí)施例還提出了基于文件存儲(chǔ)數(shù)據(jù)的存儲(chǔ)裝置,所述裝置包括:
[0024]創(chuàng)建存儲(chǔ)文件和輔助文件模塊,用于在操作系統(tǒng)中創(chuàng)建存儲(chǔ)文件和輔助文件,其中,所述存儲(chǔ)文件包括數(shù)據(jù)文件和索引文件,所述輔助文件包括空字節(jié)填充數(shù)組和空閑索引列表;
[0025]接收數(shù)據(jù)記錄模塊,用于接收待存儲(chǔ)的數(shù)據(jù)記錄;
[0026]存儲(chǔ)數(shù)據(jù)記錄模塊,用于根據(jù)所述輔助文件將所述數(shù)據(jù)記錄以固定長(zhǎng)度的字節(jié)形式存儲(chǔ)到所述數(shù)據(jù)文件;
[0027]分成并存儲(chǔ)索引記錄模塊,用于分別生成每一個(gè)所述數(shù)據(jù)記錄的索引記錄,并將所述索引記錄存儲(chǔ)到所述索引文件,其中,所述索引記錄具有固定長(zhǎng)度。
[0028]進(jìn)一步的,所述創(chuàng)建存儲(chǔ)文件和輔助文件模塊包括:
[0029]接收配置參數(shù)模塊,用于接收所述數(shù)據(jù)文件的名稱(chēng)和所述數(shù)據(jù)文件的存儲(chǔ)單元的長(zhǎng)度;
[0030]創(chuàng)建文件模塊,用于根據(jù)所述數(shù)據(jù)文件的名稱(chēng)和所述數(shù)據(jù)文件的存儲(chǔ)單元的長(zhǎng)度,在操作系統(tǒng)中創(chuàng)建所述數(shù)據(jù)文件和所述索引文件,其中所述數(shù)據(jù)文件用于存儲(chǔ)所述數(shù)據(jù)記錄,所述數(shù)據(jù)文件和所述索引文件名稱(chēng)一致;
[0031]構(gòu)建空字節(jié)填充數(shù)組模塊,用于構(gòu)建空字節(jié)填充數(shù)組,所述空字節(jié)填充數(shù)組的長(zhǎng)度等于所述存儲(chǔ)單元的長(zhǎng)度;
[0032]構(gòu)建空閑索引列表模塊,用于根據(jù)所述索引文件構(gòu)建空閑索引列表,其中,所述空閑索引列表用于獲取所述數(shù)據(jù)文件中的存儲(chǔ)位置。
[0033]進(jìn)一步的,所述裝置還包括:
[0034]數(shù)據(jù)記錄格式轉(zhuǎn)化模塊,用于將所述數(shù)據(jù)記錄轉(zhuǎn)化為字節(jié)形式;
[0035]空閑索引編號(hào)檢索模塊,用于從所述空閑索引列表中獲取第一個(gè)空閑索引編號(hào),并把所述第一個(gè)空閑索引編號(hào)從所述空閑索引列表中刪除;
[0036]存儲(chǔ)位置定位模塊,用于在所述數(shù)據(jù)文件中定位到所述第一個(gè)空閑索引編號(hào)的存儲(chǔ)位置。
[0037]進(jìn)一步的,所述存儲(chǔ)數(shù)據(jù)記錄模塊還包括空字節(jié)填充模塊,用于當(dāng)實(shí)際存儲(chǔ)的所述數(shù)據(jù)記錄的長(zhǎng)度小于所述數(shù)據(jù)文件的存儲(chǔ)單元的長(zhǎng)度時(shí),使用所述空字節(jié)填充數(shù)組的部分字節(jié)填充所述存儲(chǔ)單元。[0038]進(jìn)一步的,所述生成并存儲(chǔ)索引記錄模塊還包括更新最后一條索引記錄模塊,用于更新最后一條索引記錄。
[0039]進(jìn)一步的,所述索引記錄的內(nèi)容包括所述數(shù)據(jù)記錄的狀態(tài)、所述數(shù)據(jù)記錄的上一條數(shù)據(jù)記錄的索引編號(hào)和所述數(shù)據(jù)記錄的下一條數(shù)據(jù)記錄的索引編號(hào)。
[0040]本發(fā)明實(shí)施例提出的基于文件存儲(chǔ)數(shù)據(jù)的存儲(chǔ)方法及裝置,具有如下特點(diǎn):首先,采用數(shù)據(jù)文件存儲(chǔ)需要交換的數(shù)據(jù)或信息系統(tǒng)運(yùn)行所需的動(dòng)態(tài)數(shù)據(jù),并可通過(guò)簡(jiǎn)單的API(Application Programming Interface,應(yīng)用程序編程接口)進(jìn)行高并發(fā)和高效讀寫(xiě),避免過(guò)多編程,并且有廣泛的使用范圍;其次,每條數(shù)據(jù)記錄都有一個(gè)簡(jiǎn)單的、非常小索引記錄,這樣就能高效的定位到數(shù)據(jù)記錄;另外,在數(shù)據(jù)文件中是按字節(jié)存儲(chǔ),這樣既可以存儲(chǔ)字符串,也可以存儲(chǔ)系列化對(duì)象,提聞了其適用范圍。
【專(zhuān)利附圖】

【附圖說(shuō)明】
[0041]通過(guò)閱讀參照以下附圖所作的對(duì)非限制性實(shí)施例所作的詳細(xì)描述,本發(fā)明的其它特征、目的和優(yōu)點(diǎn)將會(huì)變得更明顯:
[0042]圖1是本發(fā)明第一實(shí)施例中的基于文件存儲(chǔ)數(shù)據(jù)的存儲(chǔ)方法的實(shí)現(xiàn)流程圖;
[0043]圖2是數(shù)據(jù)文件中的所存儲(chǔ)的數(shù)據(jù)記錄示意圖;
[0044]圖3是索引文件中的所存儲(chǔ)的索引記錄示意圖;
[0045]圖4是索引記錄的示意圖;
[0046]圖5為根據(jù)本發(fā)明第一實(shí)施例的基于文件存儲(chǔ)數(shù)據(jù)的刪除方法的實(shí)現(xiàn)流程圖;
[0047]圖6是根據(jù)本發(fā)明第三實(shí)施例的基于文件存儲(chǔ)數(shù)據(jù)的存儲(chǔ)裝置的實(shí)現(xiàn)流程圖;
[0048]圖7是根據(jù)本發(fā)明第三實(shí)施例的基于文件存儲(chǔ)數(shù)據(jù)的存儲(chǔ)裝置的示意圖。
【具體實(shí)施方式】
[0049]下面結(jié)合附圖和實(shí)施例對(duì)本發(fā)明作進(jìn)一步的詳細(xì)說(shuō)明??梢岳斫獾氖?,此處所描述的具體實(shí)施例僅僅用于解釋本發(fā)明,而非對(duì)本發(fā)明的限定。另外還需要說(shuō)明的是,為了便于描述,附圖中僅示出了與本發(fā)明相關(guān)的部分而非全部?jī)?nèi)容。
[0050]在圖1-圖4中示出了本發(fā)明的第一實(shí)施例。
[0051]圖1為根據(jù)本發(fā)明第一實(shí)施例的基于文件存儲(chǔ)數(shù)據(jù)的存儲(chǔ)方法的實(shí)現(xiàn)流程100,該實(shí)現(xiàn)流程100詳述如下:
[0052]在步驟101中,在操作系統(tǒng)中創(chuàng)建存儲(chǔ)文件和輔助文件,其中,所述存儲(chǔ)文件包括數(shù)據(jù)文件和索引文件,所述輔助文件包括空字節(jié)填充數(shù)組和空閑索引列表。
[0053]在第一實(shí)施例中,數(shù)據(jù)存儲(chǔ)客戶(hù)端在操作系統(tǒng)中創(chuàng)建存儲(chǔ)文件、輔助文件和存儲(chǔ)接口,其中,存儲(chǔ)文件包括數(shù)據(jù)文件和索引文件。數(shù)據(jù)文件用于存儲(chǔ)數(shù)據(jù)記錄,索引文件用于存儲(chǔ)數(shù)據(jù)記錄的存儲(chǔ)信息的索引記錄。圖2是數(shù)據(jù)文件中的所存儲(chǔ)的數(shù)據(jù)記錄示意圖,數(shù)據(jù)文件中每條數(shù)據(jù)記錄的長(zhǎng)度是固定的,即數(shù)據(jù)文件的存儲(chǔ)單元具有固定的長(zhǎng)度。根據(jù)實(shí)際的應(yīng)用場(chǎng)景進(jìn)行評(píng)估確定,設(shè)置數(shù)據(jù)記錄的長(zhǎng)度為所需要處理數(shù)據(jù)集合中的最大長(zhǎng)度值接近的值,數(shù)據(jù)記錄以無(wú)序隨機(jī)存儲(chǔ)方式存儲(chǔ)于數(shù)據(jù)文件。圖3是索引文件中的所存儲(chǔ)的索引記錄示意圖,索引文件以無(wú)序隨機(jī)存儲(chǔ)方式存儲(chǔ)具有固定長(zhǎng)度的索引記錄集合。索引記錄與數(shù)據(jù)記錄一一對(duì)應(yīng),即每一條數(shù)據(jù)記錄都有一條記錄其存儲(chǔ)信息的索引記錄。圖4是索引記錄的示意圖,索引記錄包括數(shù)據(jù)記錄的狀態(tài)、數(shù)據(jù)記錄的上一條記錄的索引編號(hào)(上一條索引編號(hào))和數(shù)據(jù)記錄的下一條記錄的索引編號(hào)(下一條索引編號(hào))。由于索引記錄中數(shù)據(jù)記錄狀態(tài)為布爾型(數(shù)據(jù)記錄狀態(tài)為false表示數(shù)據(jù)記錄已經(jīng)被使用,true表示數(shù)據(jù)記錄未被使用)占用一個(gè)字節(jié)、上一條索引編號(hào)及下一條索引編號(hào)均為長(zhǎng)整型,均占用8個(gè)字節(jié),因此,索引記錄具有17字節(jié)的固定長(zhǎng)度。
[0054]在操作系統(tǒng)中初始化存儲(chǔ)文件和輔助文件包括下列步驟:首先,接收外部編程設(shè)定的數(shù)據(jù)文件的名稱(chēng)和數(shù)據(jù)文件的存儲(chǔ)單元的長(zhǎng)度;其次,根據(jù)所述數(shù)據(jù)文件的名稱(chēng)和所述數(shù)據(jù)文件的存儲(chǔ)單元的長(zhǎng)度構(gòu)建并以隨即讀寫(xiě)方式打開(kāi)數(shù)據(jù)文件,同步構(gòu)建并以隨即讀寫(xiě)方式打開(kāi)與所述數(shù)據(jù)文件名稱(chēng)一致的索引文件,其中,所述數(shù)據(jù)文件和所述索引文件的文件后綴不同,如索引文件后綴為idx,數(shù)據(jù)文件后綴為mdf;再次,構(gòu)建填充字節(jié)數(shù)組,其中,所述填充字節(jié)數(shù)組的內(nèi)容是空字節(jié),其長(zhǎng)度與數(shù)據(jù)文件中存儲(chǔ)單元的長(zhǎng)度一致,目的在于當(dāng)數(shù)據(jù)記錄存儲(chǔ)到數(shù)據(jù)文件中時(shí),如果數(shù)據(jù)記錄實(shí)際長(zhǎng)度小于數(shù)據(jù)裝置配置的數(shù)據(jù)記錄長(zhǎng)度,將使用該填充字節(jié)數(shù)組的部分字節(jié)進(jìn)行填充;最后,根據(jù)所述索引文件構(gòu)建空閑索引列表。構(gòu)建空閑索引列表的過(guò)程中,如果索引文件為空文件,則空閑索引列表為空的;否則,遍歷索引文件,讀取所有的索引記錄,如果索引記錄的數(shù)據(jù)記錄狀態(tài)為false,則添加到空閑索引列表中,空閑索引列表的構(gòu)建為快速的常規(guī)處理,能夠簡(jiǎn)單的通過(guò)索引文件計(jì)算出那些記錄索引編號(hào)是可用的,另外,為了高效的完成存儲(chǔ)裝置的初始化,這里需要單獨(dú)的使用緩存的IO (Input/Output,輸入或輸出)操作,把索引文件中那些索引記錄中的數(shù)據(jù)記錄狀態(tài)為false的添加到空閑索引列表中。
[0055]在步驟102中,接收待存儲(chǔ)的數(shù)據(jù)記錄。
[0056]在完成步驟101中存儲(chǔ)文件初始化后,存儲(chǔ)裝置就處于可使用狀態(tài),可以接收待存儲(chǔ)的數(shù)據(jù)記錄,其中所述數(shù)據(jù)記錄可以為任何數(shù)據(jù),包括文本、字節(jié)流和圖片等。
[0057]在步驟103中,根據(jù)所述輔助文件將所述數(shù)據(jù)記錄以固定長(zhǎng)度的字節(jié)形式存儲(chǔ)到所述數(shù)據(jù)文件。
[0058]將數(shù)據(jù)記錄存儲(chǔ)到數(shù)據(jù)文件之前還包括下列步驟;存儲(chǔ)接口將所述數(shù)據(jù)記錄轉(zhuǎn)化為字節(jié)形式,更進(jìn)一步地,轉(zhuǎn)化為UTF格式;從所述空閑索引列表中獲取第一個(gè)空閑索引編號(hào),并把所述第一個(gè)空閑索引編號(hào)從所述空閑索引列表中刪除;在所述數(shù)據(jù)文件中定位到所述第一個(gè)空閑索引編號(hào)的存儲(chǔ)位置,通過(guò)將第一個(gè)空閑索引編號(hào)乘以數(shù)據(jù)文件中存儲(chǔ)單元的長(zhǎng)度實(shí)現(xiàn)的。
[0059]將所述數(shù)據(jù)記錄寫(xiě)入數(shù)據(jù)文件時(shí),還需要用每條實(shí)際輸入記錄的長(zhǎng)度減去數(shù)據(jù)文件中存儲(chǔ)單元的字節(jié)長(zhǎng)度,當(dāng)結(jié)果不為O時(shí),即實(shí)際存儲(chǔ)的所述數(shù)據(jù)記錄的長(zhǎng)度小于所述存儲(chǔ)單元的長(zhǎng)度時(shí),使用所述填充字節(jié)數(shù)組的部分字節(jié)填充所述存儲(chǔ)單元。
[0060]在步驟104中,分別生成每一個(gè)所述數(shù)據(jù)記錄的索引記錄,并將所述索引記錄存儲(chǔ)到所述索引文件,其中,所述索引記錄具有固定長(zhǎng)度。
[0061]存儲(chǔ)接口根據(jù)每一個(gè)所述數(shù)據(jù)記錄分別生成一個(gè)索引記錄。第一個(gè)空閑索引編號(hào)乘以索引記錄長(zhǎng)度17從而獲得第一個(gè)空閑索引編號(hào)的序號(hào)存儲(chǔ)位置,并且通過(guò)隨機(jī)定位方式定位到第一個(gè)空閑索引編號(hào)序號(hào)存儲(chǔ)位置。緊接著在索引文件中寫(xiě)入與所述數(shù)據(jù)記錄相對(duì)應(yīng)的索引記錄,其中,是否使用過(guò)該數(shù)據(jù)記錄的標(biāo)識(shí)的值為false和上一條索引編號(hào)為最后一條數(shù)據(jù)記錄的索引編號(hào),同時(shí)下一條數(shù)據(jù)記錄的索引編號(hào)為-1。同時(shí)地,更新最后一條索引記錄的下一條索引編號(hào)為當(dāng)前記錄的索引編號(hào),即所述第一個(gè)空閑索引編號(hào),設(shè)置最后一條記錄的索引編號(hào)為當(dāng)前記錄的索引編號(hào)。
[0062]本發(fā)明第一實(shí)施例是利用操作系統(tǒng)中的存儲(chǔ)文件即數(shù)據(jù)文件和索引文件存儲(chǔ)數(shù)據(jù)記錄,而且所述數(shù)據(jù)文件的存儲(chǔ)單元具有固定長(zhǎng)度,針對(duì)每一個(gè)數(shù)據(jù)記錄分別構(gòu)建一個(gè)索引記錄存儲(chǔ)于索引文件中,這樣就能高效的定位到某條數(shù)據(jù)記錄以及所述某條數(shù)據(jù)記錄的存儲(chǔ)位置,同時(shí),數(shù)據(jù)記錄在數(shù)據(jù)文件中按字節(jié)存儲(chǔ),這樣既可以存儲(chǔ)字符串,也可以存儲(chǔ)系列化對(duì)象,提高了適用范圍。另外,本發(fā)明的第一實(shí)施例,采用操作系統(tǒng)中的存儲(chǔ)文件存儲(chǔ)數(shù)據(jù)記錄,只需要簡(jiǎn)單的API接口進(jìn)行高并發(fā)及高效讀寫(xiě),有效地避免了基于關(guān)系型數(shù)據(jù)庫(kù)存儲(chǔ)數(shù)據(jù)的過(guò)程中需要大量額外的編程以及后續(xù)的程序維護(hù),從而有效地降低了開(kāi)發(fā)成本。
[0063]在圖5中示出了本發(fā)明的第二實(shí)施例。
[0064]圖5為根據(jù)本發(fā)明第一實(shí)施例的基于文件存儲(chǔ)數(shù)據(jù)的刪除方法的實(shí)現(xiàn)流程500,該實(shí)現(xiàn)流程500詳述如下:
[0065]在步驟501中,接收待刪除數(shù)據(jù)記錄的序號(hào)。
[0066]本發(fā)明實(shí)施例應(yīng)用于同步刪除存儲(chǔ)文件中的數(shù)據(jù)記錄及所述數(shù)據(jù)記錄的索引記錄,其中存儲(chǔ)文件包括數(shù)據(jù)文件和索引文件。所述數(shù)據(jù)記錄和索引記錄分別存儲(chǔ)于數(shù)據(jù)文件和索引文件中,數(shù)據(jù)記錄以固定長(zhǎng)度的字節(jié)形式存儲(chǔ)于數(shù)據(jù)文件中,以序號(hào)標(biāo)識(shí)數(shù)據(jù)記錄。索引記錄包括數(shù)據(jù)記錄的狀態(tài)、數(shù)據(jù)記錄的上一條記錄的索引編號(hào)即上一條索引編號(hào)、數(shù)據(jù)記錄的下一條記錄的索引編號(hào)即下一條索引編號(hào),其中,數(shù)據(jù)記錄狀態(tài)為布爾型(數(shù)據(jù)記錄狀態(tài)為false代表該數(shù)據(jù)記錄未被使用或者為true代表該數(shù)據(jù)記錄被使用),數(shù)據(jù)記錄裝置占用一個(gè)字節(jié)、上一條索引編號(hào)及下一條索引編號(hào)均為長(zhǎng)整型,均占用8個(gè)字節(jié),因此索引記錄長(zhǎng)度固定為17字節(jié)。存儲(chǔ)文件記錄的存儲(chǔ),不是有序的,而是把記錄存儲(chǔ)到可用的位置。
[0067]接收待刪除數(shù)據(jù)記錄的序號(hào),能夠快速定位到所述數(shù)據(jù)記錄和所述數(shù)據(jù)記錄的索引記錄,進(jìn)而為高效完成刪除該數(shù)據(jù)記錄做鋪墊。
[0068]在步驟502中,根據(jù)所述待刪除數(shù)據(jù)記錄的序號(hào),同步刪除所述數(shù)據(jù)記錄并更新所述數(shù)據(jù)記錄的上一條數(shù)據(jù)記錄或者下一條數(shù)據(jù)記錄的索引記錄。
[0069]每條數(shù)據(jù)記錄都具有一個(gè)與之相對(duì)應(yīng)的索引記錄。由于索引記錄中含有數(shù)據(jù)記錄的上一條索引編號(hào)和數(shù)據(jù)記錄的下一條索引編號(hào),因此刪除所述數(shù)據(jù)記錄時(shí)需要更新所述數(shù)據(jù)記錄相鄰的上一條數(shù)據(jù)記錄或者下一條數(shù)據(jù)記錄的索引記錄。
[0070]根據(jù)所述待刪除數(shù)據(jù)記錄的序號(hào),分別通過(guò)如下步驟刪除所述數(shù)據(jù)記錄,并同步更新相關(guān)聯(lián)的索引記錄:
[0071]當(dāng)待刪除數(shù)據(jù)記錄為其所在的數(shù)據(jù)文件中第一條數(shù)據(jù)記錄且為最后一條數(shù)據(jù)記錄,即為數(shù)據(jù)文件中唯一條數(shù)據(jù)記錄時(shí),設(shè)置所述數(shù)據(jù)文件中第一條數(shù)據(jù)記錄和最后一條數(shù)據(jù)記錄均為-1。
[0072]當(dāng)待刪除數(shù)據(jù)記錄為其所在的數(shù)據(jù)文件中第一條數(shù)據(jù)記錄但不是最后一條數(shù)據(jù)記錄時(shí),進(jìn)行如下操作:從與所述數(shù)據(jù)文件名稱(chēng)相一致的索引文件中讀取第一條索引記錄中的下一條索引編號(hào);根據(jù)所述下一條索引編號(hào)獲取下一條索引編號(hào)所對(duì)應(yīng)的下一條索引記錄和下一條數(shù)據(jù)記錄;將所述下一條數(shù)據(jù)記錄設(shè)置為第一條數(shù)據(jù)記錄;將所述下一條索引記錄中的上一條索引編號(hào)設(shè)置為-1。
[0073]當(dāng)待刪除數(shù)據(jù)記錄為其所在的數(shù)據(jù)文件中最后一條數(shù)據(jù)記錄但不是第一條數(shù)據(jù)記錄時(shí),進(jìn)行如下操作:從與所述數(shù)據(jù)文件名稱(chēng)相一致的索引文件中讀取最后一條索引記錄中的上一條索引編號(hào);根據(jù)所述上一條索引編號(hào)獲取上一條索引編號(hào)所對(duì)應(yīng)的上一條索引記錄和上一條數(shù)據(jù)記錄;將所述上一條數(shù)據(jù)記錄設(shè)置為最后一條數(shù)據(jù)記錄;將所述上一條索引記錄中的下一條索引編號(hào)設(shè)置為-1。
[0074]當(dāng)待刪除數(shù)據(jù)記錄為其所在的數(shù)據(jù)文件中既不為第一條數(shù)據(jù)記錄同時(shí)也不是最后一條數(shù)據(jù)記錄時(shí),進(jìn)行如下操作:從與所述數(shù)據(jù)文件名稱(chēng)相一致的索引文件中讀取所述待刪除數(shù)據(jù)記錄對(duì)應(yīng)的索引記錄中的上一條索引編號(hào)和下一條索引編號(hào);根據(jù)所述上一條索引編號(hào)和下一條索引編號(hào)分別地定位讀取所述上上一條索引記錄和下一條索引記錄,設(shè)置所述上一條索引記錄中的下一條索引編號(hào)為下一條數(shù)據(jù)記錄的索引編號(hào),下一條索引記錄的上一條索引編號(hào)為上一條數(shù)據(jù)記錄的索引編號(hào)。
[0075]在步驟503中,在索引文件中的讀取所述待刪除數(shù)據(jù)記錄的索引記錄,設(shè)置該索引記錄中數(shù)據(jù)記錄狀態(tài)為false。
[0076]在數(shù)據(jù)文件中刪除數(shù)據(jù)記錄后,在與所述數(shù)據(jù)文件名稱(chēng)一致的索引文件中讀取所述待刪除數(shù)據(jù)記錄的索引記錄,設(shè)置所述索引記錄中的數(shù)據(jù)記錄狀態(tài)為未使用,即設(shè)置為布爾型數(shù)據(jù)false。
[0077]在步驟504中,在空閑索引列表中添加所述索引記錄的索引編號(hào)。
[0078]在刪除數(shù)據(jù)記錄后,釋放了該數(shù)據(jù)記錄的存儲(chǔ)單元。將所述數(shù)據(jù)記錄的索引記錄編號(hào)添加到空閑列表中,以使新的數(shù)據(jù)記錄能夠使用釋放的存儲(chǔ)單元。
[0079]步驟501至步驟504適用于刪除一部分?jǐn)?shù)據(jù)記錄,其中,所述數(shù)據(jù)記錄存儲(chǔ)于即為文件存儲(chǔ)的裝置中。如果刪除數(shù)據(jù)存儲(chǔ)裝置中的所有數(shù)據(jù)記錄時(shí),通過(guò)如下簡(jiǎn)單操作即可實(shí)現(xiàn):同步設(shè)置數(shù)據(jù)文件和索引文件的長(zhǎng)度均為O即可,另外情況空閑索引列表中的空閑索引編號(hào)。
[0080]以下為本發(fā)明實(shí)施例的裝置實(shí)施例,本發(fā)明的方法實(shí)施例和裝置實(shí)施例屬于同一構(gòu)思,在裝置實(shí)施例中未詳盡描述的細(xì)節(jié)內(nèi)容,可以參考上述方法實(shí)施例。
[0081]在圖6和圖7中示出了本發(fā)明的第三實(shí)施例。
[0082]圖6為根據(jù)本發(fā)明第三實(shí)施例的基于文件存儲(chǔ)數(shù)據(jù)的存儲(chǔ)裝置的實(shí)現(xiàn)流程600,該的實(shí)現(xiàn)流程600,該裝置600詳述如下:
[0083]該裝置包括:創(chuàng)建存儲(chǔ)文件和輔助文件模塊601,用于在操作系統(tǒng)中創(chuàng)建存儲(chǔ)文件和輔助文件,其中,所述存儲(chǔ)文件包括數(shù)據(jù)文件和索引文件,所述輔助文件包括空字節(jié)填充數(shù)組和空閑索引列表;接收數(shù)據(jù)記錄模塊602,用于接收待存儲(chǔ)的數(shù)據(jù)記錄;存儲(chǔ)數(shù)據(jù)記錄模塊603,用于根據(jù)所述輔助文件將所述數(shù)據(jù)記錄以固定長(zhǎng)度的字節(jié)形式存儲(chǔ)到所述數(shù)據(jù)文件;分成并存儲(chǔ)索引記錄模塊604,用于分別生成每一個(gè)所述數(shù)據(jù)記錄的索引記錄,并將所述索引記錄存儲(chǔ)到所述索引文件,其中,所述索引記錄具有固定長(zhǎng)度。
[0084]該裝置還包括:數(shù)據(jù)記錄格式轉(zhuǎn)化模塊,用于將所述數(shù)據(jù)記錄轉(zhuǎn)化為字節(jié)形式;空閑索引編號(hào)檢索模塊,用于從所述空閑索引列表中獲取第一個(gè)空閑索引編號(hào),并把所述第一個(gè)空閑索引編號(hào)從所述空閑索引列表中刪除;存儲(chǔ)位置定位模塊,用于在所述數(shù)據(jù)文件中定位到所述第一個(gè)空閑索引編號(hào)的存儲(chǔ)位置。[0085]更進(jìn)一步的,所述創(chuàng)建存儲(chǔ)文件和輔助文件模塊601包括:接收配置參數(shù)模塊,用于接收所述數(shù)據(jù)文件的名稱(chēng)和所述數(shù)據(jù)文件的存儲(chǔ)單元的長(zhǎng)度;創(chuàng)建文件模塊,用于根據(jù)所述數(shù)據(jù)文件的名稱(chēng)和所述數(shù)據(jù)文件的存儲(chǔ)單元的長(zhǎng)度,在操作系統(tǒng)中創(chuàng)建所述數(shù)據(jù)文件和所述索引文件,其中所述數(shù)據(jù)文件用于存儲(chǔ)所述數(shù)據(jù)記錄,所述數(shù)據(jù)文件和所述索引文件名稱(chēng)一致;構(gòu)建空字節(jié)填充數(shù)組模塊,用于構(gòu)建空字節(jié)填充數(shù)組,所述空字節(jié)填充數(shù)組的長(zhǎng)度等于所述存儲(chǔ)單元的長(zhǎng)度;構(gòu)建空閑索引列表模塊,用于根據(jù)所述索引文件構(gòu)建空閑索引列表,其中,所述空閑索引列表用于高效獲取所述數(shù)據(jù)文件中的存儲(chǔ)位置。
[0086]更進(jìn)一步的,所述存儲(chǔ)數(shù)據(jù)記錄模塊603還包括空字節(jié)填充模塊,用于當(dāng)實(shí)際存儲(chǔ)的所述數(shù)據(jù)記錄的長(zhǎng)度小于所述存儲(chǔ)單元的長(zhǎng)度時(shí),使用所述空字節(jié)填充數(shù)組的部分字節(jié)填充所述存儲(chǔ)單元。所述生成并存儲(chǔ)索引記錄模塊604還包括更新最后一條索引記錄模塊,用于更新最后一條索引記錄。
[0087]參見(jiàn)圖7,該存儲(chǔ)裝置分別通過(guò)存儲(chǔ)接口和讀取接口在該裝置存儲(chǔ)數(shù)據(jù)記錄和對(duì)外提供記錄。讀取接口讀取數(shù)據(jù)記錄的一種實(shí)現(xiàn)方式為根據(jù)索引編號(hào)讀取數(shù)據(jù)記錄,即以一個(gè)索引編號(hào)為參數(shù),返回待讀取的數(shù)據(jù)記錄;另外一種實(shí)現(xiàn)方式是為數(shù)據(jù)存儲(chǔ)裝置提供類(lèi)似于Java數(shù)組中遍歷器Iterator,使用者能夠更加便利的進(jìn)行數(shù)據(jù)記錄瀏覽封裝,減少使用者的編程工作量。遍歷器提供下一條記錄操作、是否還有下一條操作和移除數(shù)據(jù)記錄操作,所有這些操作均為同步操作,保證數(shù)據(jù)的一致性。
[0088]更進(jìn)一步,該存儲(chǔ)裝置還包括數(shù)據(jù)記錄遍歷器,能夠?yàn)槭褂谜咛峁└颖憷摹?br> [0089]更進(jìn)一步的,該存儲(chǔ)裝置還可以包括數(shù)據(jù)記錄總數(shù)設(shè)置模塊,用于為數(shù)據(jù)存儲(chǔ)裝置增加數(shù)據(jù)文件可以保存的記錄總數(shù),這樣可以有效的避免因?yàn)榇罅繑?shù)據(jù)寫(xiě)入而造成數(shù)據(jù)文件過(guò)大,在寫(xiě)入時(shí),如果數(shù)據(jù)文件中的數(shù)據(jù)記錄數(shù)量超過(guò)數(shù)據(jù)存儲(chǔ)裝置所配置的記錄總數(shù),則可以報(bào)警并拒絕存儲(chǔ)數(shù)據(jù)記錄,也可以擦除最老的數(shù)據(jù),而把數(shù)據(jù)寫(xiě)入到老數(shù)據(jù)的位置。
[0090]更進(jìn)一步,該裝置還可以包括數(shù)據(jù)文件名稱(chēng)驅(qū)動(dòng)返回模塊,用于提供根據(jù)數(shù)據(jù)文件名稱(chēng)返回存儲(chǔ)裝置實(shí)例的操作,這樣更加方便多線(xiàn)程并發(fā)數(shù)據(jù)存取應(yīng)用場(chǎng)景。
[0091]該裝置還包括是否關(guān)閉的標(biāo)識(shí)模塊,用于設(shè)置是否關(guān)閉該數(shù)據(jù)存儲(chǔ)裝置,該標(biāo)識(shí)模塊的內(nèi)容為布爾型數(shù)據(jù)即為true或false。如果需要關(guān)閉數(shù)據(jù)存儲(chǔ)裝置時(shí),只需設(shè)置該標(biāo)識(shí)為true,并關(guān)閉數(shù)據(jù)文件和索引文件即可。當(dāng)存儲(chǔ)裝置關(guān)閉后,后續(xù)對(duì)數(shù)據(jù)存儲(chǔ)裝置的所有后續(xù)操作均不被執(zhí)行,并會(huì)拋出數(shù)據(jù)讀取異常提醒。
[0092]本發(fā)明基于文件存儲(chǔ)需要交換的數(shù)據(jù)或信息系統(tǒng)運(yùn)行所需的動(dòng)態(tài)數(shù)據(jù),并可通過(guò)簡(jiǎn)單的API進(jìn)行高并發(fā)及高效讀寫(xiě),避免過(guò)多額外的編程,有效降低了存儲(chǔ)數(shù)據(jù)的實(shí)施成本及維護(hù)成,并有很廣泛的使用范圍。
[0093]注意,上述僅為本發(fā)明的較佳實(shí)施例及所運(yùn)用技術(shù)原理。本領(lǐng)域技術(shù)人員會(huì)理解,本發(fā)明不限于這里所述的特定實(shí)施例,對(duì)本領(lǐng)域技術(shù)人員來(lái)說(shuō)能夠進(jìn)行各種明顯的變化、重新調(diào)整和替代而不會(huì)脫離本發(fā)明的保護(hù)范圍。因此,雖然通過(guò)以上實(shí)施例對(duì)本發(fā)明進(jìn)行了較為詳細(xì)的說(shuō)明,但是本發(fā)明不僅僅限于以上實(shí)施例,在不脫離本發(fā)明構(gòu)思的情況下,還可以包括更多其他等效實(shí)施例,而本發(fā)明的范圍由所附的權(quán)利要求范圍決定。
【權(quán)利要求】
1.基于文件存儲(chǔ)數(shù)據(jù)的存儲(chǔ)方法,其特征在于,所述方法包括: 在操作系統(tǒng)中創(chuàng)建存儲(chǔ)文件和輔助文件,其中,所述存儲(chǔ)文件包括數(shù)據(jù)文件和索引文件,所述輔助文件包括空字節(jié)填充數(shù)組和空閑索引列表; 接收待存儲(chǔ)的數(shù)據(jù)記錄; 根據(jù)所述輔助文件將所述數(shù)據(jù)記錄以固定長(zhǎng)度的字節(jié)形式存儲(chǔ)到所述數(shù)據(jù)文件; 分別生成每一個(gè)所述數(shù)據(jù)記錄的索引記錄,并將所述索引記錄存儲(chǔ)到所述索引文件,其中,所述索引記錄具有固定長(zhǎng)度。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述在操作系統(tǒng)中創(chuàng)建存儲(chǔ)文件和輔助文件包括: 接收所述數(shù)據(jù)文件的名稱(chēng)和所述數(shù)據(jù)文件的存儲(chǔ)單元的長(zhǎng)度; 根據(jù)所述數(shù)據(jù)文件的名稱(chēng)和所述數(shù)據(jù)文件的存儲(chǔ)單元的長(zhǎng)度,在操作系統(tǒng)中創(chuàng)建所述數(shù)據(jù)文件和所述索引文件,其中所述數(shù)據(jù)文件用于存儲(chǔ)所述數(shù)據(jù)記錄,所述數(shù)據(jù)文件和所述索引文件名稱(chēng)一致; 構(gòu)建空字節(jié)填充數(shù)組,所述空字節(jié)填充數(shù)組的長(zhǎng)度等于所述數(shù)據(jù)文件的存儲(chǔ)單元的長(zhǎng)度; 根據(jù)所述索引文件構(gòu)建空閑索引列表,其中,所述空閑索引列表用于獲取所述數(shù)據(jù)文件中的存儲(chǔ)位置。
3.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述接收待存儲(chǔ)的數(shù)據(jù)記錄之后還包括: 將所述數(shù)據(jù)記錄轉(zhuǎn)化為字節(jié)形式; 從所述空閑索引列表中獲取第一個(gè)空閑索引編號(hào),并把所述第一個(gè)空閑索引編號(hào)從所述空閑索引列表中刪除; 在所述數(shù)據(jù)文件中定位到所述第一個(gè)空閑索引編號(hào)的存儲(chǔ)位置。
4.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述根據(jù)所述輔助文件將所述數(shù)據(jù)記錄以固定長(zhǎng)度的字節(jié)形式存儲(chǔ)到所述數(shù)據(jù)文件還包括當(dāng)實(shí)際存儲(chǔ)的所述數(shù)據(jù)記錄的長(zhǎng)度小于所述數(shù)據(jù)文件的存儲(chǔ)單元的長(zhǎng)度時(shí),使用所述空字節(jié)填充數(shù)組的部分字節(jié)填充所述存儲(chǔ)單元。
5.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述將所述索引記錄存儲(chǔ)到所述索引文件中之后包括更新最后一條索引記錄。
6.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述索引記錄的內(nèi)容包括所述數(shù)據(jù)記錄的狀態(tài)、所述數(shù)據(jù)記錄的上一條數(shù)據(jù)記錄的索引編號(hào)和所述數(shù)據(jù)記錄的下一條數(shù)據(jù)記錄的索引編號(hào)。
7.基于文件存儲(chǔ)數(shù)據(jù)的存儲(chǔ)裝置,其特征在于,所述裝置包括: 創(chuàng)建存儲(chǔ)文件和輔助文件模塊,用于在操作系統(tǒng)中創(chuàng)建存儲(chǔ)文件和輔助文件,其中,所述存儲(chǔ)文件包括數(shù)據(jù)文件和索引文件,所述輔助文件包括空字節(jié)填充數(shù)組和空閑索引列表; 接收數(shù)據(jù)記錄模塊,用于接收待存儲(chǔ)的數(shù)據(jù)記錄; 存儲(chǔ)數(shù)據(jù)記錄模塊,用于根據(jù)所述輔助文件將所述數(shù)據(jù)記錄以固定長(zhǎng)度的字節(jié)形式存儲(chǔ)到所述數(shù)據(jù)文件; 分成并存儲(chǔ)索引記錄模塊,用于分別生成每一個(gè)所述數(shù)據(jù)記錄的索引記錄,并將所述索引記錄存儲(chǔ)到所述索引文件,其中,所述索引記錄具有固定長(zhǎng)度。
8.根據(jù)權(quán)利要求7所述的裝置,其特征在于,所述創(chuàng)建存儲(chǔ)文件和輔助文件模塊包括: 接收配置參數(shù)模塊,用于接收所述數(shù)據(jù)文件的名稱(chēng)和所述數(shù)據(jù)文件的存儲(chǔ)單元的長(zhǎng)度; 創(chuàng)建文件模塊,用于根據(jù)所述數(shù)據(jù)文件的名稱(chēng)和所述數(shù)據(jù)文件的存儲(chǔ)單元的長(zhǎng)度,在操作系統(tǒng)中創(chuàng)建所述數(shù)據(jù)文件和所述索引文件,其中所述數(shù)據(jù)文件用于存儲(chǔ)所述數(shù)據(jù)記錄,所述數(shù)據(jù)文件和所述索引文件名稱(chēng)一致; 構(gòu)建空字節(jié)填充數(shù)組模塊,用于構(gòu)建空字節(jié)填充數(shù)組,所述空字節(jié)填充數(shù)組的長(zhǎng)度等于所述存儲(chǔ)單元的長(zhǎng)度; 構(gòu)建空閑索引列表模塊,用于根據(jù)所述索引文件構(gòu)建空閑索引列表,其中,所述空閑索引列表用于獲取所述數(shù)據(jù)文件中的存儲(chǔ)位置。
9.根據(jù)權(quán)利要求7所述的裝置,其特征在于,所述裝置還包括: 數(shù)據(jù)記錄格式轉(zhuǎn)化模塊,用于將所述數(shù)據(jù)記錄轉(zhuǎn)化為字節(jié)形式; 空閑索引編號(hào)檢索模塊,用于從所述空閑索引列表中獲取第一個(gè)空閑索引編號(hào),并把所述第一個(gè)空閑索引編號(hào)從所述空閑索引列表中刪除; 存儲(chǔ)位置定位模塊,用于在所述數(shù)據(jù)文件中定位到所述第一個(gè)空閑索引編號(hào)的存儲(chǔ)位置。
10.根據(jù)權(quán)利要求7所述的 裝置,其特征在于,所述存儲(chǔ)數(shù)據(jù)記錄模塊還包括空字節(jié)填充模塊,用于當(dāng)實(shí)際存儲(chǔ)的所述數(shù)據(jù)記錄的長(zhǎng)度小于所述數(shù)據(jù)文件的存儲(chǔ)單元的長(zhǎng)度時(shí),使用所述空字節(jié)填充數(shù)組的部分字節(jié)填充所述存儲(chǔ)單元。
11.根據(jù)權(quán)利要求7所述的裝置,其特征在于,所述生成并存儲(chǔ)索引記錄模塊還包括更新最后一條索引記錄模塊,用于更新最后一條索引記錄。
12.根據(jù)權(quán)利要求7所述的裝置,其特征在于,所述索引記錄的內(nèi)容包括所述數(shù)據(jù)記錄的狀態(tài)、所述數(shù)據(jù)記錄的上一條數(shù)據(jù)記錄的索引編號(hào)和所述數(shù)據(jù)記錄的下一條數(shù)據(jù)記錄的索引編號(hào)。
【文檔編號(hào)】G06F17/30GK103500206SQ201310455152
【公開(kāi)日】2014年1月8日 申請(qǐng)日期:2013年9月29日 優(yōu)先權(quán)日:2013年9月29日
【發(fā)明者】張志武, 鄭馳 申請(qǐng)人:北京華勝天成科技股份有限公司
網(wǎng)友詢(xún)問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1