專(zhuān)利名稱(chēng):在關(guān)系數(shù)據(jù)庫(kù)中獲取數(shù)據(jù)最小變動(dòng)集的處理方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種在關(guān)系數(shù)據(jù)庫(kù)中獲取數(shù)據(jù)最小變動(dòng)集的處理方法,特別是涉及碼分多址基站(CDMA BSS)系統(tǒng)獲取基站配置數(shù)據(jù)最小變動(dòng)集的方法,以提高從操作維護(hù)商用數(shù)據(jù)庫(kù)到CDMA基站設(shè)備之間數(shù)據(jù)同步的效率,節(jié)省基站設(shè)備中CPU用于接收系統(tǒng)配置變動(dòng)數(shù)據(jù)所耗費(fèi)的時(shí)間。
可是目前,針對(duì)修改后的數(shù)據(jù)集,卻通常采用以下兩種方法進(jìn)行數(shù)據(jù)處理a.把關(guān)系數(shù)據(jù)庫(kù)中所有關(guān)系表中的所有數(shù)據(jù)作為處理對(duì)象。這種方式實(shí)現(xiàn)簡(jiǎn)單,但是考慮到通常改動(dòng)的數(shù)據(jù)都不大,顯然每次改動(dòng)一小部分?jǐn)?shù)據(jù)都將處理所有數(shù)據(jù)的方式效率較低。
b.把發(fā)生改動(dòng)的關(guān)系表中的全部數(shù)據(jù)作為處理對(duì)象。這種方式需要一種機(jī)制,如在關(guān)系表上建立觸發(fā)器,記錄數(shù)據(jù)修改過(guò)程中哪些關(guān)系表被改動(dòng)。與第一種方式相比,這種方式實(shí)現(xiàn)相對(duì)復(fù)雜,但是,由于只需處理被改動(dòng)的關(guān)系表中的所有數(shù)據(jù),所以,數(shù)據(jù)處理的效率相對(duì)較高,可是,其中卻通常也包括不必處理的冗余數(shù)據(jù)。
如本發(fā)明所述,關(guān)系數(shù)據(jù)庫(kù)中獲取數(shù)據(jù)最小變動(dòng)集的處理步驟如下第一步 記錄數(shù)據(jù)修改過(guò)程中的所有修改內(nèi)容,本步驟又可以包括下列步驟a、對(duì)關(guān)系數(shù)據(jù)庫(kù)中每個(gè)關(guān)系表R_xxx,均建立兩個(gè)對(duì)應(yīng)的關(guān)系表R_xxx_Change,R_xxx_Source,其中關(guān)系表R_xxx_Change,R_xxx_Source均比關(guān)系表R_xxx多一個(gè)字段Operate_ld,此字段與關(guān)系表R_xxx的主鍵一起聯(lián)合作為關(guān)系表R_xxx_Change,R_xxx_Source的主鍵;其他字段與R_xxx相同,b、對(duì)關(guān)系表的插入、刪除、更新操作進(jìn)行編碼,使得每次對(duì)關(guān)系表的操作都對(duì)應(yīng)一個(gè)獨(dú)一無(wú)二的操作碼Operate_Id,Operate_Id為單向自加類(lèi)型(如在MS SQL Server或Oracle中,設(shè)置Operate_Id字段,使之具有Identity屬性),即后一次操作的操作碼Operate_Id大于以前任何一次的操作碼Operate_Id。根據(jù)Operate_Id可以找出與Operate_Id相對(duì)應(yīng)的操作的具體內(nèi)容。
c、在關(guān)系數(shù)據(jù)庫(kù)中所有關(guān)系表建立插入、刪除、更新觸發(fā)器,并且建立一種機(jī)制,標(biāo)識(shí)記錄關(guān)系數(shù)據(jù)庫(kù)中每個(gè)關(guān)系表的內(nèi)容是否發(fā)生改變。以關(guān)系表R_xxx為例,關(guān)系表R_xxx上的插入、刪除、更新觸發(fā)器用于記錄每次對(duì)關(guān)系表R_xxx的操作內(nèi)容。所有對(duì)關(guān)系表R_xxx的插入操作中被插入關(guān)系表R_xxx的記錄,以及對(duì)關(guān)系表R_xxx的更新操作中被更新之后的記錄,均保存到關(guān)系表R_xxx_Change中;所有對(duì)關(guān)系表R_xxx的刪除操作中從關(guān)系表R_xxx刪除的記錄,以及對(duì)關(guān)系表R_xxx的更新操作中被更新之前的記錄,均保存到關(guān)系表R_xxx_Source中,即在更新觸發(fā)器中需把一次更新操作分解為一次刪除操作(刪除更新前的記錄)和一次插入操作(插入更新后的記錄)。由關(guān)系表R_xxx上的插入、刪除、更新觸發(fā)器完成上述功能,同時(shí)把R_xxx置為“內(nèi)容已改變”,第二步 獲取數(shù)據(jù)最小變動(dòng)集,本步驟又可以包括下列步驟
a、為了獲取所有發(fā)生改變的關(guān)系表中變動(dòng)數(shù)據(jù),建立一個(gè)數(shù)據(jù)采集總?cè)肟?;它根?jù)關(guān)系表的內(nèi)容改變情況,決定是否對(duì)相應(yīng)關(guān)系表進(jìn)行數(shù)據(jù)采集,b、對(duì)每一個(gè)關(guān)系表R_xxx,在內(nèi)存中創(chuàng)建與之對(duì)應(yīng)的兩個(gè)全局臨時(shí)關(guān)系表,分別命名為##R_xxx_Pre和##R_xxx_Send,關(guān)系表##R_xxx_Pre保存關(guān)系表R_xxx中所有發(fā)生變動(dòng)的記錄,關(guān)系表##R_xxx_Send保存關(guān)系表R_xxx對(duì)應(yīng)的數(shù)據(jù)最小變動(dòng)集。##R_xxx_Pre和##R_xxx_Send的結(jié)構(gòu)完全一致,均比R_xxx_Change或R_xxx_Source多一個(gè)增刪標(biāo)識(shí)Op,即比關(guān)系表R_xxx多Operate_Id和Op兩個(gè)字段。其中Op為增刪標(biāo)識(shí),表示與操作碼Operate_Id相對(duì)應(yīng)的對(duì)關(guān)系表R_xxx的操作的性質(zhì),不同的取值可以區(qū)分操作類(lèi)型,例如規(guī)定1表示插入,2表示刪除,3表示更新,c、為了提高數(shù)據(jù)的采集速度,采用關(guān)系數(shù)據(jù)庫(kù)中的存儲(chǔ)過(guò)程實(shí)現(xiàn)關(guān)系表R_xxx數(shù)據(jù)最小變動(dòng)集的采集過(guò)程。對(duì)關(guān)系表R_xxx,建立一個(gè)與之相對(duì)應(yīng)的存儲(chǔ)過(guò)程,命名為P_R_xxx_Chg,完成關(guān)系表R_xxx數(shù)據(jù)最小變動(dòng)集的采集,存儲(chǔ)過(guò)程P_R_xxx_Chg執(zhí)行后,全局臨時(shí)關(guān)系表##R_xxx_Send中存儲(chǔ)的數(shù)據(jù)即為關(guān)系表R_xxx中數(shù)據(jù)最小變動(dòng)集,它將同時(shí)滿(mǎn)足以下四個(gè)條件①包括向關(guān)系表R_xxx插入的記錄,標(biāo)識(shí)為插入;②包括從關(guān)系表R_xxx刪除的記錄,標(biāo)識(shí)為刪除;③若向關(guān)系表R_xxx插入一條記錄,經(jīng)過(guò)若干步驟之后,再把此記錄刪除,則數(shù)據(jù)最小變動(dòng)集中不得包括此記錄;④對(duì)于更新操作,如果不更新記錄主鍵,則數(shù)據(jù)最小變動(dòng)集只包括更新后的記錄;若更新主鍵,則數(shù)據(jù)最小變動(dòng)集包括對(duì)更新前記錄的刪除操作和對(duì)更新后記錄的插入操作。
第三步完成對(duì)最小數(shù)據(jù)變動(dòng)集處理之后,清除關(guān)系表R_xxx_Change,R_xxx_Source表中的數(shù)據(jù),置關(guān)系數(shù)據(jù)庫(kù)所有表為“內(nèi)容未改變”,為下一次記錄數(shù)據(jù)修改過(guò)程的內(nèi)容作準(zhǔn)備。
本發(fā)明的積極效果是通過(guò)本發(fā)明所提供的方法,在修改基站系統(tǒng)配置數(shù)據(jù)后,可以快速采集出CDMA基站系統(tǒng)配置數(shù)據(jù)最小變動(dòng)集。由于只需向基站設(shè)備同步的數(shù)據(jù)最小變動(dòng)集,提高了從操作維護(hù)商用數(shù)據(jù)庫(kù)到CDMA基站設(shè)備之間數(shù)據(jù)同步的效率,節(jié)省了基站設(shè)備中CPU用于接收基站系統(tǒng)配置變動(dòng)數(shù)據(jù)所耗費(fèi)的時(shí)間。同時(shí),本發(fā)明還具有較廣的適用性,可以用于其它有類(lèi)似需求的環(huán)境中。
圖2是本發(fā)明方法的實(shí)施例,其為構(gòu)成CDMA基站系統(tǒng)配置數(shù)據(jù)最小變動(dòng)集同步裝置中的數(shù)據(jù)采集總?cè)肟谀K流程圖。
圖3是本發(fā)明方法的實(shí)施例,其為構(gòu)成CDMA基站系統(tǒng)配置數(shù)據(jù)最小變動(dòng)集同步裝置中的對(duì)應(yīng)于關(guān)系表R_xxx的數(shù)據(jù)采集模塊流程圖。
請(qǐng)參閱圖2和圖3為記錄操作維護(hù)商用數(shù)據(jù)庫(kù)20中每一個(gè)關(guān)系表內(nèi)容是否改變,建立關(guān)系表R_TableInfo,每個(gè)關(guān)系表對(duì)應(yīng)一條記錄,用于記錄對(duì)應(yīng)關(guān)系表內(nèi)容是否發(fā)生改變。
參閱圖2所示,經(jīng)過(guò)步驟S101中,聲明、打開(kāi)光標(biāo),獲得所有內(nèi)容被改變的關(guān)系表的名字;通過(guò)步驟S102,S103,S104構(gòu)成的循環(huán),采集所有內(nèi)容發(fā)生了改變的關(guān)系表的數(shù)據(jù)最小變動(dòng)集,在步驟S105中,關(guān)閉、釋放步驟S101中聲明并打開(kāi)的光標(biāo)。
在步驟S103中調(diào)用與關(guān)系表R_xxx相對(duì)應(yīng)的數(shù)據(jù)采集過(guò)程P_R_xxx_Chg,完成關(guān)系表R_xxx的數(shù)據(jù)最小變動(dòng)集的采集工作,具體流程如圖3所示。
步驟S201中聲明變量@OldMainKey和@CurrentMainKey用于存儲(chǔ)關(guān)系表R_xxx記錄的主鍵值,通過(guò)比較兩條記錄的主鍵是否相同可以確定這兩條記錄是否為同一記錄;聲明變量@Op1和@Op2以存儲(chǔ)對(duì)表R_xxx中記錄的操作性質(zhì),即增刪標(biāo)識(shí)。
步驟S202中,把關(guān)系表R_xxx_Change中的所有記錄插入全局臨時(shí)關(guān)系表##R_xxx_Pre中,增刪標(biāo)識(shí)Op置為“插入”;把表R_xxx_Source中的所有記錄插入全局臨時(shí)關(guān)系表##R_xxx_Pre中,增刪標(biāo)識(shí)Op置為“刪除”;經(jīng)過(guò)步驟S202之后,##R_xxx_Pre包括了關(guān)系表R_xxx中所有發(fā)生變動(dòng)的記錄,##R_xxx_Pre中的所有記錄的Op取值為1或2;關(guān)系表##R_xxx_Send內(nèi)容為空。在對(duì)關(guān)系表##R_xxx_Pre中的記錄進(jìn)行必要的掃描、篩選,去掉冗余的記錄,得到的結(jié)果集才能滿(mǎn)足數(shù)據(jù)最小變動(dòng)集的條件。
在步驟S203中,利用光標(biāo)對(duì)全局臨時(shí)關(guān)系表##R_xxx_Pre中的記錄進(jìn)行遍歷、篩選。在聲明的光標(biāo)中,選擇出關(guān)系表##R_xxx_Pre中的所有記錄,結(jié)果集中以關(guān)系表R_xxx的主鍵為升序,Operate_Id為降序,Op為升序進(jìn)行排列。為保證在結(jié)果集中對(duì)于一次更新操作分解出的一次刪除操作和一次插入操作,滿(mǎn)足插入操作在前,刪除操作在后的順序,在結(jié)果集中對(duì)Op升序排列。
步驟S204至S210構(gòu)成的循環(huán)共同完成關(guān)系表##R_xxx_Pre中記錄的遍歷、篩選工作。經(jīng)過(guò)步驟S203中對(duì)結(jié)果集以特定方式進(jìn)行排序處理后,若修改基站系統(tǒng)配置數(shù)據(jù)的過(guò)程中對(duì)同一條記錄進(jìn)行了多次操作,則在結(jié)果集中對(duì)同一記錄的多次操作必定相鄰,且時(shí)間最靠后一次操作最先被處理到,時(shí)間最靠前的一次操作最后被處理到。
根據(jù)數(shù)據(jù)最小變動(dòng)集的定義中條件③,若時(shí)間最靠后一次操作的增刪標(biāo)識(shí)Op為刪除(Op取值為2),且時(shí)間最靠前的一次操作的增刪標(biāo)識(shí)Op為插入(Op取值為1),則對(duì)此記錄的所有操作被忽略;反之,若時(shí)間最靠后一次操作的增刪標(biāo)識(shí)Op不為刪除(Op取值為2),或者時(shí)間最靠前的一次操作的增刪標(biāo)識(shí)Op不為插入(Op取值為1),則此記錄被插入全局臨時(shí)關(guān)系表##R_xxx_Send,即關(guān)系表R_xxx所對(duì)應(yīng)的數(shù)據(jù)最小變動(dòng)集之中。
同理,步驟S204至S210所采集的結(jié)果集也滿(mǎn)足數(shù)據(jù)最小變動(dòng)集的定義中條件④。
最后,通過(guò)步驟S211,關(guān)閉、釋放光標(biāo)。至此,已經(jīng)獲得關(guān)系表R_xxx的數(shù)據(jù)最小變動(dòng)集。
在圖2中,通過(guò)步驟S102,S103,S104構(gòu)成的循環(huán),可以獲得所有內(nèi)容發(fā)生了改變的關(guān)系表的數(shù)據(jù)最小變動(dòng)集。
權(quán)利要求
1.一種在關(guān)系數(shù)據(jù)庫(kù)中獲取數(shù)據(jù)最小變動(dòng)集的處理方法,其步驟包括第一步,記錄數(shù)據(jù)修改過(guò)程中所有修改內(nèi)容,第二步,獲取數(shù)據(jù)最小變動(dòng)集,第三步,清除處理過(guò)程中建立的關(guān)系表,并置關(guān)系數(shù)據(jù)庫(kù)中所有表為“內(nèi)容未改變”。
2.根據(jù)權(quán)利要求1所述的在關(guān)系數(shù)據(jù)庫(kù)中獲取數(shù)據(jù)最小變動(dòng)集的處理方法,其特征在于所說(shuō)的記錄數(shù)據(jù)修改過(guò)程中所有修改內(nèi)容,其步驟包括a、對(duì)關(guān)系數(shù)據(jù)庫(kù)中每個(gè)關(guān)系表R_xxx,均建立兩個(gè)對(duì)應(yīng)的關(guān)系表R_xxx_Change,R_xxx_Source,并分別把它們比關(guān)系表R_xxx增多的一個(gè)字段Operate_Id與關(guān)系表R_xxx的主鍵一起聯(lián)合作為關(guān)系表R_xxx_Change,R_xxx_Source的主鍵;其它字段則與關(guān)系數(shù)R_xxx相同,b、對(duì)關(guān)系表的插入、刪除、更新操作進(jìn)行編碼,c、在關(guān)系數(shù)據(jù)庫(kù)中所有關(guān)系表建立插入、刪除、更新觸發(fā)器,并且建立一種標(biāo)識(shí)記錄關(guān)系數(shù)據(jù)庫(kù)中每個(gè)關(guān)系表的內(nèi)容是否發(fā)生改變的機(jī)制。
3.根據(jù)權(quán)利要求1所述的在關(guān)系數(shù)據(jù)庫(kù)中獲取數(shù)據(jù)最小變動(dòng)集的處理方法,其特征在于所說(shuō)的獲取數(shù)據(jù)最小變動(dòng)集,其步驟包括a、建立一個(gè)獲取所有發(fā)生改變的關(guān)系表中變動(dòng)數(shù)據(jù)的數(shù)據(jù)采集總?cè)肟?,根?jù)關(guān)系表的內(nèi)容改變情況,決定是否對(duì)相應(yīng)關(guān)系表進(jìn)行數(shù)據(jù)采集,b、對(duì)每一個(gè)關(guān)系表R_xxx,在內(nèi)存中創(chuàng)建與之對(duì)應(yīng)的兩個(gè)全局臨時(shí)關(guān)系表,c、對(duì)關(guān)系表R_xxx,建立一個(gè)與之相對(duì)應(yīng)的存儲(chǔ)過(guò)程,完成關(guān)系表R_xxx數(shù)據(jù)最小變動(dòng)集的采集,存儲(chǔ)過(guò)程全局臨時(shí)關(guān)系表##R_xxx_Send中存儲(chǔ)的數(shù)據(jù)即為關(guān)系表R_xxx中數(shù)據(jù)最小變動(dòng)集,其同時(shí)滿(mǎn)足以下四個(gè)條件①包括向關(guān)系表R_xxx插入的記錄,標(biāo)識(shí)為插入;②包括從關(guān)系表R_xxx刪除的記錄,標(biāo)識(shí)為刪除;③若向關(guān)系表R_xxx插入一條記錄,經(jīng)過(guò)若干步驟之后,再把此記錄刪除,則數(shù)據(jù)最小變動(dòng)集中不得包括此記錄;④對(duì)于更新操作,如果不更新記錄主鍵,則數(shù)據(jù)最小變動(dòng)集只包括更新后的記錄;若更新主鍵,則數(shù)據(jù)最小變動(dòng)集包括對(duì)更新前記錄的刪除操作和對(duì)更新后記錄的插入操作。
全文摘要
一種在關(guān)系數(shù)據(jù)庫(kù)中獲取最小變動(dòng)集的處理方法,本方法的步驟包括先記錄數(shù)據(jù)修改過(guò)程中所有的修改內(nèi)容,再獲取數(shù)據(jù)最小變動(dòng)集,最后,清除處理過(guò)程中所建立的關(guān)系表。根據(jù)本發(fā)明方法,在碼分多址基站系統(tǒng)的操作維護(hù)商用數(shù)據(jù)庫(kù)上建立獲取基站系統(tǒng)配置數(shù)據(jù)最小變動(dòng)集處理模塊,同步服務(wù)器端由客戶(hù)端設(shè)備控制,從該操作維護(hù)商用數(shù)據(jù)庫(kù)取出基站系統(tǒng)配置數(shù)據(jù)最小變動(dòng)集經(jīng)套接字發(fā)送到實(shí)時(shí)數(shù)據(jù)庫(kù),明顯提高了數(shù)據(jù)同步傳送效率和節(jié)省基站設(shè)備中CPU接受變動(dòng)的配置數(shù)據(jù)時(shí)間。
文檔編號(hào)G06F17/00GK1426003SQ0113914
公開(kāi)日2003年6月25日 申請(qǐng)日期2001年12月20日 優(yōu)先權(quán)日2001年12月20日
發(fā)明者蔣新建 申請(qǐng)人:深圳市中興通訊股份有限公司