時間戳實現增量數據同步


數據同步
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 是因為時間戳可以相同,但主鍵不會重復

 

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

 

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM