比如現在有個需求,一個統計站的某張表有百萬行的數據,需要通過一系列的計算來再展示到頁面(不能使用分頁),計算可以跳過,就單純的查詢.如下:?// 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一次性請求大量數據(不包含分頁等處理)的時候應該怎么處理!
一次性查詢百萬級數據應該怎么處理?
Mr_Li_0001
2015-03-11 11:06:51