问答详情
源自:4-2 logstash全量、增量同步解决方案

为什么需要添加条件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  查询的结果不是一样的吗?

提问者:qq_慕田峪5029356 2021-09-10 09:34

个回答

  • Promise丶澄明
    2022-02-19 20:28:05

    假设第一次扫描结束时,时间节点为t1,而且这个时间节点有两条数据A和B,其中B没扫到,如果后面还是按大于t1扫描,就会漏掉B。


    如果我们的策略是第一次扫描直接放弃t1时间节点的数据,即update_time<now()。这样下次扫描就可以扫到了,因为sql_last_value是小于t1的,update_time>:sql_last_value就包含了A和B。


    简而言之,往前看一个步骤就可以理解了。

  • 睡到自然醒ldr
    2021-10-13 02:00:52

    这个考虑的应该是极端情况.就是这条sql执行的当前时间正好有多条数据入库,比如有100条数据正在入库,但是这个sql只扫描到了50条.但是这个时候当前时间已经被记录为sql_last_value,下次执行的时候,条件是大于sql_last_value,就会丢失上一次没有扫描到的50条.所以这里加多一个条件小于当前时间,就是当前入库的数据,都不同步到es中,下次再同步过去.