为什么需要添加条件updata_time<NOW() ?

来源:4-2 logstash全量、增量同步解决方案

qq_慕田峪5029356

2021-09-10 09:34

update_time>:sql_last_value order by update_time DESC  和  update_time>:sql_last_value and update_time<NOW() order by update_time DESC  查询的结果不是一样的吗?

写回答 关注

2回答

  • 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。


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

    木头年糕

    第一次扫描结束时时间节点为t1,那么下一次扫描时使用的sql_lat_value不就是t1么?此时过滤条件里又是update_time>:sql_last_value,不就相当于update_time>t1,那不是第二次又把t1时间节点的数据放弃掉了么。

    2022-04-15 16:34:30

    共 1 条回复 >

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

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

Springboot + ElasticSearch 构建博客检索系统

Springboot + ElasticSearch 构建个人博客检索系统

22916 学习 · 112 问题

查看课程

相似问题