java web项目优化记录:优化考试系统
考试系统在进行压力測试时发现,并发量高之后出现了button无反应。试题答案不能写到数据库的问题,于是针对这些核心问题,进行了优化。
数据库方面:
Select语句:Select * from TEB_VB_XZTRecord改为select 必须的列 form TEB_VB_XZTRecord。之前看的教学视频里就讲过最好别用*。因为查询了不必要的列,所以导致了低效率。
insert优化:考试业务的原因。须要把查询出来的试题,一条条的插入到数据库中。优化前:循环+每次插入一条的insert语句。
优化后:insert 表名(字段名) select (字段名) from 表名 where questionID in(,,,,,,,)
这样的优化在insert语句中用了select字句和inkeyword。相当于在数据库运行了查询之后。直接进行了查询。没有通过java项目的一次次的循环。之前想用一个insert+多个value的方法,发现这样的方式在mysql中行的通,但在oracle中行不通。
程序设计和算法优化:
算法常常受个人思路的影响,比方对复用认识深刻,干过的事情就把成果保存下来,以后再用就高效了。
程序设计也是一样。
缓存同样数据
考生的考试卷面,须要由考试信息、个人信息。考试卷面分值分布,试卷内容 四块内容组成。当中考试信息和卷面分值分布 对每一个考生都同样,因此将同样的信息进行缓存。就降低了大量的查询。而不是用一次查一次。
提前谋划,提前准备
在大并发量时。能够提前干的事就提前干,就像请人在自己家吃饭,到了吃饭的点暂时准备饭菜,肯定手忙脚乱。提前准备出来到时候就悠闲了。
对于考试系统的抽卷来说:考生考试时,每一个考生都随机从题库抽取一套试卷。这样的方法包括了大量的查询和一个循环,因此对性能要求较高。而且大并发量时导致了系统根本没反应。
第一次优化:在考试前为考生抽好试卷,考生登录时仅仅需从答题记录表查询就可以。这样是把抽题的过程提前准备好了。
第二次优化:考虑到第一次优化中扔须要大量的查询。这次优化的逻辑是 抽取固定的卷数,比方抽取50套,每套卷有一个卷号,考试前将50套卷载入到内存中。考生随机抽取到一个卷号,然后依据卷号从内存中拿试卷,这样仅仅要查询一次,然后其它考生都能够从内存中获取试卷,避免了大量的查询。
将事情分开干
很忙的时候,把能够后推推的事情推后点。合理规划好资源和时间。答卷过程中,将客观题判分的环节移到了教师判分逻辑中,由于正确答案须要查询。所以在答题时会同一时候有大量的查询和更新操作。去掉了判分,答题时就仅仅有更新了。
再有就是对String的优化,由于考试系统须要将试题显示在界面,因此须要在后台将试题拼好串,显示在前台,当时用了String。但String不是动态扩容的,仅仅会复制原来的String。加上新内容后新生产一个。因此存在着大量的存储浪费,改为了StringBuffer以后,对内存的要求小了非常多。
java web项目优化记录:优化考试系统的更多相关文章
- [经验] Java Web 项目怎么部署到 Linux 系统上
废话少说, 直奔主题 第一步: 将 web 项目打成 war 包 1: 打开项目的 pom.xml 文件 如果是迭代后的项目, 记得修改项目的版本号, 这里我的是第二版所有就把 1 改成了 2 2: ...
- 记录一个奇怪的异常,无法还原此异常。 普通的Maven Java Web 项目
项目 : 普通的Maven Java Web 项目 操作记录: 使用 Maven 构建项目,指令 tomcat7:run 无异常 但使用 eclipse 的 tomcat 运行项目,报此异常. 后面从 ...
- 关于Maven打包Java Web项目以及热部署插件Jrebel的使用
Java Web/Eclipse/Maven/Tomcat 最近有个新项目是java web项目,记录一下,可能比较乱.虽然没接触过Java,但是eclipse还是用过的 初识项目 同事说,项目是ma ...
- Java Web项目在Mac系统上启动时提示nodename nor servname provided
今天一不小心更新了Mac系统,然后在启动Java Web项目的时候,提示了java.net.UnknownHostException: MAC-mini-local nodename nor serv ...
- Java Web项目在Mac系统上启动时提示nodename nor servname provided的解决办法
今天在Mac系统上启动Java Web项目的时候,提示了Java.net.UnknownHostException: yangxiaomindeMacBook-Pro.local nodename n ...
- 大型Java Web项目的架构和部署问题
一位ID是jackson1225的网友在javaeye询问了一个大型Web系统的架构和部署选型问题,希望能提高现有的基于Java的Web应用的服务能力.由于架构模式和部署调优一直是Java社区的热门话 ...
- Java Web项目中连接Access数据库的配置方法
本文是对前几天的"JDBC连接Access数据库的几种方式"这篇的升级.因为在做一些小项目的时候遇到的问题,因此才决定写这篇博客的.昨天已经将博客公布了.可是后来经过一些验证有点问 ...
- step2-------使用myeclipse创建maven java web项目
1.文章内容概述: 在对项目需求进行分析之后,决定使用maven对我的java web项目进行管理,这篇文章记录了使用myeclipse创建maven java web项目的过程. 2.开发环境: j ...
- Java web项目综合练习(Estore)
Java web项目综合练习(Estore) 复习day18: ajax代码的书写步骤 2)json格式文本,转js对象的方法是那个 项目开发流程介绍 这里学习的JavaWEB项目实战,主要是把前面学 ...
随机推荐
- Python 设计模式--策略模式
策略模式(Strategy Pattern) 策略模式是一种与行为相关的设计模式,允许你在运行时根据指定的上下文确定程序的动作.可以在两个类中封装不同的算法,并且在程序运行时确定到底执行哪中策略. 特 ...
- 重新学习Java——Java基本的程序设计结构(二)
上一节简单回顾了Java基本的一些程序设计的知识,这一节将继续根据<Java核心技术>这本书,进行这方面知识的复习与探索. 1. 字符串 Java字符串实际上就是Unicode字符序列.例 ...
- html与html5 总结
时间:于2017年12月3日 19:35:18开始 用于: 这文章用于个人技术总结(全文转发请标明出处,小段摘抄随意) HTML笔记1.html标签不区分大小写,但是建议小写2.常用标签: 可用在he ...
- java实现麦克风自动录音
最近在研究语音识别,使用百度的sdk.发现只有识别的部分,而我需要保存音频文件,并且实现当有声音传入时自动生成音频文件. 先上代码: public class EngineeCore { String ...
- Android集成微信分享功能应用签名生成方法及分享不生效的问题
通过友盟sdk集成微博.微信.qq等分享功能时,微博和qq很顺利,但在做微信集成时一直不成功.主要问题还是之前在微信开放平台申请创建移动应用时,对应用签名没有填写对,走了很多弯路现总结出来,加深记忆避 ...
- 继续C#开发or转做产品
本人今年大四,C#开发,在一家公司实习了一年后,面临一个选择,是继续C#开发还是转做产品?我C#开发能力目前还一般,但很有兴趣.也喜欢设计与创意,做过产品专员.求大婶们指导!
- vuex的各个细节理解(因人而异)
应用级的状态集中放在store中: 改变状态的方式是提交mutations,这是个同步的事物: 异步逻辑应该封装在action中. const vuex_store = new Vuex.store( ...
- github与git常用的一些基本配置与命令
首次Git设置:ssh-keygen -t ras -C "email@xxx" 生成SSH (共钥)将生成的SSH key复制到文本框中即可(title默认为邮箱名) 你的身份( ...
- 使用openssl搭建CA并颁发服务器证书
本来整理了一份执行脚本,但是没有找到附件功能.只好直接贴当时自己看过的链接了. 文章标题:Openssl Certificate Authority 转载链接:https://jamielinux.c ...
- 语义分割:使用关系图辅助图像分割-Capsule Network、IceNet
文章:欲取代CNN的Capsule Network究竟是什么来头?它能为AI界带来革命性转折么? 文章:用于分类.检测和分割的移动网络 MobileNetV2 网络 文章:后RCNN时代的物体检测及分 ...