專利名稱::一種網(wǎng)管海量歷史數(shù)據(jù)管理方法
技術(shù)領(lǐng)域:
:本發(fā)明涉及網(wǎng)管管理系統(tǒng)中歷史數(shù)據(jù)的管理,具體說(shuō)是一種網(wǎng)管海量歷史數(shù)據(jù)管理方法。
背景技術(shù):
:目前網(wǎng)絡(luò)技術(shù)日新月異,寬帶用戶規(guī)模不斷擴(kuò)大,電信網(wǎng)管系統(tǒng)管理的設(shè)備數(shù)量也在不斷增長(zhǎng),電信網(wǎng)管系統(tǒng)日常管理的日志、設(shè)備的告警數(shù)據(jù)等數(shù)據(jù)都需要保存在數(shù)據(jù)庫(kù)中,電信網(wǎng)管系統(tǒng)對(duì)這些數(shù)據(jù)的使用方式為記錄數(shù)據(jù)、查詢分析數(shù)據(jù)。經(jīng)過(guò)日積月累,這些數(shù)據(jù)越來(lái)越龐大,如果不對(duì)這些數(shù)據(jù)進(jìn)行有效的管理,無(wú)論是數(shù)據(jù)的插入或者是數(shù)據(jù)的查詢,性能都會(huì)急劇下降,從而影響網(wǎng)管軟件的正常使用。數(shù)據(jù)庫(kù)使用硬盤(pán)空間來(lái)保存其中的數(shù)據(jù),如果歷史數(shù)據(jù)無(wú)限增長(zhǎng),最終將耗盡所有磁盤(pán)空間,所以需要定期對(duì)歷史數(shù)據(jù)進(jìn)行清理,將數(shù)據(jù)庫(kù)中的一部分不常使用的數(shù)據(jù)轉(zhuǎn)儲(chǔ)到其它位置進(jìn)行保存、歸檔。而在數(shù)據(jù)轉(zhuǎn)移的過(guò)程中,網(wǎng)管則無(wú)法使用這些數(shù)據(jù),如果轉(zhuǎn)儲(chǔ)的效率低下則影響網(wǎng)管系統(tǒng)的可用性,必須提供一種高效的數(shù)據(jù)轉(zhuǎn)移方案。
發(fā)明內(nèi)容針對(duì)現(xiàn)有技術(shù)中存在的缺陷,本發(fā)明的目的在于提供一種網(wǎng)管海量歷史數(shù)據(jù)管理方法,能保存海量歷史數(shù)據(jù),并能高效的進(jìn)行數(shù)據(jù)的插入、查詢、轉(zhuǎn)移而不影響網(wǎng)管軟件的正常使用。為達(dá)到以上目的,本發(fā)明采取的技術(shù)方案是一種網(wǎng)管海量歷史數(shù)據(jù)管理方法,其特征在于通過(guò)二級(jí)分表規(guī)則實(shí)現(xiàn)數(shù)據(jù)庫(kù)分表,把保存有網(wǎng)管海量歷史數(shù)據(jù)的單個(gè)表保存的數(shù)據(jù),切分后保存到多個(gè)結(jié)構(gòu)相同的分表中,減少單表的容量,從而提高單表的處理效率,并對(duì)各個(gè)分表進(jìn)行以下管理A歷史數(shù)據(jù)分表管理,B歷史數(shù)據(jù)插入管理,C歷史數(shù)據(jù)查詢管理,D歷史數(shù)據(jù)轉(zhuǎn)移管理。在上述技術(shù)方案的基礎(chǔ)上,二級(jí)分表規(guī)則用xml格式的文件紀(jì)錄,其中歷史數(shù)據(jù)類型data_type,表示數(shù)據(jù)表保存數(shù)據(jù)的類型,分組總數(shù)group_count,表示對(duì)這種數(shù)據(jù)表分組的總數(shù),分組內(nèi)分表總數(shù)split_count,表示每個(gè)分組內(nèi)分表數(shù)最大值,分表內(nèi)行總數(shù)row_count,表示分表內(nèi)行總數(shù),當(dāng)一個(gè)分表的數(shù)據(jù)量超過(guò)這個(gè)值的時(shí)候,就需要?jiǎng)?chuàng)建一個(gè)新的分表。在上述技術(shù)方案的基礎(chǔ)上,所述歷史數(shù)據(jù)分表管理的處理流程包括以下步驟Al、讀取記載有數(shù)據(jù)表的二級(jí)分表規(guī)則的文件,獲取歷史數(shù)據(jù)類型data_type、分組總數(shù)group_count、分組內(nèi)分表總數(shù)split_count和分表內(nèi)行總數(shù)row_count;讀取數(shù)據(jù)庫(kù)分表信息表,獲取所有分表的分組號(hào)group_no、分表序號(hào)table_no、當(dāng)前正在使用標(biāo)記current_flag和已使用標(biāo)記in_use_flag,將這些信息保存到一個(gè)分組號(hào)為鍵,分表信息列表為值的map對(duì)象中,所述分表信息列表包括分表序號(hào)table_no、當(dāng)前正在使用標(biāo)記current_flag和已使用標(biāo)記in_use_flag,其中map的鍵的取值范圍從I到分組總數(shù)group_Count,如果在數(shù)據(jù)庫(kù)分表信息表中沒(méi)有某個(gè)鍵對(duì)應(yīng)的分表信息,那么在map中該鍵對(duì)應(yīng)的分表信息列表就為空;A2、遍歷Al得到的map對(duì)象;A3、根據(jù)遍歷的結(jié)果,如果map對(duì)象中當(dāng)前分組號(hào)對(duì)應(yīng)的分表信息列表為空,則轉(zhuǎn)至步驟A4,否則,轉(zhuǎn)至步驟A5;A4、在當(dāng)前分組號(hào)的分組中創(chuàng)建一個(gè)可用的分表,分配分表序號(hào)為1,設(shè)置分表當(dāng)前正在使用標(biāo)記為1,已使用標(biāo)記為1,將該分表的信息插入數(shù)據(jù)庫(kù)分表信息表后轉(zhuǎn)至步驟A5;A5、將數(shù)據(jù)庫(kù)分表信息表中記載的分表信息,按分組號(hào)為鍵,逐條插入到分組分表信息緩存中,該緩存用于記錄所有分組中已創(chuàng)建的分表的信息,將當(dāng)前正在使用標(biāo)記為I的分表信息,按分組號(hào)為鍵,將分表序號(hào)插入分組當(dāng)前分表序號(hào)緩存,該緩存記錄每個(gè)分組中current_flag為I的分表的分表序號(hào),轉(zhuǎn)步驟A6;分組當(dāng)前分表序號(hào)緩存內(nèi)的分表,需要檢查其是否超過(guò)分表內(nèi)行總數(shù);A6、使用定時(shí)器并等待,如果定時(shí)器未超時(shí)則一直等待,當(dāng)定時(shí)器超時(shí)后,如果接收到應(yīng)用程序退出的信號(hào),則退出歷史數(shù)據(jù)分表管理的處理流程;否則,轉(zhuǎn)入步驟A7;A7、遍歷分組當(dāng)前分表序號(hào)緩存,如果未遍歷完則轉(zhuǎn)步驟AS,若遍歷完則轉(zhuǎn)步驟A6;AS、讀取當(dāng)前分組中分表序號(hào),根據(jù)當(dāng)前分組的組號(hào)和分表序號(hào)構(gòu)造分表的名稱,獲取分表數(shù)據(jù)行數(shù);A9、如果分表數(shù)據(jù)行數(shù)大于分表規(guī)則中分表內(nèi)行總數(shù)lO^count,則轉(zhuǎn)步驟A10、否則轉(zhuǎn)步驟A7;A10、創(chuàng)建新分表,新分表的分表序號(hào)為分表所在分組中原來(lái)current_flag為I的分表的分表序號(hào)值加上I,然后在數(shù)據(jù)庫(kù)分表信息表中插入該新分表的信息,并將該新分表的信息插入到分組分表信息緩存中,然后將分組當(dāng)前分表序號(hào)緩存中的當(dāng)前分組對(duì)應(yīng)的分表序號(hào)改為新分表的分表序號(hào);All、判斷當(dāng)前分組中分表總個(gè)數(shù)是否大于分組內(nèi)分表總數(shù)split_count,如果大于則轉(zhuǎn)步驟A12,如果小于則轉(zhuǎn)步驟A7;A12、更新數(shù)據(jù)庫(kù)分表信息表中該分組內(nèi)分表序號(hào)最小分表的已使用標(biāo)記in_use_flag為0,標(biāo)識(shí)該分表不會(huì)在數(shù)據(jù)插入和查詢中使用,并將被歷史數(shù)據(jù)轉(zhuǎn)移管理流程處理,并從分組分表信息緩存中刪除該分表的記錄,轉(zhuǎn)步驟AU。在上述技術(shù)方案的基礎(chǔ)上,所述歷史數(shù)據(jù)插入管理的處理流程包括以下步驟BI、根據(jù)插入數(shù)據(jù)的內(nèi)容確定數(shù)據(jù)業(yè)務(wù)分組的組號(hào),根據(jù)分組當(dāng)前分表序號(hào)緩存獲取分表序號(hào),根據(jù)分表和數(shù)據(jù)邏輯對(duì)應(yīng)關(guān)系,重新排列插入數(shù)據(jù)內(nèi)容,存入以分組號(hào)和分表序號(hào)為鍵,插入數(shù)據(jù)內(nèi)存為值的map中;B2、遍歷BI中的map,遍歷完成則退出,否則轉(zhuǎn)步驟B3;B3、根據(jù)當(dāng)前分組號(hào)和分表序號(hào),構(gòu)造分表名稱,插入數(shù)據(jù)到當(dāng)前分表中,轉(zhuǎn)步驟B2。在上述技術(shù)方案的基礎(chǔ)上,所述歷史數(shù)據(jù)查詢管理的處理流程包括以下步驟Cl、讀取數(shù)據(jù)庫(kù)分表信息表內(nèi)已使用標(biāo)記為I的分表信息;C2、分析查詢條件、獲取所有相關(guān)分組分表的表名列表;C3、根據(jù)查詢條件查詢所有C2中的分表。在上述技術(shù)方案的基礎(chǔ)上,所述歷史數(shù)據(jù)轉(zhuǎn)移管理的處理流程包括以下步驟D1、按分組號(hào)讀取數(shù)據(jù)庫(kù)分表信息表中所有已使用標(biāo)記為O的分表信息記錄,保存到以分組號(hào)為鍵,分表序號(hào)列表為值的map中;D2、遍歷Dl中獲取的map,遍歷完成后退出;D3、根據(jù)當(dāng)前分組號(hào)和分表序號(hào),構(gòu)造分表名稱,使用批處理工具直接導(dǎo)出指定分表名稱的分表中所有行記錄;D4、根據(jù)分組號(hào)和分表序號(hào)從數(shù)據(jù)庫(kù)分表信息表中刪除分表信息;D5、根據(jù)分表名稱從數(shù)據(jù)庫(kù)中刪除分表,轉(zhuǎn)步驟D2。本發(fā)明所述的網(wǎng)管海量歷史數(shù)據(jù)管理方法,通過(guò)二級(jí)分表規(guī)則實(shí)現(xiàn)數(shù)據(jù)庫(kù)分表(數(shù)據(jù)庫(kù)分表即把單個(gè)表保存的數(shù)據(jù),按照一定規(guī)則切分后保存到多個(gè)結(jié)構(gòu)相同的表(稱為分表)中,減少單表的容量,從而提高單表的處理效率,在不同業(yè)務(wù)需求下可以訪問(wèn)不同的分表,減少鎖競(jìng)爭(zhēng),提高運(yùn)行效率),將歷史數(shù)據(jù)分散到多個(gè)分表中,且保證每個(gè)分表中記錄數(shù)大致與限定的分表容量相差不大,不僅保證了歷史數(shù)據(jù)查詢的響應(yīng)效率,還保證了數(shù)據(jù)的插入效率,提升了客戶體驗(yàn)感受,提高了網(wǎng)管管理系統(tǒng)的工作效率。本發(fā)明所述的網(wǎng)管海量歷史數(shù)據(jù)管理方法,通過(guò)已使用標(biāo)記將正在使用的和需要轉(zhuǎn)移的數(shù)據(jù)表進(jìn)行分離,網(wǎng)管系統(tǒng)和數(shù)據(jù)轉(zhuǎn)移功能就不會(huì)相互影響,而且數(shù)據(jù)表整表處理的效率遠(yuǎn)遠(yuǎn)高于按行記錄進(jìn)行處理的效率,減少了對(duì)數(shù)據(jù)庫(kù)系統(tǒng)的影響,提高了網(wǎng)管系統(tǒng)整體的效率。本發(fā)明有如下附圖圖I是根據(jù)分表規(guī)則劃分后,分表展示;圖2是數(shù)據(jù)表分表規(guī)則文件的內(nèi)容;圖3是數(shù)據(jù)庫(kù)分表信息表包含的數(shù)據(jù)內(nèi)容;圖4是分表管理處理流程圖;圖5是數(shù)據(jù)插入處理流程圖;圖6是數(shù)據(jù)查詢處理流程圖;圖7是數(shù)據(jù)轉(zhuǎn)移處理流程圖。具體實(shí)施例方式以下結(jié)合附圖對(duì)本發(fā)明作進(jìn)一步詳細(xì)說(shuō)明。本發(fā)明所述的網(wǎng)管海量歷史數(shù)據(jù)管理方法,通過(guò)二級(jí)分表規(guī)則實(shí)現(xiàn)數(shù)據(jù)庫(kù)分表,把保存有網(wǎng)管海量歷史數(shù)據(jù)的單個(gè)表保存的數(shù)據(jù),切分后保存到多個(gè)結(jié)構(gòu)相同的分表中,減少單表的容量,從而提高單表的處理效率,并對(duì)各個(gè)分表進(jìn)行以下管理A歷史數(shù)據(jù)分表管理,B歷史數(shù)據(jù)插入管理,C歷史數(shù)據(jù)查詢管理,D歷史數(shù)據(jù)轉(zhuǎn)移管理。在上述技術(shù)方案的基礎(chǔ)上,圖2示出了數(shù)據(jù)表分表規(guī)則文件的內(nèi)容,此即所述的二級(jí)分表規(guī)則,二級(jí)分表規(guī)則用xml格式的文件紀(jì)錄,其中歷史數(shù)據(jù)類型data_type,表示數(shù)據(jù)表保存數(shù)據(jù)的類型,分組總數(shù)gr0Up_C0Unt,表示對(duì)這種數(shù)據(jù)表分組的總數(shù),即表示一個(gè)數(shù)據(jù)表最多可以分成幾個(gè)分組,每個(gè)分組對(duì)應(yīng)唯一的一個(gè)分組號(hào);分組內(nèi)分表總數(shù)split_count,表示每個(gè)分組內(nèi)分表數(shù)最大值,即表示一個(gè)分組內(nèi)可以包括多少個(gè)分表,即分組內(nèi)分表數(shù)最大值,每個(gè)分表對(duì)應(yīng)唯一的一個(gè)分表序號(hào);分表內(nèi)行總數(shù)row_count,表示分表內(nèi)行總數(shù),即分表內(nèi)行總數(shù)row_count表示一個(gè)分表內(nèi)可以包括多少行數(shù)據(jù),即分表中數(shù)據(jù)行最大值;當(dāng)一個(gè)分表的數(shù)據(jù)量超過(guò)這個(gè)值的時(shí)候,就需要?jiǎng)?chuàng)建一個(gè)新的分表。即一個(gè)數(shù)據(jù)表最多會(huì)有g(shù)roup_count個(gè)分組,一個(gè)分組內(nèi)有split_count個(gè)分表,一個(gè)分表最多紀(jì)錄row_count行數(shù)據(jù)。在上述技術(shù)方案的基礎(chǔ)上,如圖4所示,所述歷史數(shù)據(jù)分表管理的處理流程包括以下步驟Al、讀取記載有數(shù)據(jù)表的二級(jí)分表規(guī)則的文件,獲取歷史數(shù)據(jù)類型data_type、分組總數(shù)group_count、分組內(nèi)分表總數(shù)split_count和分表內(nèi)行總數(shù)row_count;讀取數(shù)據(jù)庫(kù)分表信息表,獲取所有分表的分組號(hào)group_no、分表序號(hào)table_no、當(dāng)前正在使用標(biāo)記current_flag和已使用標(biāo)記in_use_flag,將這些信息保存到一個(gè)分組號(hào)為鍵,分表信息列表為值的map對(duì)象中,所述分表信息列表包括分表序號(hào)table_no、當(dāng)前正在使用標(biāo)記current_flag和已使用標(biāo)記in_use_flag,其中map的鍵的取值范圍從I到分組總數(shù)group_Count,如果在數(shù)據(jù)庫(kù)分表信息表中沒(méi)有某個(gè)鍵對(duì)應(yīng)的分表信息,那么在map中該鍵對(duì)應(yīng)的分表信息列表就為空;數(shù)據(jù)庫(kù)分表信息表的格式及內(nèi)容可參見(jiàn)圖3所示實(shí)施例;圖3示出了數(shù)據(jù)庫(kù)分表信息表的內(nèi)容,并演不了一個(gè)可能出現(xiàn)的狀態(tài),每一行記錄一個(gè)分表的信息;假設(shè)分表規(guī)則按照業(yè)務(wù)功能劃分的組group_count=3,每個(gè)組內(nèi)最多允許split_count=3個(gè)分表,那么當(dāng)創(chuàng)建了第4個(gè)分表后,這個(gè)分表序號(hào)table_no為4的分表就成為當(dāng)前使用狀態(tài)current_flag為I的表,且分表編號(hào)table_no為I的分表的已使用標(biāo)記in_use_flag則被置為O,這樣就可以保持所有可用的分表的總數(shù)不超過(guò)split_count的值;A2、遍歷Al得到的map對(duì)象;A3、根據(jù)遍歷的結(jié)果,如果map對(duì)象中當(dāng)前分組號(hào)對(duì)應(yīng)的分表信息列表為空,則轉(zhuǎn)至步驟A4,否則,轉(zhuǎn)至步驟A5;A4、在當(dāng)前分組號(hào)的分組中創(chuàng)建一個(gè)可用的分表,分配分表序號(hào)為1,設(shè)置分表當(dāng)前正在使用標(biāo)記為1,已使用標(biāo)記為1,將該分表的信息插入數(shù)據(jù)庫(kù)分表信息表后轉(zhuǎn)至步驟A5;A5、將數(shù)據(jù)庫(kù)分表信息表中記載的分表信息,按分組號(hào)為鍵,逐條插入到分組分表信息緩存中,該緩存用于記錄所有分組中已創(chuàng)建的分表的信息,將當(dāng)前正在使用標(biāo)記為I的分表信息,按分組號(hào)為鍵,將分表序號(hào)插入分組當(dāng)前分表序號(hào)緩存,該緩存記錄每個(gè)分組中current_flag為I的分表的分表序號(hào),轉(zhuǎn)步驟A6;分組當(dāng)前分表序號(hào)緩存內(nèi)的分表,需要檢查其是否超過(guò)分表內(nèi)行總數(shù);A6、使用定時(shí)器并等待,如果定時(shí)器未超時(shí)則一直等待,當(dāng)定時(shí)器超時(shí)后,如果接收到應(yīng)用程序退出的信號(hào),則退出歷史數(shù)據(jù)分表管理的處理流程;否則,轉(zhuǎn)入步驟A7;A7、遍歷分組當(dāng)前分表序號(hào)緩存,如果未遍歷完則轉(zhuǎn)步驟AS,若遍歷完則轉(zhuǎn)步驟A6;AS、讀取當(dāng)前分組中分表序號(hào),根據(jù)當(dāng)前分組的組號(hào)和分表序號(hào)構(gòu)造分表的名稱,獲取分表數(shù)據(jù)行數(shù);A9、如果分表數(shù)據(jù)行數(shù)大于分表規(guī)則中分表內(nèi)行總數(shù)row_count,則轉(zhuǎn)步驟A10、否則轉(zhuǎn)步驟A7;A10、創(chuàng)建新分表,新分表的分表序號(hào)為分表所在分組中原來(lái)current_flag為I的分表的分表序號(hào)值加上I,然后在數(shù)據(jù)庫(kù)分表信息表中插入該新分表的信息,并將該新分表的信息插入到分組分表信息緩存中,然后將分組當(dāng)前分表序號(hào)緩存中的當(dāng)前分組對(duì)應(yīng)的分表序號(hào)改為新分表的分表序號(hào);All、判斷當(dāng)前分組中分表總個(gè)數(shù)是否大于分組內(nèi)分表總數(shù)split_count,如果大于則轉(zhuǎn)步驟A12,如果小于則轉(zhuǎn)步驟A7;A12、更新數(shù)據(jù)庫(kù)分表信息表中該分組內(nèi)分表序號(hào)最小分表的已使用標(biāo)記in_use_flag為0,標(biāo)識(shí)該分表不會(huì)在數(shù)據(jù)插入和查詢中使用,并將被歷史數(shù)據(jù)轉(zhuǎn)移管理流程處理,并從分組分表信息緩存中刪除該分表的記錄,轉(zhuǎn)步驟AU。在上述技術(shù)方案的基礎(chǔ)上,如圖5所示,所述歷史數(shù)據(jù)插入管理的處理流程包括以下步驟BI、根據(jù)插入數(shù)據(jù)的內(nèi)容確定數(shù)據(jù)業(yè)務(wù)分組的組號(hào),根據(jù)分組當(dāng)前分表序號(hào)緩存獲取分表序號(hào),根據(jù)分表和數(shù)據(jù)邏輯對(duì)應(yīng)關(guān)系,重新排列插入數(shù)據(jù)內(nèi)容,存入以分組號(hào)和分表序號(hào)為鍵,插入數(shù)據(jù)內(nèi)存為值的map中;B2、遍歷BI中的map,遍歷完成則退出,否則轉(zhuǎn)步驟B3;B3、根據(jù)當(dāng)前分組號(hào)和分表序號(hào),構(gòu)造分表名稱,插入數(shù)據(jù)到當(dāng)前分表中,轉(zhuǎn)步驟B2。在上述技術(shù)方案的基礎(chǔ)上,如圖6所示,所述歷史數(shù)據(jù)查詢管理的處理流程包括以下步驟Cl、讀取數(shù)據(jù)庫(kù)分表信息表內(nèi)已使用標(biāo)記為I的分表信息;C2、分析查詢條件、獲取所有相關(guān)分組分表的表名列表;C3、根據(jù)查詢條件查詢所有C2中的分表。在上述技術(shù)方案的基礎(chǔ)上,如圖7所示,所述歷史數(shù)據(jù)轉(zhuǎn)移管理的處理流程包括以下步驟D1、按分組號(hào)讀取數(shù)據(jù)庫(kù)分表信息表中所有已使用標(biāo)記為O的分表信息記錄,保存到以分組號(hào)為鍵,分表序號(hào)列表為值的map中;D2、遍歷Dl中獲取的map,遍歷完成后退出;D3、根據(jù)當(dāng)前分組號(hào)和分表序號(hào),構(gòu)造分表名稱,使用批處理工具直接導(dǎo)出指定分表名稱的分表中所有行記錄;D4、根據(jù)分組號(hào)和分表序號(hào)從數(shù)據(jù)庫(kù)分表信息表中刪除分表信息;D5、根據(jù)分表名稱從數(shù)據(jù)庫(kù)中刪除分表,轉(zhuǎn)步驟D2。圖I示出了按照分表規(guī)則劃分后可能出現(xiàn)的分表狀態(tài),所述的分表規(guī)則通常存儲(chǔ)于靜態(tài)文件中(例如存儲(chǔ)于數(shù)據(jù)表分表規(guī)則文件中),縱向表不按照業(yè)務(wù)功能劃分的一個(gè)分組,如圖劃分了M個(gè)分組。每個(gè)分組內(nèi)可能有多個(gè)分表,分表序號(hào)從I開(kāi)始,向后排列。每個(gè)組內(nèi)的分表數(shù)量不一定相同,而是根據(jù)實(shí)際數(shù)據(jù)的數(shù)量確定,使用分組號(hào)和分表序號(hào)對(duì)的方式可以唯一標(biāo)識(shí)一個(gè)分表,例如(2,1)標(biāo)識(shí)分組2中序號(hào)為I的分表。以下為一個(gè)具體實(shí)施例。圖4示出了網(wǎng)管海量歷史數(shù)據(jù)分表管理方法Al、從靜態(tài)文件讀取數(shù)據(jù)表分表規(guī)則,從數(shù)據(jù)庫(kù)分表信息表讀取已使用標(biāo)記in_use_flag為I的分表信息。分表管理只管理已使用標(biāo)記為I的分表,而已使用標(biāo)記為O的分表由數(shù)據(jù)轉(zhuǎn)移功能使用。A2、按分組號(hào)遍歷從數(shù)據(jù)庫(kù)分表信息表讀取的分表信息,遍歷完成轉(zhuǎn)步驟A6,否則轉(zhuǎn)步驟A3。遍歷進(jìn)行分組分表信息緩存和分組當(dāng)前分表序號(hào)緩存的初始化,完成后進(jìn)行定時(shí)的分表管理步驟。A3、若A2中分組號(hào)為I的分組內(nèi)一個(gè)分表都沒(méi)有,則轉(zhuǎn)步驟A4,若分組號(hào)為I的分組有至少一個(gè)分表,則轉(zhuǎn)步驟A5;第一次使用網(wǎng)管時(shí),歷史數(shù)據(jù)是沒(méi)有創(chuàng)建任何分表的,所以會(huì)進(jìn)入步驟A4。A4、創(chuàng)建一個(gè)新的序號(hào)table_no為I分表,更新數(shù)據(jù)庫(kù)分表信息表,置分表序號(hào)為I的當(dāng)前正在使用標(biāo)記current_flag為I,每個(gè)分組內(nèi)只有一個(gè)分表的當(dāng)前正在使用標(biāo)記current_flag為I,標(biāo)識(shí)在數(shù)據(jù)插入時(shí)訪問(wèn)的分表。A5、更新分組分表信息緩存,增加A2中遍歷的分表或者A4中創(chuàng)建的分表的分表信息;同時(shí)更新分組當(dāng)前分表序號(hào)緩存,該緩存用來(lái)記錄每個(gè)分組正在使用的分表序號(hào)。A6、定時(shí)檢查A5中獲取的分組當(dāng)前分表序號(hào)緩存,如果定時(shí)器超時(shí),未接收到分表管理退出信號(hào)則轉(zhuǎn)步驟A7,如果接收到分表管理退出信號(hào)則退出分表管理流程,根據(jù)經(jīng)驗(yàn)數(shù)據(jù)設(shè)置定時(shí)器超時(shí)間check_interval為I小時(shí)。A7、遍歷分組當(dāng)前分表序號(hào)緩存,如果未遍歷完則轉(zhuǎn)步驟AS,若遍歷完則轉(zhuǎn)步驟A6;檢查所有當(dāng)前正在使用標(biāo)記為I的分表后,進(jìn)入下一次檢查的定時(shí)器等待周期,該周期的值為估算值,檢查分表容量時(shí),數(shù)據(jù)插入不可用,為了防止頻繁檢查,這個(gè)時(shí)間周期最好設(shè)定的長(zhǎng)一些,而且需要保證兩次檢查點(diǎn)之間,分表的數(shù)據(jù)行超過(guò)分表規(guī)則允許的分表內(nèi)行總數(shù)row_count不會(huì)太多。A8、根據(jù)當(dāng)前分組的組號(hào)和分表序號(hào),獲取當(dāng)前正在使用標(biāo)記current_flag為I的分表數(shù)據(jù)行數(shù)table_row_Count,假設(shè)分組號(hào)為2,分表序號(hào)為3;A9、如果A8中的table_row_count,大于分表規(guī)則中分表內(nèi)行總數(shù)row_count,則轉(zhuǎn)步驟AlO、否則轉(zhuǎn)步驟A7;A10、創(chuàng)建分組號(hào)為2,分表序號(hào)為4的新分表,設(shè)置分表序號(hào)為4的current_flag為I,in_use_flag為I,將分表序號(hào)為4的分表信息插入數(shù)據(jù)庫(kù)分表信息表,同時(shí)在分表信息表中修改分表序號(hào)為3的current_flag為O,更新分組分表信息緩存,插入分表序號(hào)4的分表信息,并更新分組當(dāng)前分表序號(hào)緩存中分組2對(duì)應(yīng)的當(dāng)前分表序號(hào)為4;創(chuàng)建新的分表后,需要更新數(shù)據(jù)庫(kù)分表信息表,最新增加的分表一定就是當(dāng)前使用的分表,同時(shí)也要更新分組分表信息緩存和分組當(dāng)前分表序號(hào)緩存,作為數(shù)據(jù)插入時(shí)獲取分表的依據(jù)。AU、根據(jù)分組分表信息緩存判斷當(dāng)前分組中分表總數(shù)是否大于分表規(guī)則中分組內(nèi)分表數(shù)總數(shù)split_count,如果大于則轉(zhuǎn)步驟A12,如果小于則轉(zhuǎn)步驟A7;A12、更新數(shù)據(jù)庫(kù)分表信息表中該分組號(hào)對(duì)應(yīng)的分表序號(hào)最小的分表信息,將該分表的已使用標(biāo)記in_use_flag置為0,表示這個(gè)分表在查詢時(shí)不會(huì)使用,而且需要將數(shù)據(jù)進(jìn)行轉(zhuǎn)移,然后從分組分表信息緩存中刪除該分表的記錄,轉(zhuǎn)步驟AU。例如在分組2中,若split_count為3,則將分表序號(hào)為I的分表的in_use_flag設(shè)置為O,然后在分組分表信息緩存中刪除分組2內(nèi)分表序號(hào)為I分表的信息。圖5示出了歷史數(shù)據(jù)插入的處理流程,包括以下步驟BI、根據(jù)插入數(shù)據(jù)的內(nèi)容確定數(shù)據(jù)業(yè)務(wù)分組的組號(hào),根據(jù)分組當(dāng)前分表信息緩存獲取當(dāng)前正在使用標(biāo)記為I的分表序號(hào),根據(jù)數(shù)據(jù)對(duì)應(yīng)的分表重新排列插入數(shù)據(jù)順序,插入以分組號(hào)和分表序號(hào)為鍵,插入數(shù)據(jù)內(nèi)容為值的map;B2、遍歷map,遍歷完成則退出,未完成轉(zhuǎn)步驟B3。B3、根據(jù)分組號(hào)為分表序號(hào)獲取分表名,將數(shù)據(jù)插入分表中。由于分組分表的存在,一批數(shù)據(jù)可能寫(xiě)入到不同分組的不同分表中,為了防止不斷切換數(shù)據(jù)寫(xiě)入時(shí)使用的分表,在插入前按照分表與數(shù)據(jù)對(duì)應(yīng)的方式將數(shù)據(jù)重新排列,減少表切換使用的時(shí)間,這樣既可以保證數(shù)據(jù)的順序,也可以提高數(shù)據(jù)插入的效率。圖6示出了歷史數(shù)據(jù)查詢的處理流程,包括以下步驟Cl、讀取數(shù)據(jù)庫(kù)中分表信息表內(nèi)已使用標(biāo)記in_use_flag為I的分表信息;C2、解析查詢條件,分析需要包含的分組,然后將相關(guān)分組中所有的分表設(shè)置為查詢目標(biāo)分表列表,例如用(X,Y)來(lái)標(biāo)識(shí)一個(gè)唯一的分表,其中X標(biāo)識(shí)分組號(hào),Y標(biāo)識(shí)分組內(nèi)的分表序號(hào),當(dāng)需要查詢的分組號(hào)包括1,2,3時(shí),則最終需要查詢的分表列表為(1,I),(2,2),(2,3),(2,4),(3,I),(3,2),(3,3);C3、遍歷查詢所有分表,若查詢結(jié)果有優(yōu)先級(jí)的要求,則C2中的列表需要按優(yōu)先級(jí)排序,例如(1,I),(2,4),(2,3),(2,2),(3,3),(3,2),(3,I),然后依次串行查詢;若查詢結(jié)果無(wú)優(yōu)先級(jí)的要求,則C2中的列表沒(méi)有順序,查詢可以并行執(zhí)行,合并所有的查詢結(jié)果,返回。圖7示出了歷史數(shù)據(jù)轉(zhuǎn)移的處理流程,包括以下步驟D1、讀取數(shù)據(jù)庫(kù)分表信息表中所有已使用標(biāo)記in_use_flag為O的分表信息,保存到以分組號(hào)為鍵,分表序號(hào)列表為值的map中,例如分組號(hào)為2的分組中,分表序號(hào)為1,2的分表的已使用標(biāo)記為O;D2、依次遍歷Dl中獲取的map,獲取的分組號(hào)和分表序號(hào)列表,然后遍歷分表序號(hào)列表,如果未完成遍歷,則轉(zhuǎn)步驟D3,完成遍歷后退出;D3、如遍歷的當(dāng)前分表為分組2內(nèi)分表序號(hào)為I的分表,構(gòu)建的表名為T_HISDATA_2_1,通過(guò)數(shù)據(jù)庫(kù)工具或者SQL腳本直接將分表中所有記錄導(dǎo)出到外部文件;D4、從數(shù)據(jù)庫(kù)分表信息表中刪除分表號(hào)為2,分表序號(hào)為I的信息;D5、從數(shù)據(jù)庫(kù)中刪除分表T_HISDATA_2_1,轉(zhuǎn)步驟D2。本說(shuō)明書(shū)中未作詳細(xì)描述的內(nèi)容屬于本領(lǐng)域?qū)I(yè)技術(shù)人員公知的現(xiàn)有技術(shù)。權(quán)利要求1.一種網(wǎng)管海量歷史數(shù)據(jù)管理方法,其特征在于通過(guò)二級(jí)分表規(guī)則實(shí)現(xiàn)數(shù)據(jù)庫(kù)分表,把保存有網(wǎng)管海量歷史數(shù)據(jù)的單個(gè)表保存的數(shù)據(jù),切分后保存到多個(gè)結(jié)構(gòu)相同的分表中,減少單表的容量,從而提高單表的處理效率,并對(duì)各個(gè)分表進(jìn)行以下管理A歷史數(shù)據(jù)分表管理,B歷史數(shù)據(jù)插入管理,C歷史數(shù)據(jù)查詢管理,D歷史數(shù)據(jù)轉(zhuǎn)移管理。2.如權(quán)利要求I所述的網(wǎng)管海量歷史數(shù)據(jù)管理方法,其特征在于二級(jí)分表規(guī)則用xml格式的文件紀(jì)錄,其中歷史數(shù)據(jù)類型data_type,表示數(shù)據(jù)表保存數(shù)據(jù)的類型,分組總數(shù)group_count,表示對(duì)這種數(shù)據(jù)表分組的總數(shù),分組內(nèi)分表總數(shù)split_count,表示每個(gè)分組內(nèi)分表數(shù)最大值,分表內(nèi)行總數(shù)row_count,表示分表內(nèi)行總數(shù),當(dāng)一個(gè)分表的數(shù)據(jù)量超過(guò)這個(gè)值的時(shí)候,就需要?jiǎng)?chuàng)建一個(gè)新的分表。3.如權(quán)利要求2所述的網(wǎng)管海量歷史數(shù)據(jù)管理方法,其特征在于,所述歷史數(shù)據(jù)分表管理的處理流程包括以下步驟Al、讀取記載有數(shù)據(jù)表的二級(jí)分表規(guī)則的文件,獲取歷史數(shù)據(jù)類型data_type、分組總數(shù)group_count、分組內(nèi)分表總數(shù)split_count和分表內(nèi)行總數(shù)row_count;讀取數(shù)據(jù)庫(kù)分表信息表,獲取所有分表的分組號(hào)group_no、分表序號(hào)table_no、當(dāng)前正在使用標(biāo)記current_flag和已使用標(biāo)記in_use_flag,將這些信息保存到一個(gè)分組號(hào)為鍵,分表信息列表為值的map對(duì)象中,所述分表信息列表包括分表序號(hào)table_no、當(dāng)前正在使用標(biāo)記current_flag和已使用標(biāo)記in_use_flag,其中map的鍵的取值范圍從I到分組總數(shù)group_count,如果在數(shù)據(jù)庫(kù)分表信息表中沒(méi)有某個(gè)鍵對(duì)應(yīng)的分表信息,那么在map中該鍵對(duì)應(yīng)的分表信息列表就為空;A2、遍歷Al得到的map對(duì)象;A3、根據(jù)遍歷的結(jié)果,如果map對(duì)象中當(dāng)前分組號(hào)對(duì)應(yīng)的分表信息列表為空,則轉(zhuǎn)至步驟A4,否則,轉(zhuǎn)至步驟A5;A4、在當(dāng)前分組號(hào)的分組中創(chuàng)建一個(gè)可用的分表,分配分表序號(hào)為1,設(shè)置分表當(dāng)前正在使用標(biāo)記為1,已使用標(biāo)記為I,將該分表的信息插入數(shù)據(jù)庫(kù)分表信息表后轉(zhuǎn)至步驟A5;A5、將數(shù)據(jù)庫(kù)分表信息表中記載的分表信息,按分組號(hào)為鍵,逐條插入到分組分表信息緩存中,該緩存用于記錄所有分組中已創(chuàng)建的分表的信息,將當(dāng)前正在使用標(biāo)記為I的分表信息,按分組號(hào)為鍵,將分表序號(hào)插入分組當(dāng)前分表序號(hào)緩存,該緩存記錄每個(gè)分組中current_flag為I的分表的分表序號(hào),轉(zhuǎn)步驟A6;分組當(dāng)前分表序號(hào)緩存內(nèi)的分表,需要檢查其是否超過(guò)分表內(nèi)行總數(shù);A6、使用定時(shí)器并等待,如果定時(shí)器未超時(shí)則一直等待,當(dāng)定時(shí)器超時(shí)后,如果接收到應(yīng)用程序退出的信號(hào),則退出歷史數(shù)據(jù)分表管理的處理流程;否則,轉(zhuǎn)入步驟A7;A7、遍歷分組當(dāng)前分表序號(hào)緩存,如果未遍歷完則轉(zhuǎn)步驟AS,若遍歷完則轉(zhuǎn)步驟A6;AS、讀取當(dāng)前分組中分表序號(hào),根據(jù)當(dāng)前分組的組號(hào)和分表序號(hào)構(gòu)造分表的名稱,獲取分表數(shù)據(jù)行數(shù);A9、如果分表數(shù)據(jù)行數(shù)大于分表規(guī)則中分表內(nèi)行總數(shù)lO^count,則轉(zhuǎn)步驟A10、否則轉(zhuǎn)步驟A7;A10、創(chuàng)建新分表,新分表的分表序號(hào)為分表所在分組中原來(lái)current_flag為I的分表的分表序號(hào)值加上I,然后在數(shù)據(jù)庫(kù)分表信息表中插入該新分表的信息,并將該新分表的信息插入到分組分表信息緩存中,然后將分組當(dāng)前分表序號(hào)緩存中的當(dāng)前分組對(duì)應(yīng)的分表序號(hào)改為新分表的分表序號(hào);AU、判斷當(dāng)前分組中分表總個(gè)數(shù)是否大于分組內(nèi)分表總數(shù)split_Count,如果大于則轉(zhuǎn)步驟A12,如果小于則轉(zhuǎn)步驟A7;A12、更新數(shù)據(jù)庫(kù)分表信息表中該分組內(nèi)分表序號(hào)最小分表的已使用標(biāo)記in_USe_flag為O,標(biāo)識(shí)該分表不會(huì)在數(shù)據(jù)插入和查詢中使用,并將被歷史數(shù)據(jù)轉(zhuǎn)移管理流程處理,并從分組分表信息緩存中刪除該分表的記錄,轉(zhuǎn)步驟AU。4.如權(quán)利要求3所述的網(wǎng)管海量歷史數(shù)據(jù)管理方法,其特征在于,所述歷史數(shù)據(jù)插入管理的處理流程包括以下步驟BI、根據(jù)插入數(shù)據(jù)的內(nèi)容確定數(shù)據(jù)業(yè)務(wù)分組的組號(hào),根據(jù)分組當(dāng)前分表序號(hào)緩存獲取分表序號(hào),根據(jù)分表和數(shù)據(jù)邏輯對(duì)應(yīng)關(guān)系,重新排列插入數(shù)據(jù)內(nèi)容,存入以分組號(hào)和分表序號(hào)為鍵,插入數(shù)據(jù)內(nèi)存為值的map中;B2、遍歷BI中的map,遍歷完成則退出,否則轉(zhuǎn)步驟B3;B3、根據(jù)當(dāng)前分組號(hào)和分表序號(hào),構(gòu)造分表名稱,插入數(shù)據(jù)到當(dāng)前分表中,轉(zhuǎn)步驟B2。5.如權(quán)利要求3所述的網(wǎng)管海量歷史數(shù)據(jù)管理方法,其特征在于,所述歷史數(shù)據(jù)查詢管理的處理流程包括以下步驟Cl、讀取數(shù)據(jù)庫(kù)分表信息表內(nèi)已使用標(biāo)記為I的分表信息;C2、分析查詢條件、獲取所有相關(guān)分組分表的表名列表;C3、根據(jù)查詢條件查詢所有C2中的分表。6.如權(quán)利要求3所述的網(wǎng)管海量歷史數(shù)據(jù)管理方法,其特征在于,所述歷史數(shù)據(jù)轉(zhuǎn)移管理的處理流程包括以下步驟D1、按分組號(hào)讀取數(shù)據(jù)庫(kù)分表信息表中所有已使用標(biāo)記為O的分表信息記錄,保存到以分組號(hào)為鍵,分表序號(hào)列表為值的map中;D2、遍歷Dl中獲取的map,遍歷完成后退出;D3、根據(jù)當(dāng)前分組號(hào)和分表序號(hào),構(gòu)造分表名稱,使用批處理工具直接導(dǎo)出指定分表名稱的分表中所有行記錄;D4、根據(jù)分組號(hào)和分表序號(hào)從數(shù)據(jù)庫(kù)分表信息表中刪除分表信息;D5、根據(jù)分表名稱從數(shù)據(jù)庫(kù)中刪除分表,轉(zhuǎn)步驟D2。全文摘要本發(fā)明涉及網(wǎng)管管理系統(tǒng)中歷史數(shù)據(jù)的管理,具體說(shuō)是一種網(wǎng)管海量歷史數(shù)據(jù)管理方法,通過(guò)二級(jí)分表規(guī)則實(shí)現(xiàn)數(shù)據(jù)庫(kù)分表,把保存有網(wǎng)管海量歷史數(shù)據(jù)的單個(gè)表保存的數(shù)據(jù),切分后保存到多個(gè)結(jié)構(gòu)相同的分表中,減少單表的容量,從而提高單表的處理效率,并對(duì)各個(gè)分表進(jìn)行以下管理A歷史數(shù)據(jù)分表管理,B歷史數(shù)據(jù)插入管理,C歷史數(shù)據(jù)查詢管理,D歷史數(shù)據(jù)轉(zhuǎn)移管理。本發(fā)明所述的網(wǎng)管海量歷史數(shù)據(jù)管理方法,能保存海量歷史數(shù)據(jù),并能高效的進(jìn)行數(shù)據(jù)的插入、查詢、轉(zhuǎn)移而不影響網(wǎng)管軟件的正常使用,提高了網(wǎng)管管理系統(tǒng)的工作效率。文檔編號(hào)G06F17/30GK102867071SQ20121040142公開(kāi)日2013年1月9日申請(qǐng)日期2012年10月19日優(yōu)先權(quán)日2012年10月19日發(fā)明者鄒昊申請(qǐng)人:烽火通信科技股份有限公司