專利名稱:一種實現(xiàn)內存數據庫表存盤和加載的方法
技術領域:
本發(fā)明涉及移動通信領域的數據庫,尤其涉及一種實現(xiàn)內存數據庫表存 盤和加載的方法。
背景技術:
在移動通信技術應用中,需要創(chuàng)建多個內存表以存放業(yè)務應用所需要的 數據配置信息。為了保存配置數據,需要將配置數據存盤。在其它單板或系 統(tǒng)需要時,可從》茲盤加載而不需要再重新配置。隨著業(yè)務應用功能的擴充,數據庫應用所需的數據量劇增,體現(xiàn)在兩方面 一是表數目越來越多,二是 表容量擴充,耗用的內存、外存空間越來越大。原數據庫的存盤機制采用非壓縮機制存檔,存檔文件大小為各數據表的 最大需求空間之和,與具體表的實際記錄數無關。單張數據表,即使內存中 該表無數據記錄,存盤后,在數據庫存檔文件中,也按最大表容量占用外設 空間。隨著目前應用導致的數據擴充,而^f茲盤容量卻沒有增加的的情況下, 在磁盤上可供數據庫存盤的剩余空間越來越少。在外場應用中已多次出現(xiàn)外 設容量不夠導致存盤失敗的故障。發(fā)明內容本發(fā)明提供一種實現(xiàn)內存數據庫表存盤和加載的方法,以解決磁盤容量 不足的問題。為了解決上述技術問題,本發(fā)明提供一種實現(xiàn)內存數據庫表存盤的方 法,包4舌如下步驟(1)在進行內存數據庫表存盤時,將有記錄的內存表數據加載到內存 緩沖區(qū);(2)創(chuàng)建表存盤文件并向表存盤文件中寫入表注冊信息; (3 )計算所述內存表數據的校驗和;(4)對所述內存表數據進行分塊壓縮并將壓縮結果和所述校驗和寫入 對應的表存盤文件。本發(fā)明所述方法,其中,步驟(4)中,以分塊壓縮方式寫入數據時,根據分塊時保持記錄完整 性的原則計算壓縮塊的大小即根據最大壓縮塊大小除以表的記錄長度,得 到最多的記錄數,然后以此記錄數乘以記錄長度來獲取壓縮塊的大小;所述 壓縮結果包括壓縮塊大小和壓縮塊個數。本發(fā)明所述方法,其中,步驟(2)中,創(chuàng)建表存盤文件時以表名為存盤文件名,并加一文件后綴。本發(fā)明所述方法,其中,步驟(4)中,在存盤過程中按偏移量進行逐塊地寫入,全部分塊寫入 之后進行延時。進一步地,所述內存數據庫表存盤后的結構包括 數據N,表示壓縮塊的個數; 數據校驗和;文件有效性結構體,用于記錄各N個壓縮塊的大??;各個壓縮塊的數據,其中第一個壓縮塊是表的結構說明的注冊信息壓縮 塊,其后是表的數據的各壓縮塊。進一步地,所述N為O或超過最大壓縮塊個數都視為此數據無效。本發(fā)明還提供一種實現(xiàn)如上所述方法存盤的內存數據庫表加載的方法, 包括如下步驟(a)讀取內存表注冊結構數據;(b) 分塊讀取指定表的壓縮內存表數據到內存緩沖區(qū),并進行解壓縮;(c) 待所有分塊數據都解壓縮完畢,將內存緩沖區(qū)的數據加載到內存表中。本發(fā)明所述加載的方法,其中,步驟(a)中,根據壓縮塊個數計算文件有效性結構數據的長度,然后 依此長度讀取文件有效性結構數據,即數據校驗和與各壓縮塊大小。本發(fā)明所述加載的方法,其中,步驟(c)中,在加載過程中,將緩沖區(qū)中表的注冊信息與當前表的注 冊信息中的最大數據量對比,如果緩沖區(qū)中表的記錄數與記錄長度之積大于 當前表的表容量與記錄長度之積,則以當前表的數據量為準作為需要加載的 數據量,否則仍以磁盤中的數據量作為需要加載的數據量。本發(fā)明所述加載的方法,其中,步驟(c)中,對解壓后的表數據進行校驗和計算,將計算結果與讀取 的校驗和比較,如果一致,iL為凝:據正確,否則數據錯誤。本發(fā)明所述方案可以根據內存表的實際表數據內容進行存盤,在存盤過 程中加以分塊壓縮處理,節(jié)約了磁盤空間,加快了存盤的速度,也可進行版 本回退的處理。
圖1是本發(fā)明應用實例一種磁盤文件的存盤結構示意圖;圖2是本發(fā)明應用實例將一個表的數據內容寫入到磁盤的流程示意圖;圖3是本發(fā)明應用實例將圖2中存盤的磁盤文件加載到內存緩沖區(qū)的流 程示意圖。
具體實施方式
本發(fā)明提出了按表的實際數據進行分表存盤的方法在存盤時,只對有 記錄的表進行存盤,并且按實際數據進行存盤處理。在存盤過程中對表數據內容進行壓縮處理。為了解決壓縮與解壓縮大數據量時CPU的占用率過高的問題,確定將表的數據量根據一定的大小進行分塊處理,每處理完一分塊數據后進行延時,以降低CPU的占用率,然后將壓縮后的數據逐塊寫入磁 盤。這樣處理的效果是節(jié)約了磁盤空間,增加了表的存盤速度,降低了 CPU的占用率。以下結合附圖和具體實施方式
對本發(fā)明所述技術方案進行詳細描述。本方案的實施包括數據存盤與數據加載。數據存盤是將內存表數據結構 及記錄內容進行存盤處理,數據加載是將磁盤上的存盤文件加載到內存數據 庫中的內存表中。如圖l所示,是本發(fā)明應用實例一種磁盤文件的存盤結構示意圖,首先是2字節(jié)的數據N, N為O或超過最大壓縮塊個數都視為此數據無效,否則 表示壓縮塊的個數;然后是4字節(jié)的數據校驗和,其次用于記錄各N個壓 縮塊的大小,再其次是各個壓縮塊的數據。其中第一個壓縮塊是表的結構說 明的注冊信息壓縮塊,其后是表的數據的各壓縮塊。如圖2所示,本發(fā)明應用實例將一個表的數據內容寫入到磁盤的流程示 意圖,包括如下步驟步驟201:在進行內存數據庫表存盤時,將內存表加載到內存緩沖區(qū);步驟202:獲取表所在的存盤目錄及文件名;步驟203:判斷當前表是否有記錄;如沒有,則轉步驟204;如有,轉 步驟205;步驟204:刪除磁盤中當前文件,流程結束;步驟205:計算當前表存盤時的壓縮塊個數根據分塊時保持記錄完整 性的原則計算壓縮塊的大小以最大壓縮塊除以表記錄的長度獲取記錄個 數,再以記錄個數乘以記錄長度來獲得壓縮塊的大??;然后按此大小為標準, 由需要存盤的表的數據量來計算可能的壓縮塊個數;步驟206:創(chuàng)建表存盤文件;創(chuàng)建表存盤文件時以表名為存盤文件名, 并加一文件后綴;步驟208:在文件頭寫入O,表示開始存盤,并計算此表數據的校驗和;步驟209:以壓縮方式寫入表的注冊信息按壓縮塊個數N計算文件有 效性的數據長度,即4字節(jié)的文件校驗和加上N個2字節(jié)的壓縮塊大小之 和;然后對表的注冊信息進行壓縮,將壓縮結果寫入》茲盤的第一個壓縮塊中;步驟210:以壓縮方式寫入表的數據信息對表的數據信息按壓縮塊大 小分塊進行壓縮,依次讀取每塊的數據量,并對其進行壓縮,將每塊的壓縮 結果根據每塊數據的偏移量寫入》茲盤,直至所有數據信息都成功寫入磁盤, 同時在文件有效性結構體中記錄每個塊壓縮后的大小,全部分塊寫入之后進 行延時;步驟211:將校驗和,連同壓縮塊大小寫入表存盤文件中; 步驟212:將壓縮塊個數寫入文件頭中; 步驟213.關閉文件,流程結束。如圖3所示,是本發(fā)明應用實例將圖2中存盤的^f茲盤文件加載到內存緩 沖區(qū)的流程示意圖,包括如下步驟步驟301:打開磁盤文件;步驟302:讀取文件頭2字節(jié)的數據;步驟303:判斷文件頭數據是否合法(即判斷文件頭數據是否為0或超 過最大壓縮塊個數)如果此數據為0或超過最大壓縮塊個數,則此數據非 法,轉步驟309;如果此數據合法,則轉步驟304;步驟304:根據壓縮塊個數計算文件有效性結構數據的長度,然后依此 長度讀取文件有效性結構數據,即數據校驗和與各壓縮塊大?。徊襟E305:讀取表的注冊信息壓縮塊,即第一個壓縮塊數據,也就是表 的注冊結構的壓縮塊,并對其解壓,將解壓結果存放在緩沖區(qū)中表的注冊信 息;步驟306:根據注冊信息計算需要讀取的數據量將緩沖區(qū)中表的注冊 信息與當前表的注冊信息中的最大數據量對比,如果緩沖區(qū)中表的記錄數與 記錄長度之積大于當前表的表容量與記錄長度之積(這是由于版本不一致原 因造成),則以當前表的數據量為準作為需要加載的數據量,否則仍以磁盤中的數據量作為需要加載的數據量;步驟307:置已經讀取的數據量變量DataTotal為0,讀取數據壓縮塊, 并對其解壓,DataTotal加上解壓縮后的大小,如果DataTotal小于需要加載 的數據量,則將壓縮結果拷貝到緩沖區(qū),重復這一操作,直至所有數據壓縮 塊讀取完畢;步驟308:對解壓后的表數據進行校驗和計算,將計算結果與讀取的校 驗和比較,如果一致,則認為數據正確,加載流程結束;如果不一致,則i^ 為數據錯誤,轉步驟309;步驟309:關閉文件,流程結束。本發(fā)明所述方案,并不僅僅限于說明書和實施方式中所列運用。對本發(fā) 明技術所屬領域的普通技術人員來說,可根據本發(fā)明作出各種相應的改變和 變形,而所有這些相應的改變和變形都屬于本發(fā)明權利要求的保護范圍。
權利要求
1、一種實現(xiàn)內存數據庫表存盤的方法,其特征在于,包括如下步驟(1)在進行內存數據庫表存盤時,將有記錄的內存表數據加載到內存緩沖區(qū);(2)創(chuàng)建表存盤文件并向表存盤文件中寫入表注冊信息;(3)計算所述內存表數據的校驗和;(4)對所述內存表數據進行分塊壓縮并將壓縮結果和所述校驗和寫入對應的表存盤文件。
2、 如權利要求l所述方法,其特征在于,步驟(4)中,以分塊壓縮方式寫入數據時,根據分塊時保持記錄完整 性的原則計算壓縮塊的大小即根據最大壓縮塊大小除以表的記錄長度,得 到最多的記錄數,然后以此記錄數乘以記錄長度來獲取壓縮塊的大??;所述 壓縮結果包括壓縮塊大小和壓縮塊個數。
3、 如權利要求l所述方法,其特征在于,步驟(2)中,創(chuàng)建表存盤文件時以表名為存盤文件名,并加一文件后綴。
4、 如權利要求l所述方法,其特征在于,步驟(4)中,在存盤過程中按偏移量進行逐塊地寫入,全部分塊寫入 之后進行延時。
5、 如權利要求1~4所述方法,其特征在于,所述內存數據庫表存盤后 的結構包括數據N,表示壓縮塊的個數;數據校驗和;文件有效性結構體,用于記錄各N個壓縮塊的大??; 各個壓縮塊的數據,其中第一個壓縮塊是表的結構說明的注冊信息壓縮 塊,其后是表的數據的各壓縮塊。
6、 如權利要求5所述方法,其特征在于,所述N為O或超過最大壓縮 塊個數都視為此數據無效。
7、 一種實現(xiàn)權利要求1所述方法存盤的內存數據庫表加載的方法,其 特征在于,包括如下步驟(a) 讀取內存表注冊結構數據;(b) 分塊讀取指定表的壓縮內存表數據到內存緩沖區(qū),并進行解壓縮;(c) 待所有分塊數據都解壓縮完畢,將內存緩沖區(qū)的數據加載到內存表中。
8、 如權利要求7所述方法,其特征在于,步驟(a)中,才艮據壓縮塊個數計算文件有效性結構數據的長度,然后 依此長度讀取文件有效性結構數據,即數據校驗和與各壓縮塊大小。
9、 如權利要求7所述方法,其特征在于,步驟(c)中,在加載過程中,將緩沖區(qū)中表的注冊信息與當前表的注 冊信息中的最大數據量對比,如果緩沖區(qū)中表的記錄數與記錄長度之積大于 當前表的表容量與記錄長度之積,則以當前表的數據量為準作為需要加載的 數據量,否則仍以磁盤中的數據量作為需要加載的數據量。
10、 如權利要求8所述方法,其特征在于,步驟(c)中,對解壓后的表數據進行校驗和計算,將計算結果與讀取 的才交驗和比較,如果一致,認為數據正確,否則數據錯誤。
全文摘要
本發(fā)明公開了一種實現(xiàn)內存數據庫表存盤的方法,包括1)在進行內存數據庫表存盤時,將有記錄的內存表數據加載到內存緩沖區(qū);2)創(chuàng)建表存盤文件并寫入表注冊信息;3)計算內存表數據的校驗和;4)對內存表數據進行分塊壓縮并將壓縮結果和校驗和寫入對應的表存盤文件。本發(fā)明還公開一種實現(xiàn)如上所述方法存盤的內存數據庫表加載的方法,包括a)讀取內存表注冊結構數據;b)分塊讀取指定表的壓縮內存表數據到內存緩沖區(qū),并進行解壓縮;c)待所有分塊數據都解壓縮完畢,將內存緩沖區(qū)的數據加載到內存表中。本發(fā)明所述方案可以根據內存表的實際表數據內容進行存盤,在存盤過程中加以分塊壓縮處理,節(jié)約了磁盤空間,加快了存盤的速度。
文檔編號G06F17/30GK101221577SQ20081000424
公開日2008年7月16日 申請日期2008年1月24日 優(yōu)先權日2008年1月24日
發(fā)明者楊紹明, 聰 葛, 龍 馬 申請人:中興通訊股份有限公司