當乙個資料需要儲存多份時,會出現一致性問題,所以就需要進行同步,同步分為兩種:增量和全量。
簡單來說,就是在一定的週期中,把當前系統在週期時間內所有資料複製到目標表/系統這樣的同步方式就叫做—>全量
增量同步的前提是全量,然後再更具規則增量同步;
增量的基礎是全量,就是你要使用某種方式先把全量資料拷貝過來,然後再採用增量方式同步更新。
增量的話,就是指抓取某個時刻(更新時間)或者檢查點(checkpoint)以後的資料來同步,不是無規律的全量同步。這裡引入乙個關鍵性的前提:副本一端要記錄或者知道(通過查詢更新日誌或者訂閱更新)哪些更新了。
能用全量別用增量
兩個系統之間需要同步資料,同步的方法可以分為全量和增量兩種形式。多年的經驗告訴我,能用全量就別用增量。增量有三個問題
1.資料提供方,很難製作增量包,事無鉅細都要記錄,稍微記錯就全完了
2.資料接收方,理解並且實施增量包的邏輯比較複雜
3.中間過程一旦出了問題,很難定位
這裡為了方便討論,假設有兩個系統,其中系統a擁有全深圳所有納稅人的當月工資,系統b需要從系統a同步這個資料。對於系統a來說,它的資料在不停的變化,但是可以分成三類
1.新增,比如說有畢業生來深圳打工
2.刪除,比如說有人離職離開深圳了
3.變化,比如說有人漲工資了
這個時候,同步資料的方法很難決策,全量同步不合適,資料量太大而且還不值當,畢竟變化的部分比較少。增量同步又怕麻煩,一旦某次同步出問題,很難倒查故障和恢復。
其實,可以有一種折中方案,上不了檯面,但是值得嘗試。為了方便理解,還是以上面的例子來討論。
我們知道所有人都有身份證號碼,其中有一部分為年月日,表示生日。我們按照生日,在系統a將資料進行分組,這個分組是邏輯上的,不是真實的。如果有個人,工資漲了,生日為1999.9.1,那麼系統a就記錄分組1999.9.1的資料發生了變化。假設兩個系統之間的同步週期是每天同步一次,那麼系統a只需要整理這段時間那些分組發生了變化,但是不用記錄變化的實際內容。系統b就老老實實將發生變化的分組資料刪掉,然後全量同步這些分組的資料。
這個方案,就是賭每天發生變更的資料不會那麼巧,波及所有分組,只會有很小的一部分分組發生變化。這樣從整體看,只是同步了部分資料,從分組看又是簡單的全量同步。這個方案的巧妙之處就是選擇合適的分組標準,既要分的足夠細,又要足夠直接,方便程式處理。
ETL資料抽取 全量 增量
在根據使用者需求選擇需要抽取的字段之外,我們通常需要選擇採用全量或者增量的方法進行資料抽取。全量抽取指的是從源系統中將表內資料不加行的篩選,全部抽取 增量抽取指的是只抽取前次抽取之後發生變化或者新增的資料 增量抽取的資料難度較大,要保證資料不能多抽取,漏抽取 在源表資料量較大,大部分資料一經入庫改動...
利用sqoop進行全量抽取和增量抽取
sqoop是apache開源的一款在hadoop和關聯式資料庫伺服器之間傳輸資料的工具。主要用於在hadoop與關係型資料庫之間進行資料轉移,可以將乙個關係型資料庫 mysql oracle等 中的資料匯入到hadoop的hdfs中,也可以將hdfs的資料匯出到關係型資料庫中。sqoop支援的另乙個...
Mysql增量備份與全量備份
1.首先確保已開啟binlog日誌功能。在my.cnf中包含下面的配置以啟用二進位制日誌 mysqld log bin mysql bin 2.建立兩份指令碼檔案,乙份為增量備份的指令碼檔案,另乙份為全量備份的指令碼檔案。指令碼檔案放這裡 全量備份指令碼start bin bash program ...