永发信息网

java如何快速处理大数据

答案:1  悬赏:80  手机版
解决时间 2021-04-15 11:27
java如何快速处理大数据
最佳答案
文件读取:首先是一个文件上传,数据入库,10-200万条不等,这里主要考虑到一次性读取,JVM分配出来的栈内存不一定会够(个人对内存这一块还是处于一知半解的状态,所以比较谨慎,若诸位大神有好的认知,希望评论留下地址分享一下),是依行读取数据,设定一个批量值,当读取的数据达到一定量之后,执行批量入库操作,清空集合,再接着读取。
//读取文件内容
while((s = br.readLine())!=null){
//判断是否达到单次处理量
if(num%leadingNum==0&&num!=0){
int a = stencDao.insertBatch(listBean);
if(a!=leadingNum){
flag = false;
}
//清空集合
listBean.clear();
}
String value = s.trim();
//将读取到的内容放入集合中
if(!value.equals("")){
StencilCustomer bean = new StencilCustomer();
bean.setCustomerPhone(value);
bean.setLinkStencilId(id);
listBean.add(bean);
num ++;
}
}
数据处理:这里的思路也是将数据小化然后处理,这里使用了多线程,设定单个线程处理量,然后开启多个线程处理,这里需要考虑你的服务器的承载能力,如果线程开得太多了,处理不过来,会出现蹦死的情况。例如200万数据,我开了20个线程,单个线程处理600条。
//建立一个线程池 ThreadPoolExecutor threadPool = new ThreadPoolExecutor(
minTaskNumber, maxTaskNumber, 3L, TimeUnit.SECONDS,
new ArrayBlockingQueue(minTaskNumber),
new ThreadPoolExecutor.DiscardOldestPolicy());
//当正在执行的线程数达到最大执行线程数的时候等待
boolean flag = true;
while(flag){
Thread.sleep(1000);//休眠2ms查询一次
int c = threadPool.getActiveCount();//线程池中活动中的线程数量
if(cflag = false;
}
}
上面的代码是我对线程池的一个控制,控制服务器一直最大线程执行,Thread.sleep(1000);用while的时候,这个休眠最好不要去掉,去掉之后很影响执行效率
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
我的主硬盘是;s/N:5LA310WB P/N:9Y3
我要朗诵雷锋诗歌《你,浪花里的一滴水》,在
下列说法中正确的是A.经过两条平行直线,有且
为什么别人说我很假很作的时候我会生气?
楚可以组什么词。
巨通电梯的维修效率高吗?
有没有可以联机的手机游戏,要街机的,就像dnf
青岛莱西市 电信和联通的4M宽带一年各多少钱
亲爱的小朋友,足球你一定很熟悉?不过有没有
什么成语押ong韵
求问一个材料学黏性方面的知识,有关变形功的
为什么广告公司用ps做东西在新建文件的尺寸单
求几张静物组合水粉画对比图,要作品和实物的
车辆在什么情况下不算违章
成年黄牛几年生一胎
推荐资讯
骂人够狠的语句
Bareback和Fuck还用gay用德语怎么说?
曹操大败猜俩歌星名
DNF召唤怎么单刷遗迹五骑士啊?
用手机上网在那里可以看杂志《故事会》???
三国升阶,我不懂那些
有用手机可以保护QQ密码的业务(超级QQ除外)
正确服用药的方法?
对于恋人间的细节、该看重还是看轻?
2万立方的煤气柜距离办公楼的安全距离是多少
在唯品会买了化妆品,感觉不是正品就申请退货
QQ会员续费不成功怎么办?
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?