比如现在有个需求,一个统计站的某张表有百万行的数据,需要通过一系列的计算来再展示到页面(不能使用分页),计算可以
跳过,就单纯的查询.如下:
// long d1 = new Date().getTime(); // List<Map<String,Object>> result = service.findAll("select * from t_hourly_apk_area",null); // System.out.println(result.size()); // System.out.println(new Date().getTime()-d1);
这样查询非常慢,并且JSP渲染也很慢。
这种情况下我考虑想了两种办法,一种是先加载一部分数据,到了JSP再通过AJAX主动发送请求获取剩余数据。
第二种是通过线程,比如数据共一百万,那么我分三个线程查询,每个线程查询三十三万。如下:
class MyT extends Thread{ BaseService bs; int star; int size; public MyT(BaseService bs , int star,int size) { this.bs=bs; this.star=star; this.size=size; } @Override public void run() { System.out.println("---------------------------------"); long d1 = new Date().getTime(); List<Map<String,Object>> x = bs.findAll("select * from t_hourly_apk_area limit "+star+","+size,null); System.out.println(x.size()+" ---- "+this.currentThread().getName()); System.out.println(new Date().getTime()-d1); System.out.println(""); System.out.println(""); } } @RequestMapping(value="/down") @Controller public class IndexAction extends BaseAction{ @RequestMapping(value="/test") public String test(){ // long d1 = new Date().getTime(); // List<Map<String,Object>> result = service.findAll("select * from t_hourly_apk_area",null); // System.out.println(result.size()); // System.out.println(new Date().getTime()-d1); MyT mt1 = new MyT(service, 0, 500000); MyT mt2 = new MyT(service, 500000, 500000); MyT mt3 = new MyT(service, 1000000, 600000); mt1.start(); mt2.start(); mt3.start(); return null; } }
这样做有个问题是,线程跑完了数据我怎么返回前台?
我的核心问题就是想请教下,JAVA一次性请求大量数据(不包含分页等处理)的时候应该怎么处理!
qq_小强_2
qq_小强_2
相关分类