令入參id為0
while(true){
? select * from table where id>#{id} order by id asc limit 100;
? 取結果集中最大id作為下次查詢的入參
? 其他操作
}
這個算法一般沒問題,但在主從數據系統中,主庫寫,查詢從庫遍歷數據時,出現了漏數據問題
原因是,主庫同步到從庫是多線程的,id較大的先同步到從庫,等大id的數據處理完了,小id的數據再同步過來時,程序將不再處理
解決辦法是,查詢時排除時間戳是最近一分鐘的數據
?