專利名稱:一種數(shù)據(jù)處理方法及裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及數(shù)據(jù)處理技術(shù)領(lǐng)域,尤其涉及一種數(shù)據(jù)處理方法及裝置。
背景技術(shù):
軟件開發(fā)過程中,常常需要對(duì)文件的數(shù)據(jù)進(jìn)行處理?,F(xiàn)有的數(shù)據(jù)處理方案主要為 在軟件程序運(yùn)行時(shí),將程序運(yùn)行所需的所有數(shù)據(jù)(整個(gè)文件的數(shù)據(jù))全部加載至內(nèi)存中,運(yùn)行程序處理已加載的數(shù)據(jù)。由于需要處理的許多文件的數(shù)據(jù)量較大,比如流文件,將整個(gè)文件的所有數(shù)據(jù)全部加載至內(nèi)存中進(jìn)行處理,必定會(huì)占據(jù)大量的內(nèi)存空間,可能導(dǎo)致數(shù)據(jù)的丟失,從而影響程序的運(yùn)行。
發(fā)明內(nèi)容
本發(fā)明實(shí)施例所要解決的技術(shù)問題在于,提供一種數(shù)據(jù)處理方法及裝置,可在程序運(yùn)行時(shí),根據(jù)預(yù)設(shè)的內(nèi)存使用參數(shù)對(duì)數(shù)據(jù)進(jìn)行讀取、加載和處理,減少內(nèi)存的負(fù)荷,保證數(shù)據(jù)的完整性,保證程序運(yùn)行的可靠性。為了解決上述技術(shù)問題,本發(fā)明實(shí)施例提供了一種數(shù)據(jù)處理方法,包括
程序運(yùn)行時(shí),根據(jù)預(yù)設(shè)的內(nèi)存使用參數(shù),從預(yù)置的磁盤空間中查找所述程序運(yùn)行所需的數(shù)據(jù)并加載至內(nèi)存;
運(yùn)行所述程序,處理已加載的所述數(shù)據(jù)。其中,根據(jù)預(yù)設(shè)的內(nèi)存使用參數(shù),從預(yù)置的磁盤空間中查找所述程序運(yùn)行所需的數(shù)據(jù)并加載至內(nèi)存之前,還包括
將程序運(yùn)行所需的各種數(shù)據(jù)存儲(chǔ)至預(yù)置的磁盤空間中,并建立索引表; 所述索引表包括所述預(yù)置的磁盤空間內(nèi)存儲(chǔ)的各個(gè)數(shù)據(jù)的偏移量、大小、校驗(yàn)值和引用計(jì)數(shù);其中,各個(gè)數(shù)據(jù)的偏移量表示各個(gè)數(shù)據(jù)在所述預(yù)置的磁盤空間內(nèi)的存儲(chǔ)位置。其中,所述將程序運(yùn)行所需的各種數(shù)據(jù)存儲(chǔ)至預(yù)置的磁盤空間中,并建立索引表, 包括
預(yù)先設(shè)置用于存儲(chǔ)程序運(yùn)行所需的各種數(shù)據(jù)的磁盤空間,并建立索引表;
當(dāng)所述預(yù)置的磁盤空間有數(shù)據(jù)寫入時(shí),計(jì)算所述數(shù)據(jù)的校驗(yàn)值;
判斷所述索引表中是否包含計(jì)算得到的所述檢驗(yàn)值;
若判斷結(jié)果為是,更新所述索引表中的所述檢驗(yàn)值對(duì)應(yīng)的數(shù)據(jù)的引用計(jì)數(shù);
若判斷結(jié)果為否,將所述數(shù)據(jù)存儲(chǔ)至所述預(yù)置的磁盤空間中,并更新所述索引表。其中,所述程序運(yùn)行時(shí),根據(jù)預(yù)設(shè)的內(nèi)存使用參數(shù),從預(yù)置的磁盤空間中查找所述程序運(yùn)行所需的數(shù)據(jù)并加載至內(nèi)存,包括
程序運(yùn)行時(shí),計(jì)算所述程序運(yùn)行所需的數(shù)據(jù)的校驗(yàn)值; 查找所述索引表中是否包含計(jì)算得到的所述檢驗(yàn)值;
若查找結(jié)果為是,從所述索引表中讀取所述校驗(yàn)值對(duì)應(yīng)的數(shù)據(jù)的大小,比較所述數(shù)據(jù)的大小和所述預(yù)設(shè)的內(nèi)存使用參數(shù);若所述數(shù)據(jù)的大小大于所述預(yù)設(shè)的內(nèi)存使用參數(shù),按照所述預(yù)設(shè)的內(nèi)存使用參數(shù)分段從所述預(yù)置的磁盤空間中讀取所述數(shù)據(jù)加載至內(nèi)存中;
若所述數(shù)據(jù)的大小小于等于所述預(yù)設(shè)的內(nèi)存使用參數(shù),從所述預(yù)置的磁盤空間中讀取所述數(shù)據(jù)并加載至內(nèi)存;
若查找結(jié)果為否,將所述程序運(yùn)行所需的數(shù)據(jù)存儲(chǔ)至所述預(yù)置的磁盤空間中,并更新所述索引表。其中,所述方法還包括
當(dāng)所述預(yù)置的磁盤空間中的數(shù)據(jù)發(fā)生變化時(shí),更新所述索引表,并記錄每次數(shù)據(jù)變化對(duì)應(yīng)的所述索引表的更新信息;
根據(jù)記錄的每次數(shù)據(jù)變化對(duì)應(yīng)的所述索引表的更新信息,對(duì)引起所述數(shù)據(jù)變化的操作進(jìn)行撤銷恢復(fù)。相應(yīng)地,本發(fā)明實(shí)施例還提供了一種數(shù)據(jù)處理裝置,包括
查找模塊,用于當(dāng)程序運(yùn)行時(shí),根據(jù)預(yù)設(shè)的內(nèi)存使用參數(shù),從預(yù)置的磁盤空間中查找所述程序運(yùn)行所需的數(shù)據(jù);
加載模塊,用于將所述查找模塊查找到的所述數(shù)據(jù)加載至內(nèi)存; 處理模塊,用于運(yùn)行所述程序,處理所述加載模塊已加載的所述數(shù)據(jù)。其中,所述裝置還包括
初始化模塊,用于將程序運(yùn)行所需的各種數(shù)據(jù)存儲(chǔ)至預(yù)置的磁盤空間中,并建立索引
表;
所述索引表包括所述預(yù)置的磁盤空間內(nèi)存儲(chǔ)的各個(gè)數(shù)據(jù)的偏移量、大小、校驗(yàn)值和引用計(jì)數(shù);其中,各個(gè)數(shù)據(jù)的偏移量表示各個(gè)數(shù)據(jù)在所述預(yù)置的磁盤空間內(nèi)的存儲(chǔ)位置。其中,所述初始化模塊包括
預(yù)置單元,用于預(yù)先設(shè)置用于存儲(chǔ)程序運(yùn)行所需的各種數(shù)據(jù)的磁盤空間,并建立索引
表;
計(jì)算單元,用于當(dāng)所述預(yù)置單元預(yù)置的磁盤空間有數(shù)據(jù)寫入時(shí),計(jì)算所述數(shù)據(jù)的校驗(yàn)
值;
判斷單元,用于判斷所述預(yù)置單元建立的索引表中是否包含所述計(jì)算單元計(jì)算得到的所述檢驗(yàn)值;
執(zhí)行單元,用于當(dāng)所述判斷單元判斷結(jié)果為是時(shí),更新所述索引表中所述檢驗(yàn)值對(duì)應(yīng)的數(shù)據(jù)的引用計(jì)數(shù);當(dāng)所述判斷單元判斷結(jié)果為否時(shí),將所述數(shù)據(jù)存儲(chǔ)至所述預(yù)置的磁盤空間中,并更新所述索引表。其中,所述查找模塊包括
計(jì)算單元,用于當(dāng)程序運(yùn)行時(shí),計(jì)算所述程序運(yùn)行所需的數(shù)據(jù)的校驗(yàn)值; 查找單元,用于查找所述索引表中是否包含所述計(jì)算單元計(jì)算得到的所述檢驗(yàn)值; 比較單元,用于當(dāng)所述查找單元查找結(jié)果為是時(shí),從所述索引表中讀取所述校驗(yàn)值對(duì)應(yīng)的數(shù)據(jù)的大小,比較所述數(shù)據(jù)的大小和所述預(yù)設(shè)的內(nèi)存使用參數(shù);
讀取單元,用于當(dāng)所述比較單元比較得到所述數(shù)據(jù)的大小大于所述預(yù)設(shè)的內(nèi)存使用參數(shù)時(shí),按照所述預(yù)設(shè)的內(nèi)存使用參數(shù)分段從所述預(yù)置的磁盤空間中讀取所述數(shù)據(jù);當(dāng)所述比較單元比較得到所述數(shù)據(jù)的大小小于等于所述預(yù)設(shè)的內(nèi)存使用參數(shù)時(shí),從所述預(yù)置的磁
5盤空間中讀取所述數(shù)據(jù);
存儲(chǔ)更新單元,用于當(dāng)所述查找單元查找結(jié)果為否時(shí),將所述程序運(yùn)行所需的數(shù)據(jù)存儲(chǔ)至所述預(yù)置的磁盤空間中,并更新所述索引表。其中,所述裝置還包括
記錄模塊,用于當(dāng)所述預(yù)置的磁盤空間中的數(shù)據(jù)發(fā)生變化時(shí),更新所述索引表,并記錄每次數(shù)據(jù)變化對(duì)應(yīng)的所述索引表的更新信息;
撤銷恢復(fù)模塊,用于根據(jù)所述記錄模塊記錄的每次數(shù)據(jù)變化對(duì)應(yīng)的所述索引表的更新信息,對(duì)引起所述數(shù)據(jù)變化的操作進(jìn)行撤銷恢復(fù)。實(shí)施本發(fā)明實(shí)施例,具有如下有益效果
本發(fā)明實(shí)施例將程序運(yùn)行所需的數(shù)據(jù)存儲(chǔ)在預(yù)置的磁盤空間中,在程序運(yùn)行時(shí),根據(jù)預(yù)設(shè)的內(nèi)存使用參數(shù),從預(yù)置的磁盤空間中獲取相應(yīng)大小的數(shù)據(jù)進(jìn)行加載和處理,減少了將程序運(yùn)行的全部數(shù)據(jù)加載至內(nèi)存所帶來的內(nèi)存負(fù)荷,同時(shí)可保證數(shù)據(jù)的完整性,保證程序運(yùn)行的可靠性。
為了更清楚地說明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對(duì)實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動(dòng)性的前提下,還可以根據(jù)這些附圖獲得其他的附圖。圖1為本發(fā)明的數(shù)據(jù)處理裝置的第一實(shí)施例的結(jié)構(gòu)示意圖; 圖2為本發(fā)明的數(shù)據(jù)處理裝置的第二實(shí)施例的結(jié)構(gòu)示意圖3為本發(fā)明的樹型結(jié)構(gòu)表的示意圖4為本發(fā)明的數(shù)據(jù)處理裝置的初始化模塊的實(shí)施例的結(jié)構(gòu)示意圖; 圖5為本發(fā)明的數(shù)據(jù)處理裝置的查找模塊的實(shí)施例的結(jié)構(gòu)示意圖; 圖6為本發(fā)明的數(shù)據(jù)處理方法的第一實(shí)施例的流程圖; 圖7為圖6所示的步驟SlOl的具體流程圖; 圖8為本發(fā)明的數(shù)據(jù)處理方法的第二實(shí)施例的流程圖; 圖9為圖8所示的步驟S201的具體流程圖。
具體實(shí)施例方式下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有作出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。請(qǐng)參見圖1,為本發(fā)明的數(shù)據(jù)處理裝置的第一實(shí)施例的結(jié)構(gòu)示意圖;所述裝置包括
查找模塊10,用于當(dāng)程序運(yùn)行時(shí),根據(jù)預(yù)設(shè)的內(nèi)存使用參數(shù),從預(yù)置的磁盤空間中查找所述程序運(yùn)行所需的數(shù)據(jù)。由于程序所需處理的數(shù)據(jù)量往往較大,在程序運(yùn)行時(shí),直接將數(shù)據(jù)加載至內(nèi)存進(jìn)行處理,會(huì)占據(jù)大量的內(nèi)存空間,影響程序運(yùn)行,因此,可預(yù)先將程序運(yùn)行所需的數(shù)據(jù)存儲(chǔ)至預(yù)置的磁盤空間中,當(dāng)程序運(yùn)行時(shí),所述查找模塊10根據(jù)預(yù)設(shè)的內(nèi)存使用參數(shù),從所述預(yù)置的磁盤空間中讀取。其中,所述預(yù)設(shè)的內(nèi)存使用參數(shù)是指預(yù)先設(shè)定的可使用的內(nèi)存大小,該大小可以為內(nèi)存的整個(gè)存儲(chǔ)空間,也可以是內(nèi)存的部分存儲(chǔ)空間,所述預(yù)設(shè)的內(nèi)存使用參數(shù)可根據(jù)實(shí)際需要進(jìn)行設(shè)定,在此不贅述。加載模塊20,用于將所述查找模塊10查找到的所述數(shù)據(jù)加載至內(nèi)存。所述加載模塊20將所述查找模塊10查找到的數(shù)據(jù)加載至內(nèi)存中,該加載過程與現(xiàn)有技術(shù)相同,在此不贅述。處理模塊30,用于運(yùn)行所述程序,處理所述加載模塊20已加載的所述數(shù)據(jù)。當(dāng)所述加載模塊20將數(shù)據(jù)加載至內(nèi)存后,所述處理模塊30運(yùn)行所述程序,處理已加載的所述數(shù)據(jù)。本發(fā)明實(shí)施例在程序運(yùn)行時(shí),根據(jù)預(yù)設(shè)的內(nèi)存使用參數(shù)對(duì)數(shù)據(jù)進(jìn)行讀取、加載和處理,減少內(nèi)存的負(fù)荷,保證數(shù)據(jù)的完整性,保證程序運(yùn)行的可靠性。請(qǐng)參見圖2,為本發(fā)明的數(shù)據(jù)處理裝置的第二實(shí)施例的結(jié)構(gòu)示意圖;與上一實(shí)施例相同,所述裝置包括查找模塊10、加載模塊20和處理模塊30。本實(shí)施例中,所述裝置進(jìn)一步包括
初始化模塊40,用于將程序運(yùn)行所需的各種數(shù)據(jù)存儲(chǔ)至預(yù)置的磁盤空間中,并建立索引表。所述索引表可以包括所述預(yù)置的磁盤空間內(nèi)存儲(chǔ)的各個(gè)數(shù)據(jù)的偏移量 (offset)、大小(size)、校驗(yàn)值(Crc32值)和引用計(jì)數(shù)(Numlock);其中,各個(gè)數(shù)據(jù)的偏移量表示各個(gè)數(shù)據(jù)在所述預(yù)置的磁盤空間內(nèi)的存儲(chǔ)位置。實(shí)際應(yīng)用中,所述預(yù)置的磁盤空間內(nèi)存儲(chǔ)的各個(gè)數(shù)據(jù)可以采用樹型結(jié)構(gòu)表進(jìn)行表示,所述樹型結(jié)構(gòu)表為類似文件夾結(jié)構(gòu)的表。請(qǐng)一并參見圖3,為本發(fā)明的樹型結(jié)構(gòu)表的示意圖;圖3所示例子為若往磁盤空間根目錄中寫入三個(gè)文件,分別為AAAA. TXT、BBBB. TXT和CCCC. TXT,若該三個(gè)文件的內(nèi)容相同,那么,將有三個(gè)結(jié)點(diǎn)指定同一個(gè)數(shù)據(jù)區(qū),該指定的同一個(gè)數(shù)據(jù)的引用計(jì)數(shù)為3。若往磁盤空間根目錄中寫入兩個(gè)文件,分別為DDD. TXT和EEE. TXT,若該兩個(gè)文件的內(nèi)容相同,那么,將有兩個(gè)結(jié)點(diǎn)指定同一個(gè)數(shù)據(jù)區(qū),該指定的同一個(gè)數(shù)據(jù)的引用計(jì)數(shù)為2。記錄模塊50,用于當(dāng)所述預(yù)置的磁盤空間中的數(shù)據(jù)發(fā)生變化時(shí),更新所述索引表, 并記錄每次數(shù)據(jù)變化對(duì)應(yīng)的所述索引表的更新信息。每當(dāng)所述預(yù)置的磁盤空間中的數(shù)據(jù)發(fā)生變化時(shí),所述索引表也會(huì)相應(yīng)發(fā)生變化, 所述記錄模塊50依據(jù)發(fā)生變化的數(shù)據(jù),更新所述索引表,并記錄每次數(shù)據(jù)變化對(duì)應(yīng)的所述索引表的更新信息。撤銷恢復(fù)模塊60,用于根據(jù)所述記錄模塊50記錄的每次數(shù)據(jù)變化對(duì)應(yīng)的所述索引表的更新信息,對(duì)引起所述數(shù)據(jù)變化的操作進(jìn)行撤銷恢復(fù)。由于所述預(yù)置的磁盤空間中的數(shù)據(jù)都以追加的方式進(jìn)行寫入,當(dāng)需要恢復(fù)到某一操作的數(shù)據(jù)時(shí),用戶僅需要向所述數(shù)據(jù)處理裝置輸入撤銷恢復(fù)指令,所述撤銷恢復(fù)模塊60 根據(jù)該撤銷恢復(fù)指令以及記錄的所述每次數(shù)據(jù)變化對(duì)應(yīng)的索引表的更新信息,恢復(fù)到相應(yīng)操作的索引表,即可達(dá)到對(duì)引起所述數(shù)據(jù)變化的操作進(jìn)行撤銷恢復(fù)。為了更清楚地說明本發(fā)明,下面將結(jié)合附圖4-5,對(duì)本發(fā)明的數(shù)據(jù)處理裝置的各模塊進(jìn)行詳細(xì)介紹。請(qǐng)參見圖4,為本發(fā)明的數(shù)據(jù)處理裝置的初始化模塊的實(shí)施例的結(jié)構(gòu)示意圖;所述初始化模塊40包括
預(yù)置單元401,用于預(yù)先設(shè)置用于存儲(chǔ)程序運(yùn)行所需的各種數(shù)據(jù)的磁盤空間,并建立索引表。具體實(shí)現(xiàn)中,所述預(yù)置單元401預(yù)先在磁盤中設(shè)置一個(gè)空間,該空間用來存儲(chǔ)程序運(yùn)行所需的各種數(shù)據(jù),并建立該預(yù)置的磁盤空間對(duì)應(yīng)的索引表。所述索引表包括所述預(yù)置的磁盤空間內(nèi)存儲(chǔ)的各個(gè)數(shù)據(jù)的偏移量、大小、校驗(yàn)值和引用計(jì)數(shù);其中,各個(gè)數(shù)據(jù)的偏移量表示各個(gè)數(shù)據(jù)在所述預(yù)置的磁盤空間內(nèi)的存儲(chǔ)位置。計(jì)算單元402,用于當(dāng)所述預(yù)置單元401預(yù)置的磁盤空間有數(shù)據(jù)寫入時(shí),計(jì)算所述數(shù)據(jù)的校驗(yàn)值。當(dāng)需要向預(yù)置的磁盤空間寫入數(shù)據(jù)時(shí),所述計(jì)算單元402首先計(jì)算需要寫入的數(shù)據(jù)的校驗(yàn)值,即CRC (Cyclical Redundancy Check,循環(huán)冗余校驗(yàn))32值。所述計(jì)算單元 402的計(jì)算過程與現(xiàn)有的CRC的計(jì)算過程相同,在此不贅述。判斷單元403,用于判斷所述預(yù)置單元401建立的索引表中是否包含所述計(jì)算單元402計(jì)算得到的所述檢驗(yàn)值。如前述,所述索引表包含所述預(yù)置的磁盤空間內(nèi)存儲(chǔ)的各個(gè)數(shù)據(jù)的偏移量、大小、 校驗(yàn)值和引用計(jì)數(shù),當(dāng)所述計(jì)算單元402計(jì)算得到需要寫入的數(shù)據(jù)的CRC32值后,所述判斷單元403則判斷所述索引表中是否包含相同的CRC32值??梢岳斫獾氖?,若需要寫入的數(shù)據(jù)在此之前已被寫入所述預(yù)置的磁盤空間中,則所述索引表中必定包含該CRC32值,若需要寫入的數(shù)據(jù)尚未被寫入所述預(yù)置的磁盤空間中,則所述索引表中未包含該CRC32值。執(zhí)行單元404,用于當(dāng)所述判斷單元403判斷結(jié)果為是時(shí),更新所述索引表中所述檢驗(yàn)值對(duì)應(yīng)的數(shù)據(jù)的引用計(jì)數(shù);當(dāng)所述判斷單元403判斷結(jié)果為否時(shí),將所述數(shù)據(jù)存儲(chǔ)至所述預(yù)置的磁盤空間中,并更新所述索引表。若所述判斷單元403判斷結(jié)果為是,表明所述需要寫入的數(shù)據(jù)已被存儲(chǔ)至所述預(yù)置的磁盤空間中,所述執(zhí)行單元404則無需再對(duì)該數(shù)據(jù)進(jìn)行寫入操作,僅需要更新所述索引表,將所述索引表中該數(shù)據(jù)的引用計(jì)數(shù)加1。其中,各個(gè)數(shù)據(jù)的引用計(jì)數(shù)表明各個(gè)數(shù)據(jù)需要被寫入預(yù)置的磁盤空間的次數(shù)。當(dāng)有相同的數(shù)據(jù)寫入時(shí),所述執(zhí)行單元404僅對(duì)索引表中的引用計(jì)數(shù)進(jìn)行更新,可避免寫入同樣的數(shù)據(jù)所帶來的資源浪費(fèi),比如相同的偏移量、 大小等信息的存儲(chǔ),浪費(fèi)了存儲(chǔ)空間。若所述判斷單元403判斷結(jié)果為否,表明所述需要寫入的數(shù)據(jù)尚未存儲(chǔ)于所述預(yù)置的磁盤空間中,所述執(zhí)行單元404則需要將所述數(shù)據(jù)存儲(chǔ)至所述預(yù)置的磁盤空間中,具體地,所述執(zhí)行單元404可以采用從尾追加的方式寫入所述數(shù)據(jù),即從所述預(yù)置的存儲(chǔ)空間存儲(chǔ)的數(shù)據(jù)的尾端添加所述需要寫入的數(shù)據(jù),然后更新所述索引表,在所述索引表中添加新寫入的所述數(shù)據(jù)的偏移量、CRC32值、大小和引用計(jì)數(shù)等索弓I fe息O需要說明的是,所述預(yù)置的磁盤空間可提供API (Application Programming hterface,應(yīng)用程序編程接口 )接口,通過對(duì)該API接口的調(diào)用實(shí)現(xiàn)對(duì)所述預(yù)置的磁盤空間內(nèi)的數(shù)據(jù)的調(diào)用。在現(xiàn)有的軟件開發(fā)過程中,程序的處理過程中往往會(huì)產(chǎn)生很多臨時(shí)文件數(shù)據(jù),這些數(shù)據(jù)常被用戶不小心刪除,從而造成數(shù)據(jù)丟失。本發(fā)明實(shí)施例中,可采用所述預(yù)置的磁盤空間存儲(chǔ)所產(chǎn)生的臨時(shí)文件數(shù)據(jù),并提供相應(yīng)的API接口,開發(fā)人員通過調(diào)用所述API接口對(duì)所述預(yù)置的磁盤空間內(nèi)的臨時(shí)文件數(shù)據(jù)進(jìn)行創(chuàng)建、修改或刪除,則可避免現(xiàn)有技術(shù)中出現(xiàn)的臨時(shí)文件數(shù)據(jù)丟失的問題。另外,通過API接口可以對(duì)所述預(yù)置的磁盤空間內(nèi)的數(shù)據(jù)進(jìn)行碎片整理,避免文件越來越大,從而提高數(shù)據(jù)處理效率。請(qǐng)參見圖5,為本發(fā)明的數(shù)據(jù)處理裝置的查找模塊的實(shí)施例的結(jié)構(gòu)示意圖;所述查找模塊10包括
計(jì)算單元101,用于當(dāng)程序運(yùn)行時(shí),計(jì)算所述程序運(yùn)行所需的數(shù)據(jù)的校驗(yàn)值。所述計(jì)算單元101在程序運(yùn)行時(shí),首先計(jì)算所述程序運(yùn)行所需的數(shù)據(jù)的CRC32值, 所述計(jì)算單元101與圖4所示的計(jì)算單元402的計(jì)算過程相同,二在此不贅述。實(shí)際應(yīng)用中,所述計(jì)算單元101與圖4所示的計(jì)算單元402可以合并為同一單元。查找單元102,用于查找所述索引表中是否包含所述計(jì)算單元101計(jì)算得到的所述檢驗(yàn)值。如前述,所述索引表包含所述預(yù)置的磁盤空間內(nèi)存儲(chǔ)的各個(gè)數(shù)據(jù)的偏移量、大小、 校驗(yàn)值和引用計(jì)數(shù),當(dāng)所述計(jì)算單元101計(jì)算得到需要寫入的數(shù)據(jù)的CRC32值后,所述查找單元102則查找所述索引表中是否包含相同的CRC32值??梢岳斫獾氖牵羲鰯?shù)據(jù)已被寫入所述預(yù)置的磁盤空間中,則所述索引表中必定包含該CRC32值,若所述數(shù)據(jù)尚未被寫入所述預(yù)置的磁盤空間中,則所述索引表中未包含該CRC32值。所述查找單元102與圖4 所示的判斷單元403的處理過程相同,實(shí)際應(yīng)用中,所述查找單元102與圖4所示的判斷單元403可以合并為同一單元。比較單元103,用于當(dāng)所述查找單元102查找結(jié)果為是時(shí),從所述索引表中讀取所述校驗(yàn)值對(duì)應(yīng)的數(shù)據(jù)的大小,比較所述數(shù)據(jù)的大小和所述預(yù)設(shè)的內(nèi)存使用參數(shù)。若所述查找單元103查找結(jié)果為是,表明所述數(shù)據(jù)已被存儲(chǔ)至所述預(yù)置的磁盤空間中,所述比較單元103從所述索引表中讀取所述數(shù)據(jù)的大小,并比較所述數(shù)據(jù)的大小和所述預(yù)設(shè)的內(nèi)存使用參數(shù)。其中,所述預(yù)設(shè)的內(nèi)存使用參數(shù)是指預(yù)先設(shè)定的可使用的內(nèi)存大小,該大小可以為內(nèi)存的整個(gè)存儲(chǔ)空間,也可以是內(nèi)存的部分存儲(chǔ)空間,所述預(yù)設(shè)的內(nèi)存使用參數(shù)可根據(jù)實(shí)際需要進(jìn)行設(shè)定,在此不贅述。讀取單元104,用于當(dāng)所述比較單元103比較得到所述數(shù)據(jù)的大小大于所述預(yù)設(shè)的內(nèi)存使用參數(shù)時(shí),按照所述預(yù)設(shè)的內(nèi)存使用參數(shù)分段從所述預(yù)置的磁盤空間中讀取所述數(shù)據(jù);當(dāng)所述比較單元103比較得到所述數(shù)據(jù)的大小小于等于所述預(yù)設(shè)的內(nèi)存使用參數(shù)時(shí),從所述預(yù)置的磁盤空間中讀取所述數(shù)據(jù)。若所述比較單元103比較得到所述數(shù)據(jù)的大小大于所述預(yù)設(shè)的內(nèi)存使用參數(shù),所述讀取單元104則按照所述預(yù)設(shè)的內(nèi)存使用參數(shù)分段從所述預(yù)置的磁盤空間中讀取所述數(shù)據(jù),比如若預(yù)設(shè)的內(nèi)存使用參數(shù)為50M,所述數(shù)據(jù)為120M,則所述讀取單元104每次只能讀取不大于50M的數(shù)據(jù)映射至內(nèi)存中,本實(shí)施例中,所述讀取單元104按照所述預(yù)設(shè)的內(nèi)存使用參數(shù)對(duì)所述數(shù)據(jù)進(jìn)行分段讀取,即第一次讀取50M數(shù)據(jù)映射至內(nèi)存,當(dāng)該50M數(shù)據(jù)被處理完畢后,繼續(xù)取后50M數(shù)據(jù)映射至內(nèi)存進(jìn)行處理,最后取剩余的20M數(shù)據(jù)映射至內(nèi)存中進(jìn)行處理。需要說明的是,所述讀取單元104進(jìn)行分段讀取時(shí),也可以按照預(yù)設(shè)的、不大于所述預(yù)設(shè)的內(nèi)存使用參數(shù)的值進(jìn)行分段讀取,依上述例子,比如所述讀取單元104每次取 40M數(shù)據(jù)映射至內(nèi)存進(jìn)行處理,等等,其他情況下可類似分析,在此不贅述。
若所述比較單元103比較得到所述數(shù)據(jù)的大小小于等于(不大于)所述預(yù)設(shè)的內(nèi)存使用參數(shù),所述讀取單元104則直接從所述預(yù)置的磁盤空間中讀取所述數(shù)據(jù),比如若預(yù)設(shè)的內(nèi)存使用參數(shù)為50M,所述數(shù)據(jù)為40M,則所述讀取單元104直接讀取該40M的數(shù)據(jù)映射至內(nèi)存中進(jìn)行處理。存儲(chǔ)更新單元105,用于當(dāng)所述查找單元102查找結(jié)果為否時(shí),將所述程序運(yùn)行所需的數(shù)據(jù)存儲(chǔ)至所述預(yù)置的磁盤空間中,并更新所述索引表。若所述查找單元102查找結(jié)果為否,表明所述數(shù)據(jù)尚未存儲(chǔ)于所述預(yù)置的磁盤空間中,所述存儲(chǔ)更新單元105則需要將所述數(shù)據(jù)存儲(chǔ)至所述預(yù)置的磁盤空間中,具體地,所述存儲(chǔ)更新單元105可以采用從尾追加的方式寫入所述數(shù)據(jù),即從所述預(yù)置的存儲(chǔ)空間存儲(chǔ)的數(shù)據(jù)的尾端添加所述需要寫入的數(shù)據(jù),然后更新所述索引表,在所述索引表中添加新寫入的所述數(shù)據(jù)的偏移量、CRC32值、大小和引用計(jì)數(shù)等索引信息。可以理解的是,所述存儲(chǔ)更新單元105與圖4所示的執(zhí)行單元404的部分處理過程相同,所述存儲(chǔ)更新單元105與圖4所示的執(zhí)行單元404在實(shí)際應(yīng)用中可以合并為同一單元。本發(fā)明實(shí)施例將程序運(yùn)行所需的數(shù)據(jù)存儲(chǔ)在預(yù)置的磁盤空間中,在程序運(yùn)行時(shí), 根據(jù)預(yù)設(shè)的內(nèi)存使用參數(shù),從預(yù)置的磁盤空間中獲取相應(yīng)大小的數(shù)據(jù)進(jìn)行查找,減少了將程序運(yùn)行的全部數(shù)據(jù)加載至內(nèi)存所帶來的內(nèi)存負(fù)荷,同時(shí)可保證數(shù)據(jù)的完整性,保證程序運(yùn)行的可靠性。為了更清楚地說明本發(fā)明,下面將由本發(fā)明的數(shù)據(jù)處理裝置所執(zhí)行的數(shù)據(jù)處理方法進(jìn)行詳細(xì)介紹。請(qǐng)參見圖6,為本發(fā)明的數(shù)據(jù)處理方法的第一實(shí)施例的流程圖;所述方法包括 S101,程序運(yùn)行時(shí),根據(jù)預(yù)設(shè)的內(nèi)存使用參數(shù),從預(yù)置的磁盤空間中查找所述程序運(yùn)行
所需的數(shù)據(jù)并加載至內(nèi)存。由于程序所需處理的數(shù)據(jù)量往往較大,在程序運(yùn)行時(shí),直接將數(shù)據(jù)加載至內(nèi)存進(jìn)行處理,會(huì)占據(jù)大量的內(nèi)存空間,影響程序運(yùn)行,因此,可預(yù)先將程序運(yùn)行所需的數(shù)據(jù)存儲(chǔ)至預(yù)置的磁盤空間中,當(dāng)程序運(yùn)行時(shí),步驟SlOl根據(jù)預(yù)設(shè)的內(nèi)存使用參數(shù),從所述預(yù)置的磁盤空間中讀取數(shù)據(jù)并加載至內(nèi)存中。其中,所述預(yù)設(shè)的內(nèi)存使用參數(shù)是指預(yù)先設(shè)定的可使用的內(nèi)存大小,該大小可以為內(nèi)存的整個(gè)存儲(chǔ)空間,也可以是內(nèi)存的部分存儲(chǔ)空間,所述預(yù)設(shè)的內(nèi)存使用參數(shù)可根據(jù)實(shí)際需要進(jìn)行設(shè)定,在此不贅述。具體請(qǐng)一并參見圖7,為圖6所示的步驟SlOl的具體流程圖;步驟SlOl包括 Sll,程序運(yùn)行時(shí),計(jì)算所述程序運(yùn)行所需的數(shù)據(jù)的校驗(yàn)值。步驟Sll中,在程序運(yùn)行時(shí),首先計(jì)算所述程序運(yùn)行所需的數(shù)據(jù)的CRC32值,該計(jì)算過程與現(xiàn)有的CRC的計(jì)算過程相同,在此不贅述。S12,查找所述索引表中是否包含計(jì)算得到的所述檢驗(yàn)值;若查找結(jié)果為是,轉(zhuǎn)入步驟S13 ;否則,轉(zhuǎn)入S17。所述索引表包含所述預(yù)置的磁盤空間內(nèi)存儲(chǔ)的各個(gè)數(shù)據(jù)的偏移量、大小、校驗(yàn)值和引用計(jì)數(shù),當(dāng)步驟Sll計(jì)算得到需要寫入的數(shù)據(jù)的CRC32值后,步驟S12則查找所述索引表中是否包含相同的CRC32值??梢岳斫獾氖牵羲鰯?shù)據(jù)已被寫入所述預(yù)置的磁盤空間中,則所述索引表中必定包含該CRC32值,查找結(jié)果為是,轉(zhuǎn)入步驟S13 ;若所述數(shù)據(jù)尚未被寫入所述預(yù)置的磁盤空間中,則所述索引表中未包含該CRC32值,查找結(jié)果為否,轉(zhuǎn)入步驟 S17。S13,從所述索引表中讀取所述校驗(yàn)值對(duì)應(yīng)的數(shù)據(jù)的大小,比較所述數(shù)據(jù)的大小和所述預(yù)設(shè)的內(nèi)存使用參數(shù)。若步驟S12的查找結(jié)果為是,表明所述數(shù)據(jù)已被存儲(chǔ)至所述預(yù)置的磁盤空間中, 步驟S13則從所述索引表中讀取所述數(shù)據(jù)的大小,并比較所述數(shù)據(jù)的大小和所述預(yù)設(shè)的內(nèi)存使用參數(shù)。其中,所述預(yù)設(shè)的內(nèi)存使用參數(shù)是指預(yù)先設(shè)定的可使用的內(nèi)存大小,該大小可以為內(nèi)存的整個(gè)存儲(chǔ)空間,也可以是內(nèi)存的部分存儲(chǔ)空間,所述預(yù)設(shè)的內(nèi)存使用參數(shù)可根據(jù)實(shí)際需要進(jìn)行設(shè)定,在此不贅述。S14,判斷所述數(shù)據(jù)的大小是否大于所述預(yù)設(shè)的內(nèi)存使用參數(shù);若判斷結(jié)果為是, 轉(zhuǎn)入步驟S15 ;否則,轉(zhuǎn)入步驟S16。S15,按照所述預(yù)設(shè)的內(nèi)存使用參數(shù)分段從所述預(yù)置的磁盤空間中讀取所述數(shù)據(jù)加載至內(nèi)存中。若步驟S14比較結(jié)果為是,步驟S15則按照所述預(yù)設(shè)的內(nèi)存使用參數(shù)分段從所述預(yù)置的磁盤空間中讀取所述數(shù)據(jù),比如若預(yù)設(shè)的內(nèi)存使用參數(shù)為50M,所述數(shù)據(jù)為120M, 則步驟S15每次只能讀取不大于50M的數(shù)據(jù)映射至內(nèi)存中,本實(shí)施例中,步驟S15按照所述預(yù)設(shè)的內(nèi)存使用參數(shù)對(duì)所述數(shù)據(jù)進(jìn)行分段讀取,即第一次讀取50M數(shù)據(jù)映射至內(nèi)存,當(dāng)該 50M數(shù)據(jù)被處理完畢后,繼續(xù)取后50M數(shù)據(jù)映射至內(nèi)存進(jìn)行處理,最后取剩余的20M數(shù)據(jù)映射至內(nèi)存中進(jìn)行處理。需要說明的是,步驟S15進(jìn)行分段讀取時(shí),也可以按照預(yù)設(shè)的、不大于所述預(yù)設(shè)的內(nèi)存使用參數(shù)的值進(jìn)行分段讀取,依上述例子,比如步驟S15每次取40M數(shù)據(jù)映射至內(nèi)存進(jìn)行處理,等等,其他情況下可類似分析,在此不贅述。S16,從所述預(yù)置的磁盤空間中讀取所述數(shù)據(jù)并加載至內(nèi)存;之后,轉(zhuǎn)入步驟 S102。若S14比較結(jié)果為否,步驟S16則直接從所述預(yù)置的磁盤空間中讀取所述數(shù)據(jù),比如若預(yù)設(shè)的內(nèi)存使用參數(shù)為50M,所述數(shù)據(jù)為40M,則步驟S16直接讀取該40M的數(shù)據(jù)映射至內(nèi)存中進(jìn)行處理。S17,將所述程序運(yùn)行所需的數(shù)據(jù)存儲(chǔ)至所述預(yù)置的磁盤空間中,并更新所述索引表;之后,轉(zhuǎn)入步驟S102。若步驟S12的查找結(jié)果為否,表明所述數(shù)據(jù)尚未存儲(chǔ)于所述預(yù)置的磁盤空間中, 步驟S17則需要將所述數(shù)據(jù)存儲(chǔ)至所述預(yù)置的磁盤空間中,具體地,步驟S17可以采用從尾追加的方式寫入所述數(shù)據(jù),即從所述預(yù)置的存儲(chǔ)空間存儲(chǔ)的數(shù)據(jù)的尾端添加所述需要寫入的數(shù)據(jù),然后更新所述索引表,在所述索引表中添加新寫入的所述數(shù)據(jù)的偏移量、CRC32值、 大小和引用計(jì)數(shù)等索引信息。S102,運(yùn)行所述程序,處理已加載的所述數(shù)據(jù)。當(dāng)步驟SlOl將數(shù)據(jù)加載至內(nèi)存后, 步驟S102則運(yùn)行所述程序,處理已加載的所述數(shù)據(jù)。請(qǐng)參見圖8,為本發(fā)明的數(shù)據(jù)處理方法的第二實(shí)施例的流程圖;所述方法包括 S201,將程序運(yùn)行所需的各種數(shù)據(jù)存儲(chǔ)至預(yù)置的磁盤空間中,并建立索引表。所述索引表可以包括所述預(yù)置的磁盤空間內(nèi)存儲(chǔ)的各個(gè)數(shù)據(jù)的偏移量、大小、校驗(yàn)值和引用計(jì)數(shù);其中,各個(gè)數(shù)據(jù)的偏移量表示各個(gè)數(shù)據(jù)在所述預(yù)置的磁盤空間內(nèi)的存儲(chǔ)
11位置。實(shí)際應(yīng)用中,所述預(yù)置的磁盤空間內(nèi)存儲(chǔ)的各個(gè)數(shù)據(jù)可以采用樹型結(jié)構(gòu)表進(jìn)行表示, 所述樹型結(jié)構(gòu)表的結(jié)構(gòu)可參見圖3所示。請(qǐng)一并參見圖9,為圖8所示的步驟S201的具體流程圖;步驟S201包括 S21,預(yù)先設(shè)置用于存儲(chǔ)程序運(yùn)行所需的各種數(shù)據(jù)的磁盤空間,并建立索引表。具體實(shí)現(xiàn)中,步驟S21預(yù)先在磁盤中設(shè)置一個(gè)空間,該空間用來存儲(chǔ)程序運(yùn)行所需的各種數(shù)據(jù),并建立該預(yù)置的磁盤空間對(duì)應(yīng)的索引表。所述索引表包括所述預(yù)置的磁盤空間內(nèi)存儲(chǔ)的各個(gè)數(shù)據(jù)的偏移量、大小、校驗(yàn)值和引用計(jì)數(shù);其中,各個(gè)數(shù)據(jù)的偏移量表示各個(gè)數(shù)據(jù)在所述預(yù)置的磁盤空間內(nèi)的存儲(chǔ)位置。S22,當(dāng)所述預(yù)置的磁盤空間有數(shù)據(jù)寫入時(shí),計(jì)算所述數(shù)據(jù)的校驗(yàn)值。當(dāng)需要向預(yù)置的磁盤空間寫入數(shù)據(jù)時(shí),步驟S22計(jì)算需要寫入的數(shù)據(jù)的校驗(yàn)值, 即CRC32值。該計(jì)算過程與現(xiàn)有的CRC的計(jì)算過程相同,在此不贅述。S23,判斷所述索引表中是否包含計(jì)算得到的所述檢驗(yàn)值,若判斷結(jié)果為是,轉(zhuǎn)入步驟S24 ;否則,轉(zhuǎn)入步驟S25。所述索引表包含所述預(yù)置的磁盤空間內(nèi)存儲(chǔ)的各個(gè)數(shù)據(jù)的偏移量、大小、校驗(yàn)值和引用計(jì)數(shù),當(dāng)步驟S22計(jì)算得到需要寫入的數(shù)據(jù)的CRC32值后,步驟S23則判斷所述索引表中是否包含相同的CRC32值??梢岳斫獾氖?,若需要寫入的數(shù)據(jù)在此之前已被寫入所述預(yù)置的磁盤空間中,則所述索引表中必定包含該CRC32值,判斷結(jié)果為是,轉(zhuǎn)入步驟S24,若需要寫入的數(shù)據(jù)尚未被寫入所述預(yù)置的磁盤空間中,則所述索引表中未包含該CRC32值, 判斷結(jié)果為否,轉(zhuǎn)入步驟S25。S24,更新所述索引表中的所述檢驗(yàn)值對(duì)應(yīng)的數(shù)據(jù)的引用計(jì)數(shù);之后,轉(zhuǎn)入步驟 S202。若步驟S23的判斷結(jié)果為是,表明所述需要寫入的數(shù)據(jù)已被存儲(chǔ)至所述預(yù)置的磁盤空間中,步驟SM則無需再對(duì)該數(shù)據(jù)進(jìn)行寫入操作,僅需要更新所述索引表,將所述索引表中該數(shù)據(jù)的引用計(jì)數(shù)加1。其中,各個(gè)數(shù)據(jù)的引用計(jì)數(shù)表明各個(gè)數(shù)據(jù)需要被寫入預(yù)置的磁盤空間的次數(shù)。當(dāng)有相同的數(shù)據(jù)寫入時(shí),步驟SM僅對(duì)索引表中的引用計(jì)數(shù)進(jìn)行更新,可避免寫入同樣的數(shù)據(jù)所帶來的資源浪費(fèi),比如相同的偏移量、大小等信息的存儲(chǔ),浪費(fèi)了存儲(chǔ)空間。S25,將所述數(shù)據(jù)存儲(chǔ)至所述預(yù)置的磁盤空間中,并更新所述索引表。若步驟S23的判斷結(jié)果為否,表明所述需要寫入的數(shù)據(jù)尚未存儲(chǔ)于所述預(yù)置的磁盤空間中,步驟S25則需要將所述數(shù)據(jù)存儲(chǔ)至所述預(yù)置的磁盤空間中,具體地,步驟S25可以采用從尾追加的方式寫入所述數(shù)據(jù),即從所述預(yù)置的存儲(chǔ)空間存儲(chǔ)的數(shù)據(jù)的尾端添加所述需要寫入的數(shù)據(jù),然后更新所述索引表,在所述索引表中添加新寫入的所述數(shù)據(jù)的偏移量、CRC32值、大小和引用計(jì)數(shù)等索引信息。S202,程序運(yùn)行時(shí),根據(jù)預(yù)設(shè)的內(nèi)存使用參數(shù),從預(yù)置的磁盤空間中查找所述程序運(yùn)行所需的數(shù)據(jù)并加載至內(nèi)存。S203,運(yùn)行所述程序,處理已加載的所述數(shù)據(jù)。本實(shí)施例中,步驟S202-步驟S203與上一實(shí)施例的步驟SlOl-步驟S102的具體流程相同,在此不贅述。S204,當(dāng)所述預(yù)置的磁盤空間中的數(shù)據(jù)發(fā)生變化時(shí),更新所述索引表,并記錄每次數(shù)據(jù)變化對(duì)應(yīng)的所述索引表的更新信息。每當(dāng)所述預(yù)置的磁盤空間中的數(shù)據(jù)發(fā)生變化時(shí),所述索引表也會(huì)相應(yīng)發(fā)生變化, 步驟S204依據(jù)發(fā)生變化的數(shù)據(jù),更新所述索引表,并記錄每次數(shù)據(jù)變化對(duì)應(yīng)的所述索引表的更新信息。S205,根據(jù)記錄的每次數(shù)據(jù)變化對(duì)應(yīng)的所述索引表的更新信息,對(duì)引起所述數(shù)據(jù)變化的操作進(jìn)行撤銷恢復(fù)。由于所述預(yù)置的磁盤空間中的數(shù)據(jù)都以追加的方式進(jìn)行寫入,當(dāng)需要恢復(fù)到某一操作的數(shù)據(jù)時(shí),用戶僅需要向所述數(shù)據(jù)處理裝置輸入撤銷恢復(fù)指令,步驟S205根據(jù)該撤銷恢復(fù)指令以及步驟S204記錄的所述每次數(shù)據(jù)變化對(duì)應(yīng)的索引表的更新信息,恢復(fù)到相應(yīng)操作的索引表,即可達(dá)到對(duì)引起所述數(shù)據(jù)變化的操作進(jìn)行撤銷恢復(fù)。需要說明的是,本實(shí)施例中,步驟S204與步驟S202在時(shí)序上不分先后,步驟S201 將數(shù)據(jù)存儲(chǔ)至預(yù)置的磁盤空間并建立索引表之后,如果所述預(yù)置的磁盤空間中的數(shù)據(jù)發(fā)生變化,則執(zhí)行步驟S204。本發(fā)明實(shí)施例將程序運(yùn)行所需的數(shù)據(jù)存儲(chǔ)在預(yù)置的磁盤空間中,在程序運(yùn)行時(shí), 根據(jù)預(yù)設(shè)的內(nèi)存使用參數(shù),從預(yù)置的磁盤空間中獲取相應(yīng)大小的數(shù)據(jù)進(jìn)行加載和處理,減少了將程序運(yùn)行的全部數(shù)據(jù)加載至內(nèi)存所帶來的內(nèi)存負(fù)荷,同時(shí)可保證數(shù)據(jù)的完整性,保證程序運(yùn)行的可靠性。本領(lǐng)域普通技術(shù)人員可以理解實(shí)現(xiàn)上述實(shí)施例方法中的全部或部分流程,是可以通過計(jì)算機(jī)程序來指令相關(guān)的硬件來完成,所述的程序可存儲(chǔ)于一計(jì)算機(jī)可讀取存儲(chǔ)介質(zhì)中,該程序在執(zhí)行時(shí),可包括如上述各方法的實(shí)施例的流程。其中,所述的存儲(chǔ)介質(zhì)可為磁碟、光盤、只讀存儲(chǔ)記憶體(Read-Only Memory, ROM)或隨機(jī)存儲(chǔ)記憶體(Random Access Memory, RAM)等。以上所揭露的僅為本發(fā)明較佳實(shí)施例而已,當(dāng)然不能以此來限定本發(fā)明之權(quán)利范圍,本領(lǐng)域普通技術(shù)人員可以理解實(shí)現(xiàn)上述實(shí)施例的全部或部分流程,并依本發(fā)明權(quán)利要求所作的等同變化,仍屬于發(fā)明所涵蓋的范圍。
權(quán)利要求
1.一種數(shù)據(jù)處理方法,其特征在于,包括程序運(yùn)行時(shí),根據(jù)預(yù)設(shè)的內(nèi)存使用參數(shù),從預(yù)置的磁盤空間中查找所述程序運(yùn)行所需的數(shù)據(jù)并加載至內(nèi)存;運(yùn)行所述程序,處理已加載的所述數(shù)據(jù)。
2.如權(quán)利要求1所述的方法,其特征在于,所述程序運(yùn)行時(shí),根據(jù)預(yù)設(shè)的內(nèi)存使用參數(shù),從預(yù)置的磁盤空間中查找所述程序運(yùn)行所需的數(shù)據(jù)并加載至內(nèi)存之前,還包括將程序運(yùn)行所需的各種數(shù)據(jù)存儲(chǔ)至預(yù)置的磁盤空間中,并建立索引表; 所述索引表包括所述預(yù)置的磁盤空間內(nèi)存儲(chǔ)的各個(gè)數(shù)據(jù)的偏移量、大小、校驗(yàn)值和引用計(jì)數(shù);其中,各個(gè)數(shù)據(jù)的偏移量表示各個(gè)數(shù)據(jù)在所述預(yù)置的磁盤空間內(nèi)的存儲(chǔ)位置。
3.如權(quán)利要求2所述的方法,其特征在于,所述將程序運(yùn)行所需的各種數(shù)據(jù)存儲(chǔ)至預(yù)置的磁盤空間中,并建立索引表,包括預(yù)先設(shè)置用于存儲(chǔ)程序運(yùn)行所需的各種數(shù)據(jù)的磁盤空間,并建立索引表;當(dāng)所述預(yù)置的磁盤空間有數(shù)據(jù)寫入時(shí),計(jì)算所述數(shù)據(jù)的校驗(yàn)值;判斷所述索引表中是否包含計(jì)算得到的所述檢驗(yàn)值;若判斷結(jié)果為是,更新所述索引表中的所述檢驗(yàn)值對(duì)應(yīng)的數(shù)據(jù)的引用計(jì)數(shù);若判斷結(jié)果為否,將所述數(shù)據(jù)存儲(chǔ)至所述預(yù)置的磁盤空間中,并更新所述索引表。
4.如權(quán)利要求2或3所述的方法,其特征在于,所述程序運(yùn)行時(shí),根據(jù)預(yù)設(shè)的內(nèi)存使用參數(shù),從預(yù)置的磁盤空間中查找所述程序運(yùn)行所需的數(shù)據(jù)并加載至內(nèi)存,包括程序運(yùn)行時(shí),計(jì)算所述程序運(yùn)行所需的數(shù)據(jù)的校驗(yàn)值; 查找所述索引表中是否包含計(jì)算得到的所述檢驗(yàn)值;若查找結(jié)果為是,從所述索引表中讀取所述校驗(yàn)值對(duì)應(yīng)的數(shù)據(jù)的大小,比較所述數(shù)據(jù)的大小和所述預(yù)設(shè)的內(nèi)存使用參數(shù);若所述數(shù)據(jù)的大小大于所述預(yù)設(shè)的內(nèi)存使用參數(shù),按照所述預(yù)設(shè)的內(nèi)存使用參數(shù)分段從所述預(yù)置的磁盤空間中讀取所述數(shù)據(jù)加載至內(nèi)存中;若所述數(shù)據(jù)的大小小于等于所述預(yù)設(shè)的內(nèi)存使用參數(shù),從所述預(yù)置的磁盤空間中讀取所述數(shù)據(jù)并加載至內(nèi)存;若查找結(jié)果為否,將所述程序運(yùn)行所需的數(shù)據(jù)存儲(chǔ)至所述預(yù)置的磁盤空間中,并更新所述索引表。
5.如權(quán)利要求2或3所述的方法,其特征在于,還包括當(dāng)所述預(yù)置的磁盤空間中的數(shù)據(jù)發(fā)生變化時(shí),更新所述索引表,并記錄每次數(shù)據(jù)變化對(duì)應(yīng)的所述索引表的更新信息;根據(jù)記錄的每次數(shù)據(jù)變化對(duì)應(yīng)的所述索引表的更新信息,對(duì)引起所述數(shù)據(jù)變化的操作進(jìn)行撤銷恢復(fù)。
6.一種數(shù)據(jù)處理裝置,其特征在于,包括查找模塊,用于當(dāng)程序運(yùn)行時(shí),根據(jù)預(yù)設(shè)的內(nèi)存使用參數(shù),從預(yù)置的磁盤空間中查找所述程序運(yùn)行所需的數(shù)據(jù);加載模塊,用于將所述查找模塊查找到的所述數(shù)據(jù)加載至內(nèi)存; 處理模塊,用于運(yùn)行所述程序,處理所述加載模塊已加載的所述數(shù)據(jù)。
7.如權(quán)利要求6所述的裝置,其特征在于,還包括初始化模塊,用于將程序運(yùn)行所需的各種數(shù)據(jù)存儲(chǔ)至預(yù)置的磁盤空間中,并建立索引表;所述索引表包括所述預(yù)置的磁盤空間內(nèi)存儲(chǔ)的各個(gè)數(shù)據(jù)的偏移量、大小、校驗(yàn)值和引用計(jì)數(shù);其中,各個(gè)數(shù)據(jù)的偏移量表示各個(gè)數(shù)據(jù)在所述預(yù)置的磁盤空間內(nèi)的存儲(chǔ)位置。
8.如權(quán)利要求7所述的裝置,其特征在于,所述初始化模塊包括預(yù)置單元,用于預(yù)先設(shè)置用于存儲(chǔ)程序運(yùn)行所需的各種數(shù)據(jù)的磁盤空間,并建立索引表;計(jì)算單元,用于當(dāng)所述預(yù)置單元預(yù)置的磁盤空間有數(shù)據(jù)寫入時(shí),計(jì)算所述數(shù)據(jù)的校驗(yàn)值;判斷單元,用于判斷所述預(yù)置單元建立的索引表中是否包含所述計(jì)算單元計(jì)算得到的所述檢驗(yàn)值;執(zhí)行單元,用于當(dāng)所述判斷單元判斷結(jié)果為是時(shí),更新所述索引表中所述檢驗(yàn)值對(duì)應(yīng)的數(shù)據(jù)的引用計(jì)數(shù);當(dāng)所述判斷單元判斷結(jié)果為否時(shí),將所述數(shù)據(jù)存儲(chǔ)至所述預(yù)置的磁盤空間中,并更新所述索引表。
9.如權(quán)利要求7或8所述的裝置,其特征在于,所述查找模塊包括 計(jì)算單元,用于當(dāng)程序運(yùn)行時(shí),計(jì)算所述程序運(yùn)行所需的數(shù)據(jù)的校驗(yàn)值;查找單元,用于查找所述索引表中是否包含所述計(jì)算單元計(jì)算得到的所述檢驗(yàn)值; 比較單元,用于當(dāng)所述查找單元查找結(jié)果為是時(shí),從所述索引表中讀取所述校驗(yàn)值對(duì)應(yīng)的數(shù)據(jù)的大小,比較所述數(shù)據(jù)的大小和所述預(yù)設(shè)的內(nèi)存使用參數(shù);讀取單元,用于當(dāng)所述比較單元比較得到所述數(shù)據(jù)的大小大于所述預(yù)設(shè)的內(nèi)存使用參數(shù)時(shí),按照所述預(yù)設(shè)的內(nèi)存使用參數(shù)分段從所述預(yù)置的磁盤空間中讀取所述數(shù)據(jù);當(dāng)所述比較單元比較得到所述數(shù)據(jù)的大小小于等于所述預(yù)設(shè)的內(nèi)存使用參數(shù)時(shí),從所述預(yù)置的磁盤空間中讀取所述數(shù)據(jù);存儲(chǔ)更新單元,用于當(dāng)所述查找單元查找結(jié)果為否時(shí),將所述程序運(yùn)行所需的數(shù)據(jù)存儲(chǔ)至所述預(yù)置的磁盤空間中,并更新所述索引表。
10.如權(quán)利要求7或8所述的裝置,其特征在于,還包括記錄模塊,用于當(dāng)所述預(yù)置的磁盤空間中的數(shù)據(jù)發(fā)生變化時(shí),更新所述索引表,并記錄每次數(shù)據(jù)變化對(duì)應(yīng)的所述索引表的更新信息;撤銷恢復(fù)模塊,用于根據(jù)所述記錄模塊記錄的每次數(shù)據(jù)變化對(duì)應(yīng)的所述索引表的更新信息,對(duì)引起所述數(shù)據(jù)變化的操作進(jìn)行撤銷恢復(fù)。
全文摘要
本發(fā)明實(shí)施例公開了一種數(shù)據(jù)處理方法,包括程序運(yùn)行時(shí),根據(jù)預(yù)設(shè)的內(nèi)存使用參數(shù),從預(yù)置的磁盤空間中查找所述程序運(yùn)行所需的數(shù)據(jù)并加載至內(nèi)存;運(yùn)行所述程序,處理已加載的所述數(shù)據(jù)。本發(fā)明實(shí)施例還公開了一種數(shù)據(jù)處理裝置。本發(fā)明在程序運(yùn)行時(shí),根據(jù)預(yù)設(shè)的內(nèi)存使用參數(shù)對(duì)數(shù)據(jù)進(jìn)行讀取、加載和處理,減少內(nèi)存的負(fù)荷,保證數(shù)據(jù)的完整性,保證程序運(yùn)行的可靠性。
文檔編號(hào)G06F9/312GK102331920SQ20111021003
公開日2012年1月25日 申請(qǐng)日期2011年7月26日 優(yōu)先權(quán)日2011年7月26日
發(fā)明者吳思然 申請(qǐng)人:深圳市萬興軟件有限公司