【第九周】性能优化(三)
数据库架构原理
数据库整体架构
连接器
数据库连接器会为每个连接请求分配一块专用的内存空间用于会话上下文管理。建立连接对数据库而言相对比较重,需要花费一定的时间,因此应用程序启动的时候,通常会初始化建立一些数据库连接放在连接池里,这样当处理外部请求执行 SQL 操作的时候,就不需要花费时间建立连接了。
语法分析器
解构语法树
语义分析与优化器
语义分析与优化器就是要将各种复杂嵌套的 SQL 进行语义等价转化,得到有限几种关系代数计算结构,并利用索引等信息进一步进行优化。
生成执行计划
执行引擎
B+树结构数据存储
聚簇索引:聚簇索引的数据库记录和索引存储在一起
非聚簇索引:在叶子节点记录的就不是数据行记录,而是聚簇索引,也就是主键。通过非聚簇索引找到主键索引,再通过主键索引找到行记录的过程也被称作回表。
合理适用索引:
不要盲目添加
删除不用的索引
适用更小的数据类型
数据库事务
事务特性(ACID):
原子性
隔离性
持久性
一致性
事务日志
JVM虚拟机原理
组成架构:
字节码执行流程
类加载器的双亲委托模型
堆栈
堆:每个 JVM 实例唯一对应一个堆。应用程序在运行中所创建的所有类实例或数组都放在这个堆中,并由应用所有的线程共享。
堆栈:JVM 为每个新创建的线程都分配一个堆栈。也就是说,对于一个 Java 程序来说,它的运行就是通过对堆栈的操作来完成的。
方法区 & 程序计数器
方法区主要存放从磁盘加载进来的类字节码,而在程序运行过程中创建的类实例则存放在堆里。程序运行的时候,实际上是以线程为单位运行的,当 JVM 进入启动类的 main方法的时候,就会为应用程序创建一个主线程,main 方法里的代码就会被这个主线程执行,每个线程有自己的 Java 栈,栈里存放着方法运行期的局部变量。而当前线程执行到哪一行字节码指令,这个信息则被存放在程序计数寄存器。
垃圾回收
JVM 通过一种可达性分析算法进行垃圾对象的识别,具体过程是:从线程栈帧中的局部变量,或者是方法区的静态变量出发,将这些变量引用的对象进行标记,然后看这些被标记的对象是否引用了其他对象,继续进行标记,所有被标记过的对象都是被使用的对象,而那些没有被标记的对象就是可回收的垃圾对象了。
进行完标记以后,JVM 就会对垃圾对象占用的内存进行回收,回收主要有三种方法:清理、压缩、复制。
JVM分代垃圾回收:
性能诊断工具
基本工具:JPS ,JSTAT,JMAP,JSTACK
集成工具:JConsole,JVisualVM
秒杀
设计原则
采用 JS 自动更新技术将动态页面转化为静态页面
并发控制,防秒杀器
设置阀门,只放最前面的一部分人进入秒杀系统
简化流程
砍掉不重要的分支流程,如下单页面的所有数据库查询
以下单成功作为秒杀成功标志。支付流程只要在 1 天内完成即可
前端优化
采用 YSLOW 原则提升页面响应速度
评论