Play框架的部分性能优化问题

1、实体查询时,有个基类方法Entity.find(sql,params).fetch(pageIndex,pageSize);

这个方法最坑爹!严谨使用该方法。因为这是假分页,它首先将数据集全部查出来并加载到内存中,然后再做分页处理,严重影响效率,如果表过大,直接导致服务器内存溢出,导致Web服务崩溃。

2、查询时按道理说,尽可能的不使用 select * from table 这样的语句,不用*号来代替查询所有字段!

原因很简单,数据表可能随时变化,这里查询出来的列就会有变动。

3、一般来说,尽可能的不要在For循环里做其他极其耗时的工作

(1)能在外边创建对象,就不要在循环中创建对象

(2)能够一次性查询出来的数据集,严禁在查出来数据集后又做循环遍历处理

(3)尽可能不要在遍历集合里面嵌套数据查询操作!极其耗时间,完全可以一次性批量查出来全部需要的数据,然后遍历数据集时做匹配数据项

例如:

for(int i=0;i<10;i++){
    Entity entity=Entity.findById(id);
    .....
}
可以改造成以下这样的方式:即便是这样,也比上面的速度快将近9倍!从数据库里查询数据花费的时间最长,其次是for循环。

//先将ID串拼成串
StringBuffer sb=new StringBuffer();
for(int i=0;i<ids;i++){
    if(sb.length==0){
        sb.append(",");
    }
    sb.append(ids[i])
}
List<Entity> list= Entity.find(sql,sb.toString());
Map<Long,Entity> map =new HashMap<Long,Entity>();
for(int j=0;j<list.size();j++){	//这里将List转成Map
    Entity entity=list.get(j);
    map.put(entity.id,entity);
}
//这里再做匹配处理
for(int k=0;k<10;k++){
    Entity entity= map.get(id);
}

4、数据库里面最适合批量、简单的查询。

复杂的逻辑除非是性能需要,一般不要写过于复杂的SQL,子查询不如关联查询速度快,最好换成关联查询。

5、一些需要做数据对照、关联的逻辑,能放到数据库中处理最好。

数据库用C语言或C++写的,算法更先进,速度比Java要快很多。

6、在写一些大型、复用的服务时,有一个优化方案,切记参考一下:

最主要目的有两个:

(1)同一个参数,一次查询准备好!

(2)同一套逻辑只写一遍,然后到处使用!

方案如下:

(1)首先建立一个参数类,将所有参数一次性准备好,这样调整参数时也方便。

(2)逻辑处理模块可以从参数类中取值并做逻辑处理。

(3)逻辑处理模块这部分切记写成可复用的函数方法,方便在各个环节做复用。

(4)返回值也可以写一个对象或者Map,方便日后增加返回值。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值