为了账号安全,请及时绑定邮箱和手机立即绑定

一次性查询百万级数据应该怎么处理?

一次性查询百万级数据应该怎么处理?

Mr_Li_0001 2015-03-11 11:06:51
比如现在有个需求,一个统计站的某张表有百万行的数据,需要通过一系列的计算来再展示到页面(不能使用分页),计算可以跳过,就单纯的查询.如下: // 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一次性请求大量数据(不包含分页等处理)的时候应该怎么处理!
查看完整描述

2 回答

?
qq_小强_2

TA贡献3条经验 获得超0个赞

如果浏览器可以接收这些数据,你后台用多线程的话 前端用websocket接收吧

查看完整回答
反对 回复 2015-03-11
  • Mr_Li_0001
    Mr_Li_0001
    我觉得我想的那个多线程办法有点非主流- - 。
?
qq_小强_2

TA贡献3条经验 获得超0个赞

100w数据不分页你的客户端浏览器展示得出来吗?有点好奇


查看完整回答
反对 回复 2015-03-11
  • Mr_Li_0001
    Mr_Li_0001
    数据库是百万行,但是可以分组,JSP肯定是显示不了百万行的,现在的问题可以不在JSP上,就在DAO层解决这个问题。
  • 2 回答
  • 0 关注
  • 3548 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信