為什么需要添加條件updata_time<NOW() ?
update_time>:sql_last_value order by update_time DESC? 和? update_time>:sql_last_value and update_time<NOW() order by update_time DESC? 查詢的結果不是一樣的嗎?
update_time>:sql_last_value order by update_time DESC? 和? update_time>:sql_last_value and update_time<NOW() order by update_time DESC? 查詢的結果不是一樣的嗎?
舉報
2022-02-19
假設第一次掃描結束時,時間節點為t1,而且這個時間節點有兩條數據A和B,其中B沒掃到,如果后面還是按大于t1掃描,就會漏掉B。
如果我們的策略是第一次掃描直接放棄t1時間節點的數據,即update_time<now()。這樣下次掃描就可以掃到了,因為sql_last_value是小于t1的,update_time>:sql_last_value就包含了A和B。
簡而言之,往前看一個步驟就可以理解了。
2021-10-13
這個考慮的應該是極端情況.就是這條sql執行的當前時間正好有多條數據入庫,比如有100條數據正在入庫,但是這個sql只掃描到了50條.但是這個時候當前時間已經被記錄為sql_last_value,下次執行的時候,條件是大于sql_last_value,就會丟失上一次沒有掃描到的50條.所以這里加多一個條件小于當前時間,就是當前入庫的數據,都不同步到es中,下次再同步過去.