變更數據表結構的方法
【專利摘要】本發明提供變更數據表結構的方法,有助于使變更數據表結構的執行時間較短且可控。本發明的一種變更數據表結構的方法包括:對應于一個或多個處于運行狀態原結構數據表,所述計算機網絡中的各個節點保存一個或多個新結構數據表;將選定的節點作為新發布節點,其他節點為新訂閱節點,新發布表和新訂閱表分別為新發布節點和新訂閱節點中的所述新結構數據表,將新發布節點中的所述原結構數據表中的數據添加到對應的新結構數據表中,并將該數據發布到新訂閱節點;在各個節點中的新結構數據表與原結構數據表達到數據同步的情況下,停止所述根節點中的原結構數據表的數據寫入,然后將各個節點中的新結構數據表作為運行狀態的數據表。
【專利說明】變更數據表結構的方法
【技術領域】
[0001] 本發明涉及一種變更數據表結構的方法。
【背景技術】
[0002] 隨著計算機網絡應用的普及,數據庫的容量也在不斷增大,變更數據表結構的工 作也變得越來越耗時。變更數據表結構的慣常做法一般有2種:
[0003] 1、直接在數據表上操作,變更表結構定義,可能存在的直接影響,如下面的1、2兩 個原因。
[0004] 2、創建新結構表,在維護窗口導入數據,再修改表名;可能存在的影響只是數據導 入時間受原表大小制約。
[0005] 維護窗口是業務的暫停時間段,為了盡可能小的影響系統運行,維護窗口越短越 好。面對數據量日益增長的數據表,尤其是已經上千萬條數據,容量超過幾十GB甚至上百 GB時,對大容量表的結構變更工作(專指擴充現有固定長度的字段長度)就變得十分困難, 原因有以下幾點:
[0006] 1、停機時間增長。因為對數據表中固定長度的字段進行長度擴充時(包括但不限 于int類型變更為bigint、char (10)變更為char (20)等),為保證關系數據庫的ACID原 貝1J,會對數據表添加架構更新鎖(Schema-M),以阻止在結構變更時有新數據寫入;而對于 大容量的表而言,結構變更的執行時間(以下簡稱執行時間)將變得更長,以至于超出預期 的維護窗口時間,直接影響業務訪問;
[0007] 2、執行及回滾時間風險增加。隨著數據量的增加,大容量表的結構變更時間將優 于數據量的增長而快速增加,一旦超出維護窗口時間,是繼續等待還是終止變更進入回滾 狀態,將令維護人員很難抉擇,而且回滾時間可能超出已經執行時間的幾倍或者幾十倍。這 使得操作的不確定性風險大大增加;此外,由于生產環境的復雜程度,很難在測試環境完全 模擬生產環境提前進行測試,使得測試結果的適用性、可靠性降低,這也增加了對執行時間 不可控的風險。
[0008] 因此對于變更數據表結構來說,需要一種執行時間較短且可控的方案。
【發明內容】
[0009] 有鑒于此,本發明提供一種變更數據表結構的方法,有助于使變更數據表結構的 執行時間較短且可控。
[0010] 為實現上述目的,根據本發明的一個方面,提供了一種變更數據表結構的方法。
[0011] 本發明的這種變更數據表結構的方法,用于在包含根節點以及多級子節點的計算 機網絡中變更各節點中的數據表的結構,所述根節點中的數據表接收數據并向各子節點發 布,該方法包括:對應于一個或多個處于運行狀態原結構數據表,所述計算機網絡中的各個 節點保存一個或多個新結構數據表;將選定的節點作為新發布節點,其他節點為新訂閱節 點,新發布表和新訂閱表分別為新發布節點和新訂閱節點中的所述新結構數據表,將新發 布節點中的所述原結構數據表中的數據添加到對應的新結構數據表中,并將該數據發布到 新訂閱節點中的新結構數據表中;在各個節點中的新結構數據表與原結構數據表達到數據 同步的情況下,停止所述根節點中的原結構數據表的數據寫入,然后將各個節點中的新結 構數據表作為運行狀態的數據表。
[0012] 可選地,所述選定的節點是所述根節點或所述子節點。
[0013] 可選地,所述選定的節點是向所述計算機網絡添加的新節點,該新節點為所述根 節點的訂閱節點。
[0014] 可選地,所述將新發布節點中的所述原結構數據表中的數據添加到對應的新結構 數據表中的步驟包括:將新發布節點中的所述原結構數據表中的指定范圍的數據添加到對 應的新結構數據表中,然后將該原結構數據表與該新結構數據表之間的差異數據添加到該 新結構數據表中。
[0015] 可選地,將各個節點中的新結構數據表作為運行狀態的數據表的步驟包括:將各 個節點中的新結構數據表的表名修改為運行狀態的數據表的表名。
[0016] 根據本發明的另一方面,提供了另一種變更數據表結構的方法。
[0017] 本發明的這種變更數據表結構的方法,用于變更單節點中的數據表的結構,該方 法包括:對應于一個或多個處于運行狀態原結構數據表,所述單節點保存一個或多個新結 構數據表;設置新節點,并將該新節點和所述單節點分別作為訂閱節點和發布節點;將所 述新節點作為新發布節點,所述單節點作為新訂閱節點,新發布表和新訂閱表分別為新發 布節點和新訂閱節點中的所述新結構數據表,將新發布節點中的所述原結構數據表中的數 據添加到對應的新結構數據表中,并將該數據發布到新訂閱節點中的新結構數據表中;在 各個節點中的新結構數據表與原結構數據表達到數據同步的情況下,停止所述根節點中的 原結構數據表的數據寫入,然后將各個節點中的新結構數據表作為運行狀態的數據表。
[0018] 可選地,所述將新發布節點中的所述原結構數據表中的數據添加到對應的新結構 數據表中的步驟包括:將新發布節點中的所述原結構數據表中的指定范圍的數據添加到對 應的新結構數據表中,然后將該原結構數據表與該新結構數據表之間的差異數據添加到該 新結構數據表中。
[0019] 可選地,將各個節點中的新結構數據表作為運行狀態的數據表的步驟包括:將各 個節點中的新結構數據表的表名修改為運行狀態的數據表的表名。
[0020] 根據本發明的技術方案,在變更數據表結構時,在維護窗口期間之前,將原結構數 據表的數據轉移到新結構數據表中,對于原結構數據表與新結構數據表之間仍存在的差異 數據則陸續補齊,使二者數據同步;然后進入維護窗口,在維護窗口期間,將新結構數據表 作為運行狀態的數據表,主要工作是修改數據表的名稱,耗時較短,再加上一些檢查、測試 的工作,這些工作耗時一般不高,因此總的來說能夠大幅度縮短維護窗口的長度。并且從本 實施例技術方案可以看出,維護窗口的長度主要取決于數據表的個數,而與數據表本身的 大小無關,而數據表的個數一般有限而且較為穩定,所以維護窗口的時間可控。
【專利附圖】
【附圖說明】
[0021] 附圖用于更好地理解本發明,不構成對本發明的不當限定。其中:
[0022] 圖1是與本發明實施例有關的計算機網絡的示意圖;
[0023] 圖2是根據本發明實施例的變更數據表結構的方法的主要步驟的示意圖;
[0024] 圖3是根據本發明實施例的向新結構數據表填充數據的示意圖。
【具體實施方式】
[0025] 以下結合附圖對本發明的示范性實施例做出說明,其中包括本發明實施例的各種 細節以助于理解,應當將它們認為僅僅是示范性的。因此,本領域普通技術人員應當認識 至IJ,可以對這里描述的實施例做出各種改變和修改,而不會背離本發明的范圍和精神。同 樣,為了清楚和簡明,以下的描述中省略了對公知功能和結構的描述。
[0026] 圖1是與本發明實施例有關的計算機網絡的示意圖。如圖1所示,根節點11中運 行的數據表為發布表,發布表的內容向各級子節點例如節點21發送,各級子節點中運行的 數據表為訂閱表,訂閱表的內容全部來自于發布表。各個節點中運行的數據表可以是一個, 也可以是多個。在變更表結構時,發布表和各個訂閱表都需要變更。
[0027] 在本發明實施例中,各個節點中的原結構數據表之間的訂閱關系是圖中的各級子 節點中的訂閱表的數據來自于根節點11中的發布表,數據表中的數據的流向如圖1中的直 線箭頭所示。在變更數據表結構時,在各個節點中建立每個原結構數據表對應的新結構的 數據表,此時新結構數據表尚為空表,需將數據導入其中。在這種情況下,本實施例中采用 一種新的發布-訂閱機制來實現各個節點中的新結構數據表的數據填充。以下結合圖2作 出說明。圖2是根據本發明實施例的變更數據表結構的方法的主要步驟的示意圖。
[0028] 步驟S21 :各個節點保存各自原結構數據表所對應的新結構數據表。新結構數據 表應當與原結構數據表一一對應。一個簡單的對應方式是新結構數據表的表名由原結構數 據表的表名加上前綴或后綴而構成。當然也可采用其他的方式來實現上述對應,使新結構 數據表在作為運行狀態數據表時能夠準確地取代對應的原結構數據表。在接下來的步驟 中,新結構數據表會被填充數據,在該過程中,原結構數據表仍處于運行狀態,即根節點11 中的發布表會接受外部的數據寫入,按原有的訂閱關系,數據會按圖1中的直線箭頭所示 分發到各個訂閱表。
[0029] 步驟S22 :選定一個節點為新發布節點。以圖1為例,可以選擇根節點11,也可以 選擇其他節點,在以下描述中,以選擇節點31作為新發布節點,則其他節點例如節點21、 35、包括節點11,都成為新訂閱節點。也就是說這里形成了另一套發布-訂閱架構。本步驟 中,選定的新節點是系統中已有的節點,也可以在系統中新設置一個節點作為新發布節點, 盡量使本步驟中選擇的發布節點有充足的運算資源,有利于后續步驟的高效執行。
[0030] 步驟S23 :在新發布節點內對新結構數據表進行數據填充。可以按照指定的范圍, 例如創建副本的時間點之前的數據,先將新發布節點中的原結構數據表的該范圍的數據填 充到該原結構數據表對應的新結構表中。參考圖3,圖3是根據本發明實施例的向新結構數 據表填充數據的示意圖。
[0031] 圖3中,原結構數據表31中,指定范圍的數據為數據311,將其副本填充到對應的 新結構數據表32中。因為各個節點中的原數據表仍會持續地接收到新數據,對于節點11 來說是外部的寫入數據,對于節點11的各個子節點來說是通過訂閱得到的數據,所以在新 結構數據表得到數據311后,原結構數據表31中又出現新數據312。對于該新數據來說,該 新數據312是按原有的訂閱關系得到(若新發布節點是根節點11,則該新數據312則是外 部寫入數據),也需要添加到新結構數據表32中。在添加的過程中又會出現新的差異數據, 仍需添加到新結構數據表32中,因為添加的速度大于新的差異數據出現的速度,所以這是 一個收斂的過程,最終達到只要原結構數據表收到一項數據就會立即添加到新結構數據表 的狀態,即二者形成同步。
[0032] 步驟S24 :將選擇的發布節點內的新結構數據表的數據分發到其他節點中。這里 即按上述的另一套發布-訂閱系統進行數據發布,使數據到達新訂閱節點中的新結構數據 表中,數據的流向如圖1中的彎線箭頭所示。實際上本步驟與步驟S23有部分的重疊,因為 差異數據是分批地補充到新結構數據表,從而也是分批地進行發布。在每個節點中的新結 構數據表和原結構數據表情況下,就可以進入數據維護窗口。
[0033] 步驟S25 :停止根節點中的原結構數據表的數據寫入。本步驟實現停寫,標志著進 入維護窗口。
[0034] 步驟S26 :將各個節點中的新結構數據表作為運行狀態的數據表。具體是將各個 節點中的新結構數據表的表名修改為運行狀態的數據表的表名。
[0035] 以上對于更新圖1所示的計算機網絡中的數據表結構的方案做出了說明。該方案 的構思可以應用于僅包含單個節點的系統中。可以在該單節點中建立新結構數據表并使其 與原結構數據表的數據同步,然后進入數據維護窗口,以及將該新結構數據表作為運行狀 態的數據表。也可以新增一個節點,將其作為原單個節點的訂閱節點,再將該新增的節點作 為新的發布節點,原單個節點作為訂閱節點,以形成新的發布-訂閱架構,然后按照類似于 圖2的步驟完成數據表的結構更新。
[0036] 根據本發明實施例的技術方案,在變更數據表結構時,在維護窗口期間之前,將原 結構數據表的數據轉移到新結構數據表中,對于原結構數據表與新結構數據表之間仍存在 的差異數據則陸續補齊,使二者數據同步;然后進入維護窗口,在維護窗口期間,將新結構 數據表作為運行狀態的數據表,主要工作是修改數據表的名稱,耗時較短,再加上一些檢 查、測試的工作,這些工作耗時一般不高,因此總的來說能夠大幅度縮短維護窗口的長度。 并且從本實施例技術方案可以看出,維護窗口的長度主要取決于數據表的個數,而與數據 表本身的大小無關,而數據表的個數一般較少而且較為穩定,所以維護窗口的時間可控。經 發明人測算,在原結構數據表為16個、40%左右的表的記錄數在5000萬以上的情況下,采 用現有技術至少需要70小時,而采用本實施例的技術方案只需3小時,維護窗口的長度縮 短至1/20以內。
[0037] 以上結合具體實施例描述了本發明的基本原理,但是,需要指出的是,對本領域的 普通技術人員而言,能夠理解本發明的方法和設備的全部或者任何步驟或者部件,可以在 任何計算裝置(包括處理器、存儲介質等)或者計算裝置的網絡中,以硬件、固件、軟件或者 它們的組合加以實現,這是本領域普通技術人員在閱讀了本發明的說明的情況下運用他們 的基本編程技能就能實現的。
[0038] 因此,本發明的目的還可以通過在任何計算裝置上運行一個程序或者一組程序來 實現。所述計算裝置可以是公知的通用裝置。因此,本發明的目的也可以僅僅通過提供包 含實現所述方法或者裝置的程序代碼的程序產品來實現。也就是說,這樣的程序產品也構 成本發明,并且存儲有這樣的程序產品的存儲介質也構成本發明。顯然,所述存儲介質可以 是任何公知的存儲介質或者將來開發出的任何存儲介質。
[0039] 還需要指出的是,在本發明的裝置和方法中,顯然,各部件或各步驟是可以分解和 /或重新組合的。這些分解和/或重新組合應視為本發明的等效方案。并且,執行上述系列 處理的步驟可以自然地按照說明的順序按時間順序執行,但是并不需要一定按照時間順序 執行。某些步驟可以并行或彼此獨立地執行。
[0040] 上述【具體實施方式】,并不構成對本發明保護范圍的限制。本領域技術人員應該明 白的是,取決于設計要求和其他因素,可以發生各種各樣的修改、組合、子組合和替代。任何 在本發明的精神和原則之內所作的修改、等同替換和改進等,均應包含在本發明保護范圍 之內。
【權利要求】
1. 一種變更數據表結構的方法,用于在包含根節點以及多級子節點的計算機網絡中變 更各節點中的數據表的結構,所述根節點中的數據表接收數據并向各子節點發布,其特征 在于,該方法包括: 對應于一個或多個處于運行狀態原結構數據表,所述計算機網絡中的各個節點保存一 個或多個新結構數據表; 將選定的節點作為新發布節點,其他節點為新訂閱節點,新發布表和新訂閱表分別為 新發布節點和新訂閱節點中的所述新結構數據表,將新發布節點中的所述原結構數據表中 的數據添加到對應的新結構數據表中,并將該數據發布到新訂閱節點中的新結構數據表 中; 在各個節點中的新結構數據表與原結構數據表達到數據同步的情況下,停止所述根節 點中的原結構數據表的數據寫入,然后將各個節點中的新結構數據表作為運行狀態的數據 表。
2. 根據權利要求1所述的方法,其特征在于,所述選定的節點是所述根節點或所述子 節點。
3. 根據權利要求1所述的方法,其特征在于,所述選定的節點是向所述計算機網絡添 加的新節點,該新節點為所述根節點的訂閱節點。
4. 根據權利要求1、2或3所述的方法,其特征在于,所述將新發布節點中的所述原結構 數據表中的數據添加到對應的新結構數據表中的步驟包括:將新發布節點中的所述原結構 數據表中的指定范圍的數據添加到對應的新結構數據表中,然后將該原結構數據表與該新 結構數據表之間的差異數據添加到該新結構數據表中。
5. 根據權利要求1、2或3所述的方法,其特征在于,將各個節點中的新結構數據表作為 運行狀態的數據表的步驟包括:將各個節點中的新結構數據表的表名修改為運行狀態的數 據表的表名。
6. -種變更數據表結構的方法,用于變更單節點中的數據表的結構,其特征在于,該方 法包括: 對應于一個或多個處于運行狀態原結構數據表,所述單節點保存一個或多個新結構數 據表; 設置新節點,并將該新節點和所述單節點分別作為訂閱節點和發布節點; 將所述新節點作為新發布節點,所述單節點作為新訂閱節點,新發布表和新訂閱表分 別為新發布節點和新訂閱節點中的所述新結構數據表,將新發布節點中的所述原結構數據 表中的數據添加到對應的新結構數據表中,并將該數據發布到新訂閱節點中的新結構數據 表中; 在各個節點中的新結構數據表與原結構數據表達到數據同步的情況下,停止所述根節 點中的原結構數據表的數據寫入,然后將各個節點中的新結構數據表作為運行狀態的數據 表。
7. 根據權利要求6所述的方法,其特征在于,所述將新發布節點中的所述原結構數據 表中的數據添加到對應的新結構數據表中的步驟包括:將新發布節點中的所述原結構數據 表中的指定范圍的數據添加到對應的新結構數據表中,然后將該原結構數據表與該新結構 數據表之間的差異數據添加到該新結構數據表中。
8.根據權利要求6或7所述的方法,其特征在于,將各個節點中的新結構數據表作為運 行狀態的數據表的步驟包括:將各個節點中的新結構數據表的表名修改為運行狀態的數據 表的表名。
【文檔編號】G06F17/30GK104112016SQ201410344171
【公開日】2014年10月22日 申請日期:2014年7月18日 優先權日:2014年7月18日
【發明者】肖磊 申請人:北京京東尚科信息技術有限公司, 北京京東世紀貿易有限公司