資料同步
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個特點裡的反映歷史變化的這個特點的要求,我們建議每天對資料進行全量同步。也就是說每天儲存...