大数据量下 MyBatis PageHelper 分页查询性能问题的解决办法
大数据量下 MyBatis PageHelper 分页查询性能问题的解决办法
前因项目一直使用的是PageHelper实现分页功能,项目前期数据量较少一直没有什么问题。随着业务扩增,数据库扩增PageHelper出现了明显的性能问题。
几十万甚至上百万的单表数据查询性能缓慢,需要几秒乃至十几秒的查询时间。故此特地研究了一下PageHelper源码,查找PageHelper分页的实现方式。
一段较为简单的查询,跟随debug开始源码探寻之旅。
12345public ResultContent select(Integer id) { Page<Test> blogPage = PageHelper.startPage(1,3).doSelectPage( () -> testDao.select(id)); List<Test> test = (List<Test>)blogPage.getResult(); return new ResultContent(0, "success& ...
软件危机1.3
一、软件危机的介绍1、概念
软件危机是指在计算机软件开发和维护过程中所遇到的一系列严重问题。这些问题绝不是不能运行的问题才有的,实际上,所有的软件都不同程度的存在这些问题。软件危机包含两方面的问题:
(1)如何开发软件,以满足对软件日益增长的需求;
(2)如何维护数量不断膨胀的已有软件。
2、典型表现
(1)对软件开发成本和进度估计不准确。
(2)用户对“已完成的”软件系统不满意。
(3)软件产品的质量不可靠。
(4)软件不可维护。
(5)软甲没有适当的文档资料。
(6)软件成本在计算机系统总成本中所占的比例逐年上升。
(7)软件开发跟不上计算机应用普及深入的趋势。
二、产生软件危机的原因1.客观原因
(1)软件是计算机系统中的逻辑部件而不是物理部件。
(2)软件规模庞大,而且程序复杂性将随着程序规模的增加而呈指数式上升。
2、主观原因
(1)对软件开发和维护有不少糊涂的概念,采用的错误的方法技术。
(2)存在与软件发开和维护有关的很多错误的做法。
(3)对用户要求没有完整清楚的认识,就急于编写软件程序。
(4)一个软件从定义,开发,使用,维护,直到最终废弃,要经历一个漫长的时期。
( ...
软件的发展1.2
一、软件的发展
1、程序设计阶段(1)软件生产个体化 规模小,编写者和使用者同一个人(2)软件是设计者头脑中隐含过程 除程序清单,无文档材料保存
2、程序系统阶段(1)产品软件 由专门软件开发组织开发(2)软件作坊 软件开发组织,沿用早期个体化软件开发方法(3)软件危机 软件维护工作耗费大量资源(4)软件工程 1968年,北大西洋公约组织计算机科学家讨论软件危机,提出软件工程
3、软件工程阶段(1)软件危机得到缓解打破软件生产个体化特征。工程化的设计原则、方法和标准(2)新的挑战 微处理器和个人计算机 分布式处理系统 局域网、广域网 宽带数字通讯
4、第四阶段集中主机环境
客户机/服务器(二层)
客户机/服务器(三层)
浏览器/服务器
二、软件的危机1、软件危机定义在计算机软件开发和维护过程中遇到的一系列严重问题
2、主要表现(1)开发成本和进度估计不准,延迟交付、取消项目(2)用户对已交付软件不满意,开发人员对用户信息交流不充分,产品不符合用户需求(3)软件产品质量靠不住,软件产品保证技术(审查、复 ...
软件定义与分类1.1
一、软件定义1、1983年IEEE的软件定义计算机程序,文档,运行程序必须的数据,方法,规则。方法和规则在文档中说明,在程序中实现。
2、简化软件定义程序+文档+数据
二、软件的分类(功能)
1、系统软件与计算机硬件紧密配合使计算机各个部件与相关软件及数据协调,高效工作的软件。如操作系统,编译程序等。
2、支撑软件协助用户开发软件的工具性软件。
3、应用软件(1)商业数据处理软件管理信息系统(MIS)、企业资源计划(ERP)。
(2)工程与科学计算软件CAD/CAM(计算机 辅助设计/制造)、仿真模拟,天气预报。
(3)智能产品嵌入软件驻留在智能产品内存,控制产品工作的软件。数码相机,GPS等。
(4)人工智能软件利用非数值算法去解决复杂问题的软件。专家系统,模式识别软件,人工神经网络软件。
(5)个人计算机软件文字处理系统,电子表格,游戏娱乐软件等。
三、软件的分类(规模)
搜索输入框建议提示(自动完成)功能实现
一、示例需求
二、后端接口1、ListController
12345678@ApiOperation("根据左关键字查询讲师名列表")@GetMapping("/list/name/{key}")public R selectNameListByKey( @ApiParam(value = "查询关键字", required = true) @PathVariable String key){ List<Map<String, Object>> nameList = teacherService.selectNameListByKey(key); return R.ok().data("nameList", nameList);}
2、ListrService
1List<Map<String, Object>> selectNameListByKey(String key);
...
面向对象思想与JAVA代码内存加载流程
一、面向对象的基本概念(1)对象对象是人们要进行研究的任何事物,从最简单的整数到复杂的飞机等均可看作对象,它不仅能表示具体的事物,还能表示抽象的规则、计划或事件。(2)对象的状态和行为对象具有状态,一个对象用数据值来描述它的状态。对象还有操作,用于改变对象的状态,操作就是对象的行为。对象实现了数据和操作的结合,使数据和操作封装于对象的统一体中(3)类具有相同或相似性质的对象的抽象就是类。因此,对象的抽象是类,类的具体化就是对象,也可以说类的实例是对象。类具有属性,它是对象的状态的抽象,用数据结构来描述类的属性。类具有操作,它是对象的行为的抽象,用操作名和实现该操作的方法来描述。(4)类的结构在客观世界中有若干类,这些类之间有一定的结构关系。通常有两种主要的结构关系,即一般–具体结构关系,整体–部分结构关系。①一般——具体结构称为分类结构,也可以说是“或”关系,或者是“is a”关系。②整体——部分结构称为组装结构,它们之间的关系是一种“与”关系,或者是“has a”关系。(5)消息和方法对象之间进行通信的结构叫做消息。在对象的操作中,当一个消息发送给某个对象时,消息包含接收对象去执行某 ...
服务容错基本知识
一、容错方案要防止雪崩的扩散,我们就要做好服务的容错:保护自己不被猪队友拖垮的一些措施。常见的容错方案:隔离、超时、限流、熔断、降级
1、隔离将系统按照一定的原则划分为若干个服务模块,各个模块之间相对独立,无强依赖。当有故障发生时,能将问题和影响隔离在某个模块内部,而不扩散风险,不波及其它模块,不影响整体的系统服务。常见的隔离方式有:线程池隔离和信号量隔离。2、超时上游服务调用下游服务时,设置一个最大响应时间,如果超过这个时间,下游未作出响应,就断开请求,释放掉线程。
3、限流限制系统的输入和输出流量以达到保护系统的目的。为了保证系统的稳定运行,一旦达到的需要限制的阈值,就采取相应措施以完成限制流量的目的。
4、熔断当下游服务因访问压力过大而响应变慢或失败,上游服务为了保护系统整体的可用性,可以暂时切断对下游服务的调用。这种牺牲局部,保全整体的措施就叫做熔断。
5、降级降级就是为服务提供一个托底方案,一旦服务无法正常调用,就使用托底方案。
二、容错组件1、HystrixHystrix是由Netflix开源的一个延迟和容错组件,用于隔离访问远程系统、服务或者第三方库,防止级联失败,从而提 ...
Hexo博客搭建、fluid主题美化
一、添加一言1、文章参考地址:https://pxxyyz.com/posts/30454/
2、主页效果https://whitejiang.gitee.io/
3、替换layout_partial\plugins目录下的typed.ejs
123456789101112131415161718192021222324252627282930313233<% if(theme.fun_features.typing.enable && page.subtitle !== false){ %> <%- js_ex(theme.static_prefix.typed, "/typed.min.js") %> <script> function typing(id, title){ var typed = new Typed('#' + id, { strings: [ ' ' ...
Hexo博客搭建、简洁优雅的fluid主题
一、效果https://whitejiang.gitee.io/
二、准备工作在开始一切之前,你必须已经:
1.有一个github账号或者gitee(码云)账号
推荐注册码云账号,网速快:https://gitee.com/
注:新建仓库时,用户名和仓库名需保持一致,,,原因:生成的默认pages地址好看。
2.安装node.js、npm
node.js官网:http://nodejs.cn/download/
3.安装git
git官网:https://git-scm.com/
三、安装hexo12npm install -g hexo-cli
四、初始化在电脑的某个地方新建一个名为hexo的文件夹(名字可以随便取),比如我的是D:\Hexo\sunshine,由于这个文件夹将来就作为你存放代码的地方,所以最好不要随便放。
在sunshine文件夹下点击右键,点击 Git Bash Here,输入命令
12hexo init
hexo会自动下载一些文件到这个目录,目录结构如下图:
五、部署运行1hexo g
1hexo s
hexo s是开启本地预览服务,打开浏览器访问 ...
Spring Security简单介绍
一、Spring Security介绍1、框架介绍
Spring 是一个非常流行和成功的 Java 应用开发框架。Spring Security 基于 Spring 框架,提供了一套 Web 应用安全性的完整解决方案。一般来说,Web 应用的安全性包括用户认证(Authentication)和用户授权(Authorization)两个部分。
(1)用户认证指的是:验证某个用户是否为系统中的合法主体,也就是说用户能否访问该系统。用户认证一般要求用户提供用户名和密码。系统通过校验用户名和密码来完成认证过程。
(2)用户授权指的是: 验证某个用户是否有权限执行某个操作。在一个系统中,不同用户所具有的权限是不同的。比如对一个文件来说,有的用户只能进行读取,而有的用户可以进行修改。一般来说,系统会为不同的用户分配不同的角色,而每个角色则对应一系列的权限。
Spring Security其实就是用filter,多请求的路径进行过滤。
(1)如果是基于Session,那么Spring-security会对cookie里的sessionid进行解析,找到服务器存储的sesion信息,然后判断当前用户是 ...