數據同步
1、靠記錄中本身的時間戳來增量更新
分頁獲取必須排序(時間戳), 排序后也會出錯(會出現記錄跳過的情況),中途腳本停止更是會出錯
非分頁的會出問題,腳本中斷更會出問題(時間戳不能保證是從低到高)
解決方法:
1、分頁條數為1、並排序但效率不高
2、分頁采用每次獲取比當前時間戳大的的limit條數,再不斷變化時間戳(會有問題)
3、數據一次性全部取出來排序處理(適用於小數據量情況)
2、時間戳存在緩存中,等全部處理完再更新時間戳
普通分頁仍舊會出現記錄跳過的情況
非分頁的則不會出現問題(因為時間戳是最后才更新),腳本中斷也不會出問題。
總結:
1、時間戳存在緩存中
1、減少計算
2、最后更新時間戳更不容易出問題,頂多會重復處理
2、每次運行 取緩存中的時間(>=)和腳本當時的時間(<)數據,運行完成后設置當前時間到緩存
歷史數據的增量同步(不會更改的數據)
1、用自增主鍵是最完美的,因為主鍵不會重復
where id>x order by id asc limit xx
2、時間戳
錯誤的示范:where insert_time>lastmax_timestamp order by timestamp asc limit xx
錯誤1:> 應該是>=, 但是如果用>=,會一直可以取出數據,陷入無限循環中
錯誤2: 由於用了limit,limit中的可能有相同時間戳數據,並且前面用的>會丟失數據
正確:where insert_time>lastmax_timestamp and insert_time<=current_timestamp order by timestamp asc limit xx
不斷調整 lastmax_timestamp ,可以每次運行完就把 lastmax_timestamp 存儲redis
對於中間數據會變的,一定不能用 offset,limit(建議放棄這種方式)
之所以需要 insert_time<=current_timestamp 是因為時間戳可以相同,但主鍵不會重復
注意:該方式同樣適用於時間戳變化中的方式
對於分表的可以在取到為空的時候,可以重新設定時間進行跨表操作
