BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / java / #62484同步于 2019/8/13
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖

【讨论】项目中的一个问题:数据库遍历,如何设置断点

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