SQL优化
业务逻辑优化
- 根据业务需求,去分库,分表
- SQL语句的编写与优化
索引优化
- 尽量避免全表扫描,首先应考虑在where及order by涉及的列上建立索引
- 最左原则
下面将导致引擎放弃使用索引而进行全盘扫描
- 尽量避免在where子句中对字段进行null值判断
- 尽量避免在where子句中使用 != 或 <> 操作符
- 尽量避免在where子句中使用or来连接
- 不要使用LIKE,来进行"%abc%" 这样的操作
- 尽量避免在where子句中对字段进行表达式操作
- 尽量避免在where子句中对字段进行函数操作
- 不要在where子句中 = 的左边进行函数、算术运算或者其他表达式运算
缓存机制
- 对于用户经常访问的数据,从数据库中取出来后,放到缓存区,可大大加快访问时间,减少系统开销
Redes缓存机制
- 内存数据库,数据存储在内存中,若掉电则数据就不存在。MySql是磁盘数据库
- 单进程,单线程
- Redis的删除操作
-
- 懒删除:当一条数据过期后,并不会立马删除,但当再次请求该数据的时候,会删除该数据,并返回null
-
- 主动删除:1.根据时间,固定时间间隔删除一次过期数据,2.当内存中的数据达到一定量时,会启动删除,删除过期数据
-
- 混合删除:可以设置百分比,设置主动删除扫描多大磁盘,剩余交由懒删除
滑动窗口
- 针对点对点通信
- 当通信双方建立连接的时候,会协商发送以及接收数据的窗口大小,当双方能够无差错的传输数据的时候,双方会相互协定增大窗口的大小,不过一般发送窗口的大小大于接收窗口,当双方发送出错,或者一方吃不消时,会减小窗口的大小。
流量控制与拥塞控制
- 流量控制:如果发送方把数据发送得过快,接收方可能会来不及接收,这就会造成数据得丢失
- TCP的流量控制是利用滑动窗口机制来实现的,接受方在返回的数据中会包含自己的接收窗口的大小,以控制发送方的数据
- 拥塞控制:就是防止过多的数据注入到网络中,这样可以使网络中的路由器或链路不致过载
两者的区别
- 流量控制是为了预防拥塞,是点对点通信量的控制
- 拥塞控制是全局性的,涉及到所有的主机和降低网络性能的因素
拥塞控制的方法
- 慢开始 + 拥塞避免
- 快重传 + 快恢复
- 慢开始 + 快恢复
Java中的IO
-
- 基于字节操作的I/O接口:InputStream和OutputStream
-
- 基于字符操作的I/O接口:Writer和Reader
-
- 基于磁盘操作的I/O接口:File
-
- 基于网络操作的I/O接口:Socket
- IO类有很多,但最基本的4个抽象类:InputStream, OutputStream, Reader, Writer
InputStream类
- public abstract int read() 读取数据
- public int read(byte b[]) 将读取到的数据放在byte数组中
影响IO性能的无非就是两大因素:数据的格式及存储的方式,前两类主要是数据格式方面的,后两个类是存储方式方面的:本地和网络
网络协议
TCP/IP
- 应用层
- 传输层:加端口号,报文段
- 网络层:加IP地址, 数据包
- 数据链路层:加MAC地址,数据帧
- 物理层:字节流