我也遇到你同样问题,可以这么解决:
1.给updated_ts时间字段加上索引。
2.分批处理原则
(1)你的SQL:每批处理100000个
SELECT a.party_id AS id ,a.* FROM PARTY_ALL_1 a WHERE a.updated_ts > '2011-11-17 13:23:58' order by a.updated_ts asc LIMIT 100000;
(2)logstash分页的时候每次处理50000个
SELECT * FROM (SELECT a.party_id AS id ,a.* FROM PARTY_ALL_1 a WHERE a.updated_ts > '2011-11-17 13:23:58' order by a.updated_ts asc LIMIT 100000) AS `t1` LIMIT 50000 OFFSET 0;
SELECT * FROM (SELECT a.party_id AS id ,a.* FROM PARTY_ALL_1 a WHERE a.updated_ts > '2011-11-17 13:23:58' order by a.updated_ts asc LIMIT 100000) AS `t1` LIMIT 50000 OFFSET 50000;
(3)处理两次就写一个最后一条记录的updated_ts时间到指定文件。下一个定时任务启动的时候进行循环处理就行,因为每批处理updated_ts都会改变
2018-05-16
3
MR_Gordon
•
2019-05-28 15:45
这个办法没法解决updated_ts相同的问题,会漏掉大量的数据.
MR_Gordon
•
2019-05-28 15:47
比如说,查询的100000条数据,排序后最后一条的时间是'2011-11-17 13:23:58',但是第100001条数据,时间也是'2011-11-17 13:23:58',下一次的查询,条件会有updated_ts > '2011-11-17 13:23:58',这样就漏掉了第100001条数据,实际使用的时候,这种现象特别常见,而且后果相当严重.
GLC
•
2019-08-15 17:24
updated_ts > ='2011-11-17 13:23:58' 索引id设置规则,相同Id数据是覆盖的, 这样就不会丢