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 查询的结果不是一样的吗?
假设第一次扫描结束时,时间节点为t1,而且这个时间节点有两条数据A和B,其中B没扫到,如果后面还是按大于t1扫描,就会漏掉B。
如果我们的策略是第一次扫描直接放弃t1时间节点的数据,即update_time<now()。这样下次扫描就可以扫到了,因为sql_last_value是小于t1的,update_time>:sql_last_value就包含了A和B。
简而言之,往前看一个步骤就可以理解了。
这个考虑的应该是极端情况.就是这条sql执行的当前时间正好有多条数据入库,比如有100条数据正在入库,但是这个sql只扫描到了50条.但是这个时候当前时间已经被记录为sql_last_value,下次执行的时候,条件是大于sql_last_value,就会丢失上一次没有扫描到的50条.所以这里加多一个条件小于当前时间,就是当前入库的数据,都不同步到es中,下次再同步过去.
Springboot + ElasticSearch 构建博客检索系统
22916 学习 · 112 问题
相似问题