今天爱分享给大家带来逐笔处理优化为批量处理 针对数据库、redis等减少网络交互,提升性能【附代码】,希望能够帮助到大家。
针对数据库的读,数据量大时用分页读
具体写法看持久化框架是否支持以及数据库,以下是oracle我比较推荐的写法
select * from (select a.*, rownum rowno from (select t.* from test t order by t.create_date desc) a where rownum <= 20) b where b.rowno >= 11;
针对批量数据库的更新或redis操作,可分批次3000条(具体需根据实际测试情况)处理提交
//对 allList 操作 ListtmpList = new ArrayList<>(); for(int i=0; i < allList.size(); i++){ tmpList.ad(allList.get(i)); if(i%5000 ==0){ handle(tmpList); ... tmpList=new ArrayList<>(); } } handle(tmpList);
特殊场景更新可用in条件
针对oracle in的1000条限制:update… where orderNo in (“”, “”, “”) or in(“”, “”, “”)
对文件读,采用批量读取后处理,避免全部读取造成内存溢出,逐笔处理效率差
项目可以用Spring Batch的话,建议FlatFileItemReader读文件。用java实现批量读文件处理我没有实现过,可以自行google网上找代码。