時間戳實現增量資料同步

2021-09-06 21:38:44 字數 1416 閱讀 2749

資料同步

1、靠記錄中本身的時間戳來增量更新

分頁獲取必須排序(時間戳), 排序後也會出錯(會出現記錄跳過的情況),中途指令碼停止更是會出錯

非分頁的會出問題,指令碼中斷更會出問題(時間戳不能保證是從低到高)

解決方法:

1、分頁條數為1、並排序但效率不高

2、分頁採用每次獲取比當前時間戳大的的limit條數,再不斷變化時間戳(會有問題)

3、資料一次性全部取出來排序處理(適用於小資料量情況)

2、時間戳存在快取中,等全部處理完再更新時間戳

普通分頁仍舊會出現記錄跳過的情況

非分頁的則不會出現問題(因為時間戳是最後才更新),指令碼中斷也不會出問題。

總結:

1、時間戳存在快取中

1、減少計算

2、最後更新時間戳更不容易出問題,頂多會重複處理

2、每次執行 取快取中的時間(>=)和指令碼當時的時間(<)資料,執行完成後設定當前時間到快取

歷史資料的增量同步(不會更改的資料)

1、用自增主鍵是最完美的,因為主鍵不會重複

where id>x order by id asc limit xx

2、時間戳

錯誤的示範:whereinsert_time>lastmax_timestamp order bytimestampasc limit xx

錯誤1:> 應該是》=, 但是如果用》=,會一直可以取出資料,陷入無限迴圈中

錯誤2: 由於用了limit,limit中的可能有相同時間戳資料,並且前面用的》會丟失資料

正確:where insert_time>lastmax_timestamp andinsert_time<=current_timestamporder bytimestampasc limit xx 

不斷調整lastmax_timestamp ,可以每次執行完就把lastmax_timestamp  儲存redis

對於中間資料會變的,一定不能用  offset,limit(建議放棄這種方式)

之所以需要insert_time<=current_timestamp 是因為時間戳可以相同,但主鍵不會重複

注意:該方式同樣適用於時間戳變化中的方式

對於分表的可以在取到為空的時候,可以重新設定時間進行跨表操作

關於kettle時間戳增量更新

之前看到的一篇文章kettle實現資料實時增量同步,這位大佬提出了時間戳增量回滾同步的一種方式,我是根據這篇文章之上進行探索的。但是遇到了一些問題,這裡進行一下記錄 只能同步往前 day這段時間內的刪除操作,因為回滾了一段時間 day,作者也宣告了這點 也只能同步往前 day這段時間內的刪除操作,為...

goldengate 實現資料同步增量跟蹤

oracle goldengate有眾多解決方案,其中有乙個可用來實現資料同步增量跟蹤.比如有的業務系統需要實時的記錄某些資料的各種變化,通過ogg可以輕鬆的實現。應用場景 現需要實現對源端庫中空間資料表,資料變化進行監控。源端點空間資料表結構 create table sde point oid ...

大資料增量同步實現方案

目前做的專案使用阿里 datax 作為不同資料來源資料同步的實現工具。資料的批量一次性匯入比較簡單,對於增量資料需要對不同場景設計不同的方案。每天全量同步 如人員表 訂單表一類的會發生變化的資料,根據資料倉儲的4個特點裡的反映歷史變化的這個特點的要求,我們建議每天對資料進行全量同步。也就是說每天儲存...