java - for循环效率问题
巴扎黑
巴扎黑 2017-04-17 17:50:58
0
4
491

for循环,大概需要遍历100万的数据,对于每一条数据,需要更新5张表,调用两次API接口,但是在执行过程中,因为数据量太大,所以执行的中间,由于耗时严重,经常会出现链接中断等问题,如果把这种遍历100万数据的逻辑,搞成多线程,应该怎么搞啊?

巴扎黑
巴扎黑

全部回复(4)
黄舟

用线程池或者分布式去处理,如果某条数据已经被处理,可以在某个地方做个标记,实时写入;要是失败的话,从头再来也可以过滤掉已经完成的数据。

你还可以设置一个超时时间,然后把失败的记录单独保存下来再用一个策略去重试。

PHPzhong

听你语气如果只是为了单次处理下这100万的数据,而不是长期使用这个程序,更应该简单粗暴多开几个进程,然后往通过命令行往进程里传递几个参数过去,假设开10个进程 那每个进程负责10万数据按特定规则区分每个进程负责的数据即可。比如ID区间

大家讲道理

把100万数据分成多份,每个线程处理一份数据,而且插入数据一定要批量插入,数据库有索引的话最好先关掉,所有数据全部插入后统一做索引,如果是Oracle的话可以用SQL Loader或者其他类似的工具直接插入,避免使用Hibernate之类的方式插入。

刘奇

使用线程池,记录每个线程数据的起始点,然后开始读取数据,更新表建议使用批量更新,api接口使用异步的方式调用,边调用边更新表。如果觉得这种程序比较复杂。就采用api接口调用的数据库的更新表顺序执行。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板