资讯专栏INFORMATION COLUMN

缓存优化实验报告

only_do / 2106人阅读

摘要:销售助手缓存优化实验报告问题背景移动销售助手又名外勤通,个别页面访问非常慢,急需优化。结论二对于简单的,无须从优化为缓存。

销售助手-缓存优化实验报告
2015.4.7 by ouyida3

问题背景

移动APP-销售助手(又名外勤通),个别页面访问非常慢,急需优化。

实验环境

Oracle数据库:测试环境32.121.2.132(性能还行,但发现偶尔会有问题)

后台WEB应用:本机环境MyEclipse+Weblogic(本机暂时发现很好,完全没有性能瓶颈)

前台MAPP应用:测试环境30.51.23.250(该机器是svn服务器,性能不怎么样)

手机APP应用:iphone5,ios8.2安装(没有性能瓶颈)

优化手段

某些表使用Ehcache把数据通过Key-Value缓存,不用每次均从数据库取数。

优化代码:
详见:/mapp/src/com/age/mapp/bean/MappTaskBean.java

修改前,每次均读取oracle的方法:

javacomdao.getStaticValue
修改后,只第一次从oracle读取,第二次以后从缓存读取:CacheUtils.getStaticValue
代码如下:
// 优化效率,改为读取缓存 author Ouyida3 2015.4.4
//taskmap.put("URGENT", comdao.getStaticValue(task.getString("URGENT"), "MAPP_EMERGENT_TYPE")); 
taskmap.put("URGENT", CacheUtils.getStaticValue(task.getString("URGENT"), "MAPP_EMERGENT_TYPE", pd));

为了测试使用时间,在前后均加上时间的打印代码:

java// 增加时间差显示,优化效率时使用 2015.4.4
Date beginDate = null;
if (log.isDebugEnabled()) {
    beginDate = new java.util.Date();
}

taskmap.put("URGENT", CacheUtils.getStaticValue(task.getString("URGENT"), "MAPP_EMERGENT_TYPE", pd));

// 增加时间差显示,优化效率时使用 author OuyangDa 2015.4.4
if (log.isDebugEnabled()) {
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS");
    Date endDate = new Date();
    String beginTime = sdf.format(beginDate);
    String endTime = sdf.format(endDate);

    log.debug("请求和返回时间分别是:" + endTime + " , " + beginTime);
}

修改前的时间占用
连续进行了5次测试。第一次和第三次分别占用了15和16毫秒,其余均占用0毫秒。证明即使连接oracle,也不是每次都占用毫秒级的时间,应该是oracle内部作了优化,把同样的sql放到缓存池了,提高了命中率。

  

DEBUG(MappTaskBean) 请求和返回时间分别是:2015-04-07 14:46:12 039 , 2015-04-07 14:46:12 024

  

DEBUG(MappTaskBean) 请求和返回时间分别是:2015-04-07 14:46:35 539 , 2015-04-07 14:46:35 539

  

DEBUG(MappTaskBean) 请求和返回时间分别是:2015-04-07 14:46:59 149 , 2015-04-07 14:46:59 133

  

DEBUG(MappTaskBean) 请求和返回时间分别是:2015-04-07 14:47:47 117 , 2015-04-07 14:47:47 117

  

DEBUG(MappTaskBean) 请求和返回时间分别是:2015-04-07 14:48:11 117 , 2015-04-07 14:48:11 117

修改后的时间占用
第一次访问,使用时间均为16毫秒。重启了weblogic,再次试验,第一次访问还是为16毫秒。

  

DEBUG(MappTaskBean) 请求和返回时间分别是:2015-04-07 14:34:45 961 , 2015-04-07 14:34:45 945

第二次以后的访问,使用时间均为0毫秒。说明此时的占用时间已经是微妙级以下。

  

DEBUG(MappTaskBean) 请求和返回时间分别是:2015-04-07 14:28:36 524 , 2015-04-07 14:28:36 524

  

DEBUG(MappTaskBean) 请求和返回时间分别是:2015-04-07 14:36:26 695 , 2015-04-07 14:36:26 695

实验结论
结论一

第一次连接Oracle数据库的时间:大约16毫秒

一模一样的SQL,第二次以后连接Oracle数据库的时间:大多数为0毫秒,偶然会占用大约16毫秒

从Ehcache取数时间:大约0毫秒
也就是说从Oracle取数与从Ehcache缓存里取数,相差的时间大约为16毫秒。

结论二

对于简单的SQL,无须从Oracle优化为缓存。

因为简单的SQL,只要每次都能在Oracle里命中,从Oracle里取数也能达到0毫秒的性能。

ouyida3的segmentfault的blog
2015.4.7

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/61770.html

相关文章

  • 精读《Nodejs V12》

    摘要:更好的安全性随着的发布,从升级到了,更安全且更易配置。通过使用,程序可以减少握手所需时间来提升请求性能。提供诊断报告有一项实验功能,根据用户需求提供诊断报告,包括崩溃性能下降内存泄露使用高等等。前端精读帮你筛选靠谱的内容。 1. 引言 Node12 发布有几个月了,让我们跟随 Nodejs 12 一起看看 Node12 带来了哪些改变。 2. 概述 Node12 与以往的版本不同,带来...

    CoderStudy 评论0 收藏0
  • 前端每周清单第 44 期: 2017 JS 调查报告、REST 接口实时化、ESM 的过去与未来

    摘要:巅峰人生年老兵思路上的转变,远比单纯提升技术更有价值本文节选自赵成教授在极客时间开设的赵成的运维体系管理课,是其对自己十年技术生涯的回顾与总结。赵成教授来自美丽联合集团,集团旗下两大主力产品是蘑菇街和美丽说,目前负责管理集团的技术服务团队。 showImg(https://segmentfault.com/img/remote/1460000012476504?w=1240&h=826...

    MASAILA 评论0 收藏0
  • Node 12 值得关注的新特性

    摘要:启动速度大幅提升。同时,通过重用主进程缓存,的启动速度提升了。在已经引入的特性,在里面默认启用,无需使用开启。相关介绍诊断报告提供了新的实验性功能诊断报告,一个非常有用的特性。升级为,增强安全功能。 前言 时隔一年,Node.js 12 如约而至,正式发布第一个 Current 版本。 该版本带来了诸如: V8 更新带来好多不错的特性。 HTTP 解析速度提升。 启动速度大幅提升。 更好的...

    springDevBird 评论0 收藏0
  • Redis 的性能幻想与残酷现实

    摘要:是设计为多线程的,所以在多核机器上单实例对的利用更有效,所以它的性能天花板也更高。 showImg(https://segmentfault.com/img/remote/1460000009945873); 2011 年,当初选择 Redis 作为主要的内存数据存储,主要吸引我的是它提供多样的基础数据结构可以很方便的实现业务需求。另一方面又比较担心它的性能是否足以支撑,毕竟当时 Re...

    LeoHsiun 评论0 收藏0
  • 训练神经网络的最快方法:Adam优化算法+超级收敛

    摘要:在实践中,几乎总是通过向梯度增加来实现算法,而不是真正改变损失函数。显然这是两种不同的方法。那么,权重衰减是不是总比的正则化更好呢我们还没发现明显更糟的情况,但无论是迁移学习问题例如斯坦福汽车数据集上的的微调还是 跌宕起伏的 Adam纵观 Adam 优化器的发展历程,就像过山车一样。它于 2014 年在论文 Adam: A Method for Stochastic Optimization...

    kohoh_ 评论0 收藏0

发表评论

0条评论

only_do

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<