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