java对大数据的处理.pdf

时间:2022-12-24 11:07:54
【文件属性】:

文件名称:java对大数据的处理.pdf

文件大小:74KB

文件格式:PDF

更新时间:2022-12-24 11:07:54

文档资料

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(c


网友评论