返回信息流项目中需要对一个数据表进行遍历,然后不断SELECT出目标数据,针对目标数据去做其他的RPC调用,每天跑一次,整个过程历时六七个小时。
今天想到了一个问题,万一服务跑挂了,重启的时候不可能从头再扫一次吧(不能对这些目标数据进行重复操作),所以应该设置一个断点记录一下免得程序中间跑挂了。然后想问问各位大佬们,这个断点要记录在哪里?在数据库里?还是记到Redis上?有什么好的实现方法么
这是一条镜像帖。来源:北邮人论坛 / java / #62484同步于 2019/8/13
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖
【讨论】项目中的一个问题:数据库遍历,如何设置断点
bit3125
2019/8/13镜像同步5 回复
订阅后,新回复会通过你的通知中心匿名送达。
5 条回复
之前断点是用redis记录,用过(1)分页,一页页查,记录页号(2)取余数查,比如设定1000页,取ID%1000为0,1,2,...999的查,但是每次都要全表扫码。[ema7]
cursor应该不行
楼主没有提供全量的信息 我只能假设这个表的数据是不会 更新/增加 的 这样的话按照楼主的思路可以搞一个自增列作为id 拿id去fetch
不过最好的办法还是一次性把全表扫下来(如果数据量不大的话),然后开n个线程去跑你的rpc,这样性能最好,也不会有表数据更新的问题(数据库会保证原子性),缺点就是内存占太多了
折中一下可以每次扫几十行去并发跑rpc