国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      數(shù)據同步的方法和系統(tǒng)的制作方法

      文檔序號:6461985閱讀:98來源:國知局
      專利名稱:數(shù)據同步的方法和系統(tǒng)的制作方法
      技術領域
      本發(fā)明涉及數(shù)據同步的方法和系統(tǒng),特別涉及增量數(shù)據同步的方法和 系統(tǒng)。
      背景技術
      近年來,隨著各類移動設備(如智能手機,個人數(shù)字助理,筆記本電 腦等)的廣泛使用,在機場、高級寫字樓、圖書館、餐館或咖啡館里,移 動辦公的人士比比皆是。移動設備的用戶實際上可以作為系統(tǒng)服務器的一 個客戶機,客戶機所取得的現(xiàn)場資料需要與系統(tǒng)服務器數(shù)據庫同步,當存 在數(shù)據的多個副本時,這些副本需要保持一致性, 一旦斷開連接,服務器 與每個客戶機都可以修改各自的數(shù)據。為了獲得數(shù)據的一致性,必須建立 連接并且使各個客戶機與服務器保持同步。數(shù)據庫同步技術可以實現(xiàn)不同 數(shù)據庫之間的數(shù)據交換,并確保保持所有數(shù)據庫中數(shù)據的一致性。
      一種提高數(shù)據庫同步效率的方法是增量數(shù)據同步,即,在客戶機與服 務器同步時只需交換變化的數(shù)據,而無需交換全部數(shù)據。增量數(shù)據同步的 方法在數(shù)據庫龐大而內容變化較小的情況下極為有利。例如,如果數(shù)據庫
      包含500, 000個產品訂單,并且每天只增加200個或變化200個產品訂單, 那么每天將全部產品訂單(即500, 000)從合并了所有變化的數(shù)據庫發(fā)送 到另 一 個要求同步的數(shù)據庫將浪費大量的通信資源。
      為了支持增量數(shù)據同步,傳統(tǒng)的數(shù)據同步系統(tǒng)在服務器端維護一個或 多個版本號來跟蹤發(fā)生變化的時間點。當客戶機執(zhí)行同步時,從服務器端 取出相對于最后一次同步的版本的增量數(shù)據變化。然而,變化的數(shù)據將在 行級別同步,這意味著不管這行有多少列發(fā)生變化,整行數(shù)據都將被取出并且被發(fā)送出去。這樣產生的問題是在多數(shù)情況下該行中只有部分列被 更新,然而在有限帶寬的情況下,未發(fā)生變化的列也將初L發(fā)送出去。因此 在一個表包含很多列或未發(fā)生變化的列包含諸如LOG, BINARY或者 XML等當前越來越常見的大數(shù)據類型的情況下,極大地降低了同步性能。 目前存在一種在服務器與客戶機之間的數(shù)據庫進行增量數(shù)據同步方 法,該方法主要包括在客戶機端保存客戶機端上一次同步的數(shù)據副本, 在客戶機與服務器同步時,在客戶端通過比較客戶端數(shù)據與上一次同步的 數(shù)據副本來確定自從上一次同步客戶端數(shù)據發(fā)生的數(shù)據列變化,并將該數(shù) 據列變化廣播到服務器,從而來確定自從上一次同步服務器上發(fā)生的數(shù)據 變化。但是該方法有兩個主要缺點, 一是在同步時需要大量時間實時比較 現(xiàn)有數(shù)據和原有數(shù)據,增加了同步延遲,降低了同步效率;二是需要在每 一個需要同步的計算機上另外維護一個上一次同步的數(shù)據副本,增加了大 量的存儲需求。因此這種增量數(shù)據同步方法的效率是一種傳統(tǒng)的效率低下 的方法。
      因此,需要一種改進的、提高同步效率的方法來支持服務器與客戶機 之間的增量數(shù)據同步。

      發(fā)明內容
      為了解決上述問題,本發(fā)明設計了 一種數(shù)據同步的方法和系統(tǒng)。
      根據本發(fā)明的一個方面,提供一種數(shù)據同步的方法,包括未同步時 記錄數(shù)據記錄的變化歷史;響應于接收到的同步請求,合并所述數(shù)據記錄 的變化歷史;發(fā)送所述合并結果。
      根據本發(fā)明的另一方面,提供一種數(shù)據同步系統(tǒng),包括記錄裝置, 用于未同步時記錄數(shù)據記錄的變化歷史;同步引擎,響應于接收到的同步 請求,合并所述數(shù)據記錄的變化歷史,并發(fā)送所述合并結果。
      本發(fā)明的方法在未同步時記錄數(shù)據記錄的變化歷史,在進行同步時使 用高效的合并方法合并數(shù)據記錄的變化歷史,從而在同步時節(jié)省了大量新 舊版本的比較計算資源,并且不同于將相同數(shù)據記錄的所有變化數(shù)據記錄發(fā)送到對方,而僅似目互交換數(shù)據記錄中變化的字段,同步雙方各自將變 化的字段從一端發(fā)送到另一端,從而提高同步效率。
      附圖簡述
      結合附圖,通過參考下列詳細的示例性實施例的描述,將會更好地理 解本發(fā)明本身、優(yōu)選的實施方式以及本發(fā)明的目標和優(yōu)點,其中


      圖1示出本發(fā)明的數(shù)據同步方法的流程圖2示出根據本發(fā)明的服務器與客戶機之間進行數(shù)據同步的系統(tǒng)示意
      圖3示出根據本發(fā)明的服務器與客戶機之間進行數(shù)據同步的流程圖4A示出服務器端源數(shù)據表的示例;
      圖4B示出服務器端的歷史表模式;
      圖4C示出服務器端第一次加栽源數(shù)據表的歷史表的示例;
      圖5A示出服務器端第一次發(fā)生變化之后的源數(shù)據表的示例;
      圖5B示出服務器端第二次加載源數(shù)據表的歷史表的示例;
      圖6A示出服務器端第五次加載源數(shù)據表之前的源數(shù)據表的示例;
      圖6B示出服務器端在第五次加載源數(shù)據表之后的歷史表的示例;
      圖7示出才艮據本發(fā)明的利用翁:據記錄的變化歷史進行合并的方法流程
      圖8詳細描述了圖7中合并數(shù)據記錄的工作過程流程圖; 圖9示出使用圖8中的方法進行合并的示例; 圖IOA示出客戶機數(shù)據表的模式; 圖IOB示出客戶機數(shù)據表的示例;
      圖10C示出經過一些變化之后的圖10B的客戶機lt據表的示例; 圖11示出根據本發(fā)明的處理服務器與客戶機之間沖突的方法示意圖; 圖12示出本發(fā)明的同步系統(tǒng)示意圖。
      發(fā)明詳述下面結合附圖詳細描述本發(fā)明的數(shù)據同步方法和系統(tǒng)。
      本發(fā)明的數(shù)據同步方法涉及存儲在任何存儲介質的數(shù)據記錄,數(shù)據記 錄包括多個表示數(shù)據記錄屬性、特征的字段。根據本發(fā)明的數(shù)據記錄能夠 利用某種屬性或特征來唯一標識,例如可以在數(shù)據記錄中創(chuàng)建一個字段, 這個字段的值是某種形式的唯一數(shù)值(如時間戳),用這個數(shù)值來唯一標 識數(shù)據記錄。
      參照圖1描述根據本發(fā)明的數(shù)據同步的方法,在步驟101,未同步時
      記錄數(shù)據記錄的變化歷史;在步驟102,響應于接收到的同步請求,合并 所述數(shù)據記錄的變化歷史;在步驟103發(fā)送所述合并結果。
      根據本發(fā)明的實施例,所述數(shù)據記錄的變化歷史為數(shù)據字段的變化歷 史。所述變化歷史通過變化類型、變化位以及版本號來記錄,所述變化類 型用于記錄所述數(shù)據記錄變化的變化類型,所述變化位用于記錄與所述數(shù) 據記錄的變化類型對應的字段變化狀態(tài),并且所述版本號用于標記所述數(shù) 據記錄的有效時間點。
      本發(fā)明的數(shù)據同步的方法可以應用于服務器與 一個客戶機之間以及服 務器與多個客戶機之間的計算機網絡系統(tǒng),在服務器與客戶機中存儲有數(shù) 據記錄,每個數(shù)據記錄包括多個表示數(shù)據記錄屬性、特征的字段。圖2示 出根據本發(fā)明的服務器與客戶機之間進行數(shù)據同步的系統(tǒng)示意圖,該系統(tǒng) 包括服務器200和多個客戶機204, 207, 210,服務器側存儲有需要與客 戶機同步的數(shù)據記錄表201,對于數(shù)據記錄表中的每個數(shù)據記錄,存在記 錄該數(shù)據記錄變化歷史的歷史表202。在客戶機204、 207、 210分別存儲 有數(shù)據記錄表205、 208、 211,所述客戶機端數(shù)據記錄表包含與服務器側 的數(shù)據記錄表相同或部分相同的數(shù)據。歷史表202和數(shù)據記錄表205、 208、 211分別記錄服務器端和客戶機端數(shù)據記錄的變化類型和變化位,從而記 錄服務器端和客戶機端數(shù)據記錄的變化狀態(tài)。服務器包括同步引擎103, 用于合并服務器端數(shù)據記錄的變化歷史以及識別服務器與客戶機以及客戶 機與客戶機之間的沖突,客戶機204、 207、 210分別包括同步引擎206、 209、 212,用于合并客戶機端數(shù)據記錄。服務器同步引擎與客戶機同步引擎可以進行通信來執(zhí)行雙向數(shù)據同步,各自將數(shù)據記錄中變化的字段發(fā)送 給對方。
      圖3示出根據本發(fā)明的在服務器與客戶機之間進行數(shù)據同步的流程 圖。在步驟301,在服務器端記錄數(shù)據記錄的變化歷史,例如,存在有一 個記錄數(shù)據記錄的變化歷史的歷史表,其中所述歷史表中包括變化類型、 變化位以及版本號,所述變化類型用來記錄所述數(shù)據記錄變化的變化類型, 而所述變化位用來記錄與所述數(shù)據記錄的變化類型對應的字段變化狀態(tài), 并且所述版本號用于標記所述數(shù)據記錄的有效時間點。在步驟303,響應 于接收到的客戶機的同步請求,服務器合并數(shù)據記錄的變化歷史,利用歷 史表合并相同數(shù)據記錄的多個變化數(shù)據記錄的變化類型和變化位并產生對 于客戶機的增量變化字段。服務器將根據合并結果產生一個或兩個發(fā)送操 作并將所述發(fā)送操作發(fā)送給客戶機。在步驟302,在客戶機端記錄當前時 刻的數(shù)據記錄相對于上一次同步的變化狀態(tài),所述客戶機包含的數(shù)據記錄 與服務器端的數(shù)據記錄全部或部分相同,所述客戶機利用變化類型和變化 位來記錄當前時刻的數(shù)據記錄相對于上一次同步的變化狀態(tài),其中所述變 化類型用于記錄當前時刻客戶機的數(shù)據記錄相對于上一次同步的變化類 型,所述變化位用于記錄與所述客戶機的數(shù)據記錄的變化類型對應的字段 變化狀態(tài)。在步驟304,在服務器與客戶機進行雙向通信時僅僅相互交換 變化的字段,各自將變化的字段從一端發(fā)送到另一端。在步驟305,服務 器將來自不同客戶端的變化位進行比較來識別服務器與客戶機以及客戶機 與客戶機之間的沖突。
      如果添加數(shù)據記錄,則設置所述數(shù)據記錄的變化類型為添加并且標記 所述數(shù)據記錄的變化位;如果刪除數(shù)據記錄,則設置所述數(shù)據記錄的變化 類型為刪除并且標記所述數(shù)據記錄的變化位;如果更新數(shù)據記錄,則設置 所述數(shù)據記錄的變化類型為更新并且標記所述數(shù)據記錄的變化位。
      根據本發(fā)明的實施例,服務器端和客戶機端的數(shù)據記錄可以存儲在數(shù) 據庫中,圖4A示出服務器端源數(shù)據表的示例,該源數(shù)據表中有三列整數(shù) 類型(C1, C2, C3), —列可變字符串類型(CCHAR),以及一列二進制大數(shù)據類型(CBLOB ),其中Cl是主關鍵字列,其余C2, C3, CCHAR 以及CBLOB是非主關鍵字列。在源數(shù)據表中存在初始化的兩行數(shù)據。
      圖4B示出歷史表模式,歷史表記錄了服務器端源數(shù)據表中源數(shù)據行 的變化歷史,源數(shù)據行的變化將被定時捕捉,并將每個源數(shù)據行的變化用 歷史表中的一個變化行來表示。歷史表模式包含主關鍵字列PK column, 非主關鍵字列Non-PK Column, From版本號,To版本號,變化類型 ChangeType以及變化位ChangeBits。 From版本號和to版本號是用于標 記源數(shù)據行的變化行在兩個相對時間點有效的版本號,from版本號表示變 化行開始存在的時間點,而to版本號表示變化行有效屆滿的時間點,即意 味著該變化行要出現(xiàn)新的變化。源數(shù)據表的所有變化行都將被捕獲并被周 期地加載到歷史表中。根據本發(fā)明的實施例,如果添加源數(shù)據行,則可以 設置所述源數(shù)據行的變化類型ChangeType為'T (添加)并且標記變化 位Changebits,例如將變化位Changebits的所有位置為1;如果刪除源數(shù) 據行,則可以設置所述源數(shù)據行的變化類型ChangeType為 "D"(刪除) 并且標記變化位Changebits,例如將變化位Changebits的所有位置為0; 如果更新源數(shù)據行,則可以設置所述源數(shù)據行的變化類型ChangeType為 更新"U"并且標記變化位Changebits,例如可以將與所述源數(shù)據行的更 新的列相對應的變化位Changebits置為1以及將與所述源數(shù)據行的未更新 的列相對應的變化位Changebits置為0。
      圖4C示出第一次加載源數(shù)據表的歷史表,所有數(shù)據列與源數(shù)據表相 同。歷史表中的每一行用來記錄源數(shù)據表中的源數(shù)據行的每個變化行,對 于源數(shù)據行的每一個變化行,例如主關鍵字列Cl為1的源數(shù)據行,from 版本號是該源數(shù)據行開始存在的當前版本號1, to版本號是該源數(shù)據行有 效屆滿的版本號oo(最大值oo表示該變化行對應源數(shù)據表中當前行)。
      ChangeType為"I"表明該源數(shù)據行的變化類型為'T,(添加),ChangeBits 是二進制數(shù)據類型(1111),它的位數(shù)是該源數(shù)據表中非主關鍵字列的數(shù) 目,因此對于源數(shù)據表中的四個非主關鍵列字,ChangeBits是四位二進制 數(shù),其從左至右每一位表示主關鍵字列Cl為1、變化類型為"I"(添加)的源數(shù)據行所對應的該源數(shù)據行的非主關鍵字列從左至右每列的變化狀 態(tài)。
      圖5A-5B示出第一次發(fā)生變化之后的源數(shù)據表和歷史表,其中圖5A 示出第一次發(fā)生變化之后的源數(shù)據表,該源數(shù)據表中存在多個變化,主關 鍵字列Cl為1的源數(shù)據行的C2列被更新為"11",并且添加了主關鍵字 列Cl為3的源數(shù)據行。圖5B示出第二次加載源數(shù)據表的歷史表,相應地, 在歷史表中存在一個主關鍵字列Cl為3的新變化行,from版本號是該源 數(shù)據行開始存在的當前版本號2, to版本號是該源數(shù)據行有效屆滿的版本 號oo,其中ChangeType是 T (添加)并且ChangeBits是(1111), 以此來標記新添加的源數(shù)據行。此外還存在另一個主關鍵字列Cl為1的 新變化行,from版本號是該源數(shù)據行開始存在的當前版本號2, to版本號 是該源數(shù)據行有效屆滿的版本號oo,其中ChangeType是"U"(更新)并 且ChangeBits是(1000 ),以此來標記源數(shù)據表中主關鍵字列Cl為1的 源數(shù)據行的第一個非主關鍵字列被更新。同時原歷史表中主關鍵字列Cl 為1的變化行對應的to版本號被更新為1,表示該源數(shù)據行的變化在版本 號1之前生效。
      圖6A-6B示出多次變化之后的源數(shù)據表和歷史表,圖6A示出第五次 加載源數(shù)據表之前的源數(shù)據表,由于源數(shù)據表在第 一次變化之后沒有變化, 因此第二次至第四次加載源數(shù)據表之后的歷史表沒有變化,在第五次加載 源數(shù)據表之前,源數(shù)據表存在一些變化,主關鍵字列Cl為1的源數(shù)據行 的第一行的CCHAR列被更新為,aaaaaa,并且將主關鍵字列Cl為2的源數(shù) 據行刪除。圖6B示出在第五次加載源數(shù)據表之后的歷史表,相應地,在 歷史表中增加了兩個新的變化行, 一個是主關鍵字列Cl為1的新變化行, from版本號為該源數(shù)據行開始存在的當前版本號"5" , to版本號為該源 數(shù)據行有效屆滿的版本號"oo" , ChangeType是"U"并且ChangeBits 是(0010),以此來標記源數(shù)據表中主關鍵字列Cl為1的源數(shù)據行的第 三個非主關鍵字列CCHAR被更新。此外還存在另一個主關鍵字列Cl為 2的新變化行,from版本號為該源數(shù)據行開始存在的當前版本號"5" , to版本號為該源數(shù)據行有效屆滿的版本號"oo" , ChangeType是"D"并且 ChangeBits是(0000 ),表示源數(shù)據表中主關鍵字列Cl為2的行被刪除。 同時將原歷史表中主關鍵字列Cl為2的變化行的to版本號修改為"4", 表示該源數(shù)據行的變化在版本4之前生效,并將原歷史表中主關鍵字列為 1的第二變化行的to版本號修改為"4",表示該源數(shù)據行的變化在版本4 之前生效。
      圖7示出根據本發(fā)明的利用數(shù)據記錄的變化歷史進行合并的方法流程 圖。在步驟701,取出自上一次同步之后數(shù)據記錄的變化歷史;在步驟702, 創(chuàng)建兩個變量合并后的變化類型MergedChangeType和合并后的變化位 MergedChangeBits;在步驟703,判斷是否存在相同數(shù)據記錄的下一個變 化數(shù)據記錄,判斷為"是",則前進到步驟704,否則過程結束。在步驟 704,將相同源數(shù)據行的變化行合并,并將得到的合并后的變化類型 MergedChangeType和合并后的變化位MergedChangeBits存儲在變量 MergedChangeType和MergedChangeBits 中;在步驟705 , 取出 MergedChangeType的值,該值可以是以下四個值的其中之一"D"(刪 除),"DI"(刪除后添加),"U"(更新)以及"I"(添加)。如果 該值為"D",那么前進到步驟706,生成刪除行操作。如果該值為"DI", 則前進到步驟707,對所有字段產生先刪除,然后添加的操作;如果該值 為"U",則前進到步驟708,生成更新操作,其中包含MergedChangeBits 中標記變化的字段;如果該值為'T,,則前進到步驟709,對所有要添加 的列生成添加操作。在步驟610,判斷是否存在下一個數(shù)據記錄的變化數(shù) 據記錄,如果判斷為"是",則過程返回到步驟703再次循環(huán),否則前進 到步驟711結束過程。
      圖8詳細描述了圖7中的合并變化數(shù)據記錄的工作過程,即,如何高 效地計算出對于相同數(shù)據記錄的多個變化數(shù)據記錄的合并后的變化類型 MergedChangeType和合并后的變化位MergedChangeBits 。流程的輸入是 自從上一次同步之后相同數(shù)據記錄的所有變化數(shù)據記錄,將所有變化數(shù)據 記錄按照由近及遠的時間順序排序,后發(fā)生的變化行將排在在序列的前面。在步驟801,根據最近變化數(shù)據記錄的ChangeType怕進行不同的步驟。
      如果最近變化數(shù)據記錄的ChangeType是 "D"(刪除),那么過程 進行到步驟802,由于不管在之前發(fā)生多少次變化,效果都等同于當前的 刪除操作,因此MergedChangeType被設置為"D ,,以及標記 MergedChangeBits,例如將MergedChangeBits i更置為全零,并且下一步 前行到步驟813。
      如果最近變化數(shù)據記錄的ChangeType是 "I"(添加),那么過程 進行到步驟803,如果在最近變化數(shù)據記錄之前不存在相同數(shù)據記錄的變 化數(shù)據記錄,則只進行添加操作,過程進行到804, MergedChangeType #皮i殳置為添力口 "I " 以及標i己 MergedChangeBits , 例如將 MergedChangeBits設置為全1;如果在最近變化數(shù)據記錄之前存在相同數(shù) 據記錄的變化數(shù)據記錄,則該變化數(shù)據記錄的ChangeType—定是刪除, 因為添加操作一定伴隨一個刪除操作,不管在刪除操作和添加操作之前有 多少次變化,最后都等同于刪除后添加的效果,過程進行到步驟805, MergedChangeType被設置為 "DI "(刪除后添加)以及標記 MergedChangeBits,例3一夸MergedChangeBits i殳置為全1 。
      如果最近變化數(shù)據記錄的ChangeType是 "U"(更新),那么前進 到步驟806,首先將變量MergedChangeType和MergedChangeBits的值 設置為最近變化數(shù)據記錄的ChangeType和ChangeBits;在步驟807,檢 查在最近變化數(shù)據記錄之前是否存在相同數(shù)據記錄的變化數(shù)據記錄,如果 在最近變化數(shù)據記錄之前不存在相同數(shù)據記錄的變化數(shù)據記錄,則過程前 進到步驟813,返回當前的MergedChangeType和MergedChangeBits;如 果在最近變化數(shù)據記錄之前存在相同數(shù)據記錄的變化數(shù)據記錄,在步驟 808進一步判斷該變化數(shù)據記錄的ChangeType,如果該變化數(shù)據記錄的 ChangeType是"U"(更新),則前進到步驟809,該MergedChangeType 仍舊是更新"U"并且MergedChangeBits將是當前MergedChangeBits和 該變化數(shù)據記錄ChangeBits的按位或邏輯運算結果,并且過程返回到808 直到將相同數(shù)據記錄的所有變化數(shù)據記錄處理完;如果該變化數(shù)據記錄的ChangeType是添加'T,,則在步驟810,進一步檢查在該變化數(shù)據記錄之 前是否存在相同數(shù)據記錄的下一個變化數(shù)據記錄,如果存在相同數(shù)據記錄 的下一個變化數(shù)據記錄,則在步驟811,該下一個變化數(shù)據記錄的 ChangeType—定是刪除,將MergedChangeType設置為 "DI"(刪除 后添力口 )以及標i己MergedChangeBits,例如4夸MergedChangeBits i殳置為 全1;否則如果不存在相同數(shù)據記錄的下一個變化數(shù)據記錄,則在步驟812, 將MergedChangeType設置為添力口 'T,并且標記MergedChangeBits,例 如將MergedChangeBits設置為全l;在步驟811和步驟812之后,過程前 進到步驟813以返回MergedChangeType和MergedChangeBits。
      圖9示出使用圖8中的方法進行變化合并的示例,為了簡單、清楚起 見,以數(shù)據庫為例,在示例(1)中,具有相同主關鍵字列的相同源數(shù)據行 的最近變化行的ChangeType是"D"(刪除),則不管之前存在多少變 化,合并結果都將是一個刪除操作,因此合并后的MergedChangeType是 刪除"D"以及MergedChangeBits是(0000)。
      在示例2中,具有相同主關鍵字列的相同源數(shù)據行的最近變化行的 ChangeType是添加'T,,并且在添加之前的變化行的ChangeType是刪 除,則在刪除之前的所有變化都可以被忽略,因此合并后的 MergedChangeType是刪除后添加"DI"以及MergedChangeBits是(1111 )。
      在示例3中,具有相同主關鍵字列的相同源數(shù)據行的所有變化行的 ChangeType都是更新"U",因此三個更新被合并,MergedChangeType 是更新"U",以及MergedChangeBits是三個ChangeBits的按位或邏輯 運算結果(0111)。
      在示例4中,具有相同主關鍵字列的相同源數(shù)據行的變化行的 ChangeType是兩個更新"U"和一個添加'T,,因此MergedChangeType 是添加'T,以及MergedChangeBits是(1111)。
      圖IOA-IOC示出客戶機數(shù)據表的示例,圖IOA示出客戶機數(shù)據表模式, 客戶機數(shù)據表模式包含主關鍵字列PK column,非主關鍵字列Non-PK Column,變化類型ChangeType以及變化位ChangeBits。圖10B示出客戶機數(shù)據表的示例,該源數(shù)據表中有三列整數(shù)類型(C1, C2, C3), 一 列可變字符串類型(CCHAR),以及一列二進制大數(shù)據類型(CBLOB), 其中C1是主關鍵字列,其余C2, C3, CCHAR以及CBLOB是非主關鍵 字列。圖IOC示出經過一些變化之后的圖IOB的客戶機數(shù)據表的示例,例 如,關鍵字Cl為1的數(shù)據行由于第三個非關鍵字列被更新為'aaaaa,, 因此ChangeType是"U"并且ChangeBits是(0010 );關鍵字列Cl為2 的數(shù)據行被刪除,因此ChangeType是"D"并且ChangeBits是(0000 ); 關鍵字列Cl為4的行被添加,因此ChangeType是'T,并且ChangeBits 是(1111)。
      如果基于上一次同步之后的客戶機數(shù)據表的數(shù)據行的變化還有新的變 化,則客戶機將舊的變化和新的變化合并
      在上一次同步之后的數(shù)據行的ChangeType為 "U"(更新)的情況 下,如果該數(shù)據行的新的ChangeType是 "D"(刪除),則合并后的 ChangeType將是 "D"(刪除)并且標記合并后的ChangeBits,例如將 其標記為(0000);如果該數(shù)據行的新的ChangeType仍舊是 "IJ"(更 新),那么合并后的ChangeType將是"U"(更新),并且合并后的 ChangeBits將是該數(shù)據4亍上一次同步的ChangeBits與當前ChangeBits的 按位或邏輯運算結果。
      在上一次同步之后的數(shù)據行的ChangeType為 "D"(刪除)的情況 下,該數(shù)據行的新的ChangeType只能是 'T (添加),那么合并后的 變化類型是"U"(更新),將上一次同步的數(shù)據行與添加后的數(shù)據行逐列 進行比較,如果相應的列值被改變,則標記ChangeBits的相應位。
      在上一次同步之后的數(shù)據行的ChangeType為'T (添加)的情況 下,如果該數(shù)據行的新的ChangeType是更新,那么合并后的ChangeType 將是添加"I"以及標記合并后的ChangeBits,例如將其標記為全l;如果 該數(shù)據行的新的ChangeType是刪除"D",則在客戶機數(shù)據表中該數(shù)據 行將^f皮整行刪除。
      圖11示出在服務器端和客戶機端都存在更新操作的情況下通過使用來自不同端的ChangeBits處理沖突的過程。在步驟1101,得到來自服務 器端和客戶機端的對于相同數(shù)據記錄的ChangeBits。在步驟1102,所有客 戶端的ChangeBits進行按位或邏輯運算,服務器端的ChangeBits與所得 到的或邏輯運算結果進行按位與邏輯運算;如果按位與邏輯運算結果不全 為零,那么在步驟1104,報告服務器與客戶機之間發(fā)生沖突;如果按位與 邏輯運算結果為全零,那么在步驟1103,檢查所有客戶機的ChangeBits 的按位與邏輯運算結果,如果所有客戶機的ChangeBits的按位與邏輯運算 結果不全為零,那么在步驟1105,報告客戶機與客戶機之間發(fā)生沖突;如 果所有客戶機的ChangeBits的按位與邏輯運算結果為全零,那么在步驟 1106,報告客戶機與客戶機之間沒有沖突發(fā)生。
      圖12示出本發(fā)明的數(shù)據同步系統(tǒng)1200,包括記錄裝置1201,用于 未同步時記錄數(shù)據記錄的變化歷史;同步引擎1202,響應于接收到的同步 請求,合并所述數(shù)據記錄的變化歷史,并發(fā)送所述合并結果。
      該記錄裝置用于如果添加數(shù)據記錄,則記錄所述數(shù)據記錄的變化類 型為添加并且標記所述數(shù)據記錄的變化位;如果刪除數(shù)據記錄,則記錄所 述數(shù)據記錄的變化類型為刪除并且標記所述數(shù)據記錄的變化位;如果更新 數(shù)據記錄,則記錄所述數(shù)據記錄的變化類型為更新并且標記所述數(shù)據記錄 的變化位。
      所述同步引擎還包括合并裝置,所述合并裝置用于分別將對應于相同 數(shù)據記錄的所有變化的變化類型和變化位進行合并,得到合并后的變化類 型和合并后的變化位。其中合并裝置還包括刪除合并裝置,如果所述相 同數(shù)據記錄的最近變化類型為刪除,則將合并后的變化類型設置為刪除并 標識合并后的變化位;添加合并裝置,如果所述相同數(shù)據記錄的最近變化 數(shù)據記錄的變化類型為添加,則在所述最近數(shù)據記錄之前不存在相同數(shù)據 記錄的下一個變化數(shù)據記錄的情況下,將合并后的變化類型"i殳置為添加并 標識合并后的變化位,否則在所述最近數(shù)據記錄之前存在相同數(shù)據記錄的 下一個變化數(shù)據記錄的情況下,將合并后的變化類型設置為刪除后添加并 標識合并后的變化位;更新合并裝置,在所述相同數(shù)據記錄的最近變化記錄的變化類型為更新的情況下,如果在所述最近變化數(shù)據記錄之前不存在 相同數(shù)椐記錄的下一個變化數(shù)據記錄,則將所述最近變化數(shù)據記錄的變化
      類型和變化位分別設置為合并后的變化類型和合并后的變化位;如果在所 述最近變化數(shù)據記錄之前存在相同數(shù)據記錄的下一個變化數(shù)據記錄并且所 述下一個變化數(shù)據記錄的變化類型是更新,則合并后的變化類型是更新, 合并后的變化位是當前合并后的變化位與所述下一個變化數(shù)據記錄的變化 位的按位或邏輯運算結果。如果在所述最近變化數(shù)據記錄之前存在相同數(shù) 據記錄的下一個變化數(shù)據記錄并且所述下一個變化數(shù)據記錄的變化類型是 添加,則進一步檢查在該變化數(shù)據記錄之前是否存在相同數(shù)據記錄的下一 個變化數(shù)據記錄,如果存在相同數(shù)據記錄的下一個變化數(shù)據記錄,則將合 并后的變化位設置為刪除后添加并且標記合并后的變化位;否則如果不存 在相同數(shù)據記錄的下 一個變化數(shù)據記錄,則將合并后的變化位設置為添加 并且標記合并后的變化位。
      當數(shù)據同步系統(tǒng)用于服務器與多個客戶機之間進行數(shù)據同步時同步引 擎還包括沖突檢測裝置,所述沖突檢測裝置用于l)分別接收來自服務器 端和多個客戶端的對于相同數(shù)據記錄的變化位;2 )對所有來自客戶機端的 變化位進行按位或邏輯運算;3)對來自服務器端的變化位以及所述客戶機 端的按位或邏輯運算結果進行按位與邏輯運算;4)根據所述按位與邏輯運 算結果來判斷所述服務器與客戶機之間是否發(fā)生沖突。
      本發(fā)明的數(shù)據同步系統(tǒng)中合并裝置的具體實現(xiàn)方法可以參照圖8和圖 9的合并方法的流程來實現(xiàn),在此不--贅述。
      本發(fā)明可以硬件、軟件、固件或其組合的方式實現(xiàn)。本發(fā)明可以集中 的方式在一個計算機系統(tǒng)中實現(xiàn),或以分布方式實現(xiàn),在這種分布方式中, 不同的部件分布在若干互連的計算機系統(tǒng)中。適于執(zhí)行本文中描述的方法 的任何計算機系統(tǒng)或其它裝置都是合適的。優(yōu)選地,本發(fā)明以計算機軟件 和通用計算機硬件的組合的方式實現(xiàn),在這種實現(xiàn)方式中,當該計算機程 序被加載和執(zhí)行時,控制該計算機系統(tǒng)而使其執(zhí)行本發(fā)明的方法,或構成 本發(fā)明的系統(tǒng)。上面出于舉例說明的目的,給出了本發(fā)明的優(yōu)選實施例的說明。優(yōu)選
      實施例的上述說明不是窮盡的,也不打算把本發(fā)明局限于^Hf的明確形式, 顯然鑒于上述教導,許多修改和變化是可能的。對本領域的技術人員來說 顯而易見的這種修改和變化包括在由附加的權利要求限定的本發(fā)明的范圍 內。
      權利要求
      1.一種數(shù)據同步的方法,包括未同步時記錄數(shù)據記錄的變化歷史;響應于接收到的同步請求,合并所述數(shù)據記錄的變化歷史;發(fā)送所述合并結果。
      2. 如權利要求l所述的方法,其中所述數(shù)據記錄的變化歷史為數(shù)據記 錄的字段的變化歷史。
      3. 如權利要求2所述的方法,其中所述變化歷史通過變化類型、變化 位以及版本號來記錄,所述變化類型用于記錄所述數(shù)據記錄變化的變化類 型,所述變化位用于記錄與所述數(shù)據記錄的變化類型對應的字段變化狀態(tài), 并且所述版本號用于標記所述數(shù)據記錄的有效時間點。
      4. 如權利要求3所述的方法,其中合并所述變化歷史的步驟包括分 別將對應于相同數(shù)據記錄的所有變化的變化類型和變化位進行合并,得到 合并后的變化類型和合并后的變化位。
      5. 如權利要求4所述的方法,其中記錄數(shù)據記錄的變化歷史的步驟還 包括如果添加數(shù)據記錄,則設置所述數(shù)據記錄的變化類型為添加并且標記 所述數(shù)據記錄的變化位;如果刪除數(shù)據記錄,則設置所述數(shù)據記錄的變化類型為刪除并且標記 所述數(shù)據記錄的變化位;如果更新數(shù)據記錄,則設置所述數(shù)據記錄的變化類型為更新并且標記 所述數(shù)據記錄的變化位。
      6. 如權利要求5所述的方法,其中所述合并相同數(shù)據記錄的所有變化 數(shù)據記錄的變化類型和變化位的步驟還包括如果所述相同數(shù)據記錄的最近變化數(shù)據記錄的變化類型為刪除,則將 合并后的變化類型設置為刪除并標識合并后的變化位;如果所述相同數(shù)據記錄的最近變化數(shù)據記錄的變化類型為添加,則在所述最近數(shù)據記錄之前不存在相同數(shù)據記錄的下一個變化數(shù)據記錄的情況 下,將合并后的變化類型設置為添加并標識合并后的變化位,否則在所述 最近數(shù)據記錄之前存在相同數(shù)據記錄的下一個變化數(shù)據記錄的情況下,將合并后的變化類型設置為刪除后添加并標識合并后的變化位;在所述相同數(shù)據記錄的最近變化記錄的變化類型為更新的情況下,如 果在所述最近變化數(shù)據記錄之前不存在相同數(shù)據記錄的下一個變化數(shù)據記 錄,則將所述最近變化數(shù)據記錄的變化類型和變化位分別設置為合并后的 變化類型和合并后的變化位;如果在所述最近變化數(shù)據記錄之前存在相同 源數(shù)據記錄的下一個變化數(shù)據記錄并且所述下一個變化數(shù)據記錄的變化類 型是更新,則合并后的變化類型是更新,合并后的變化位是當前合并后的 變化位與所述下一個變化數(shù)據記錄的變化位的按位或邏輯運算結果。
      7. 如權利要求3所述的方法,當所述方法用于服務器與多個客戶機之 間進行數(shù)據同步時還包括沖突判斷步驟,該步驟包括1) 分別接收來自服務器端和多個客戶端的對于相同數(shù)據記錄的變化位;2) 對所有來自客戶機端的變化位進行按位或邏輯運算;3 )對來自服務器端的變化位以及所述客戶機端的按位或邏輯運算結果 進行按位與邏輯運算;4 )根據所述按位與邏輯運算結果來判斷所迷服務器與客戶機之間是否 發(fā)生沖突。
      8. 如權利要求9所述的方法,進一步包括在所述服務器與客戶機之 間沒有沖突發(fā)生的情況下,對所有來自客戶機端的變化位進行按位與邏輯 運算,根據所述客戶機端的的按位與邏輯運算結果判斷客戶機與客戶機之間是否發(fā)生沖突。
      9. 如權利要求l-3所述的方法,其中所述數(shù)據記錄存儲在數(shù)據庫中。
      10. —種數(shù)據同步系統(tǒng),包括記錄裝置,用于未同步時記錄數(shù)據記錄的變化歷史;同步引擎,響應于接收到的同步請求,合并所述數(shù)據記錄的變化歷史,并發(fā)送所述合并結果。
      11. 如權利要求10所述的系統(tǒng),其中所述數(shù)據記錄的變化歷史為數(shù)據記錄的字段的變化歷史。
      12. 如權利要求ll所述的系統(tǒng),其中所述變化歷史通過變化類型、變 化位以及版本號來記錄,所述變化類型用于記錄所述數(shù)據記錄變化的變化 類型,所述變化位用于記錄與所述數(shù)據記錄的變化類型對應的字段變化狀 態(tài),并且所述版本號用于標記所述數(shù)據記錄的有效時間點。
      13. 如權利要求12所述的系統(tǒng),其中所述同步引擎還包括合并裝置, 所述合并裝置用于分別將對應于相同數(shù)據記錄的所有變化的變化類型和變 化位進行合并,得到合并后的變化類型和合并后的變化位。
      14. 如權利要求13所述的系統(tǒng),其中所述記錄裝置還用于 如果添加數(shù)據記錄,則記錄所述數(shù)據記錄的變化類型為添加并且標記所述數(shù)據記錄的變化位;如果刪除數(shù)據記錄,則記錄所述數(shù)據記錄的變化類型為刪除并且標記 所述數(shù)據記錄的變化位;如果更新數(shù)據記錄,則記錄所迷數(shù)據記錄的變化類型為更新并且標記 所述數(shù)據記錄的變化位。
      15. 如權利要求14所述的系統(tǒng),其中所述同步引擎還包括 刪除合并裝置,如果所迷相同數(shù)據記錄的最近變化類型為刪除,則將合并后的變化類型設置為刪除并標識合并后的變化位;添加合并裝置,如果所述相同數(shù)據記錄的最近變化數(shù)據記錄的變化類 型為添加,則在所述最近數(shù)據記錄之前不存在相同數(shù)據記錄的下一個變化 數(shù)據記錄的情況下,將合并后的變化類型設置為添加并標識合并后的變化 位,否則在所述最近數(shù)據記錄之前存在相同數(shù)據記錄的下一個變化數(shù)據記 錄的情況下,將合并后的變化類型設置為刪除后添加并標識合并后的變化 位;更新合并裝置,在所述相同數(shù)據記錄的最近變化記錄的變化類型為更 新的情況下,如果在所述最近變化數(shù)據記錄之前不存在相同數(shù)據記錄的下一個變化數(shù)據記錄,則將所述最近變化數(shù)據記錄的變化類型和變化位分別設置為合并后的變化類型和合并后的變化位;如果在所述最近變化數(shù)據記 錄之前存在相同數(shù)據記錄的下一個變化數(shù)據記錄并且所述下一個變化數(shù)據 記錄的變化類型是更新,則合并后的變化類型是更新,合并后的變化位是 當前合并后的變化位與所述下一個變化數(shù)據記錄的變化位的按位或邏輯運 算結果。
      16. 如權利要求13所述的系統(tǒng),當所述系統(tǒng)用于服務器與多個客戶機 之間進行數(shù)據同步時所述同步引擎還包括沖突檢測裝置,所述沖突檢測裝 置用于1) 分別接收來自服務器端和多個客戶端的對于相同數(shù)據記錄的變化位;2) 對所有來自多個客戶機端的變化位進行按位或邏輯運算;3) 對來自服務器端的變化位以及所M戶機端的的按位或邏輯運算結 果進行按位與邏輯運算;4) 根據所述按位與邏輯運算結果來判斷所述服務器與客戶機之間是否 發(fā)生沖突。
      17. 如權利要求16所述的方法,其中所述沖突檢測裝置還用于在所述 服務器與客戶機之間沒有沖突發(fā)生的情況下,對所有來自客戶機端的對于相同數(shù)據記錄的變化位進行按位與邏輯運算,根據所述客戶機端的變化位 的按位與邏輯運算結果判斷客戶機與客戶機之間是否發(fā)生沖突。
      18. 如權利要求10-13所述的方法,其中所述數(shù)據記錄存儲在數(shù)據庫中。
      全文摘要
      本發(fā)明公開一種數(shù)據同步的方法和系統(tǒng),該數(shù)據同步的方法包括未同步時記錄數(shù)據記錄的變化歷史;響應于接收到的同步請求,合并所述數(shù)據記錄的變化歷史;發(fā)送所述合并結果。本發(fā)明通過高效的合并方法合并數(shù)據記錄的合并歷史,各自將變化的字段從一端發(fā)送到另一端,從而提高同步效率。
      文檔編號G06F17/30GK101551801SQ20081008862
      公開日2009年10月7日 申請日期2008年3月31日 優(yōu)先權日2008年3月31日
      發(fā)明者亮 齊 申請人:國際商業(yè)機器公司
      網友詢問留言 已有0條留言
      • 還沒有人留言評論。精彩留言會獲得點贊!
      1