兩個(gè)系統(tǒng)之間需要同步數(shù)據(jù)亚皂,同步的方法可以分為全量和增量兩種形式。多年的經(jīng)驗(yàn)告訴我国瓮,能用全量就別用增量灭必。增量有三個(gè)問題
- 數(shù)據(jù)提供方,很難制作增量包乃摹,事無巨細(xì)都要記錄禁漓,稍微記錯(cuò)就全完了
- 數(shù)據(jù)接收方,理解并且實(shí)施增量包的邏輯比較復(fù)雜
- 中間過程一旦出了問題孵睬,很難定位
這里為了方便討論播歼,假設(shè)有兩個(gè)系統(tǒng),其中系統(tǒng)A擁有全深圳所有納稅人的當(dāng)月工資掰读,系統(tǒng)B需要從系統(tǒng)A同步這個(gè)數(shù)據(jù)秘狞。對(duì)于系統(tǒng)A來說叭莫,它的數(shù)據(jù)在不停的變化,但是可以分成三類
- 新增烁试,比如說有畢業(yè)生來深圳打工
- 刪除雇初,比如說有人離職離開深圳了
- 變化,比如說有人漲工資了
這個(gè)時(shí)候廓潜,同步數(shù)據(jù)的方法很難決策抵皱,全量同步不合適,數(shù)據(jù)量太大而且還不值當(dāng)辩蛋,畢竟變化的部分比較少呻畸。增量同步又怕麻煩,一旦某次同步出問題悼院,很難倒查故障和恢復(fù)伤为。
其實(shí),可以有一種折中方案据途,上不了臺(tái)面绞愚,但是值得嘗試。為了方便理解颖医,還是以上面的例子來討論位衩。
我們知道所有人都有身份證號(hào)碼,其中有一部分為年月日熔萧,表示生日糖驴。我們按照生日,在系統(tǒng)A將數(shù)據(jù)進(jìn)行分組佛致,這個(gè)分組是邏輯上的贮缕,不是真實(shí)的。如果有個(gè)人俺榆,工資漲了感昼,生日為1999.9.1,那么系統(tǒng)A就記錄分組1999.9.1的數(shù)據(jù)發(fā)生了變化罐脊。假設(shè)兩個(gè)系統(tǒng)之間的同步周期是每天同步一次定嗓,那么系統(tǒng)A只需要整理這段時(shí)間那些分組發(fā)生了變化,但是不用記錄變化的實(shí)際內(nèi)容萍桌。系統(tǒng)B就老老實(shí)實(shí)將發(fā)生變化的分組數(shù)據(jù)刪掉蜕乡,然后全量同步這些分組的數(shù)據(jù)。
這個(gè)方案梗夸,就是賭每天發(fā)生變更的數(shù)據(jù)不會(huì)那么巧层玲,波及所有分組,只會(huì)有很小的一部分分組發(fā)生變化。這樣從整體看辛块,只是同步了部分?jǐn)?shù)據(jù)畔派,從分組看又是簡單的全量同步。這個(gè)方案的巧妙之處就是選擇合適的分組標(biāo)準(zhǔn)润绵,既要分的足夠細(xì)线椰,又要足夠直接,方便程序處理尘盼。