高并发处理方式 :
1. 文件服务器 : 专门做一个文件服务器,因为对于图片这些资源存储在web服务器上是很消耗资源的,而将文件部署在专门的服务器上,就算服务器发生了异常只要我们的总服务器是正常运行的,那么最多也就是这个文件请求不到
2. HTML页面静态化 : 可以缓解服务器的压力,适用于经常访问且内容不经常改变的页面
3. 负载均衡 : 负载均衡可以解决高负荷和大量并发请求的问题,也就是将大量请求分摊给多个服务器共同完成任务
4. 反向代理 : 客户端直接访问的服务器不是我们直接提供服务的服务器,就比如使用nginx做反向代理,客户端发送请求带nginx,由nginx通过负载均衡的策略将请求转发给我们的服务器,响应的结果也是有nginx返回给用户的
5. 动静分离 : 将网页中的HTML,CSS,IMG等文件分开部署,提高静态代码的访问速度,降低与后台代码的访问
6. SQL优化 : 相同功能的SQL,做过优化的和没有做过优化的,它的处理能力相差是很大的,甚至几倍上千的速度差距和资源差距
7. 数据缓存 : 将一些具有时效性的经常访问的或者不方便存储的数据可以用于缓存的应用程序中,如果有必要的话还可以将缓存的服务器单独部署,这样可以减轻数据库与数据库的交互次数从而降低数据库的压力,并且从缓存中读写数据的效率是远大于直接操作数据库的
8. 数据库读写分离 : 采用主从数据库的方式(也就是将读和写操作分开),主数据库执行写操作,从数据库执行读操作,主数据库中数据的变化同步到从数据库中保证数据的完整性,这样做的目的是可以降低数据库的IO压力提高数据库性能
9. 活跃数据的分离 : 所谓的活跃数据就是经常用到的数据,比如经常活跃的用户数据等。不活跃数据,比如好长时间不等路的用户数据,还有几个月前的数据等等
根据以上几点单独分析 :
文件服务器 : 可以采用第三方的或者使用FastDFS分布式文件系统
FastDFS分布式文件系统 : 主要是对文件进行管理 (文件存储,文件同步,文件访问,文件下载上传等);可以解决大量存储和负载均衡的问题,特别适合以文件为载体的在线服务(相册网站,视频网站)
FastDFS架构包括Tracker server和Storage server(存储服务器),客户端请求Tracker server进行文件上传,下载,通过Tracker server调度最终由存储服务器完成文件的上传和下载
Tracker server(调度服务器)的作用是负载均衡和调度,通过Tracker server在文件上传时可以根据一些策略找到存储服务器提供文件上传服务.文件上传最终是存储在存储服务器上的,而存储服务器没有实现自己的文件系统,他是利用操作系统的文件系统来管理文件
文件上传流程 :
客户端上传文件后存储服务器将文件的ID返回给客户端,这个文件的ID用于以后访问该文件的索引信息,文件的索引信息包括(组名+虚拟磁盘路径+数据两级目录+文件名)
组名 : 文件上传后所在的存储组的名称,在文件上传成功后由存储服务器返回,需要客户端自行保存
虚拟磁盘路径 : 存储配置的虚拟路径,与磁盘选项store_path*对应.如果配置了store_path0则是M00,配置store_path1则是M01以此类推
数据两级目录 : 存储服务器在每个虚拟磁盘路径下创建的两级目录,用于存储数据文件
文件名 : 与文件上传时不同,是由存储服务器根据特定信息生成,文件名包含 : 源存储服务器IP地址,文件创建时间戳,文件大小,随机数和文件拓展名等信息
SQL优化 :
1. 减少数据的访问 : 设置合理的字段,通过索引去访问减少磁盘IO
2. 返回更少的数据 : 只返回我们需要的字段或分页数据
3. 减少与数据库交互次数
4. 合理的利用更多的资源 : 使用表分区,可以增加并行操作,更大限度的利用CPU资源
5. 减少数据库的排序操作以及全表查询,减少CPU的占用
总结 : 最大化的利用索引,避免全表扫描,减少无效数据的查询
全表扫描 : 指的是在执行SQL的时候无法使用索引,导致查询和执行缓慢,以至于导致java程序的处理被阻塞从而降低系统的响应速度,也会降低数据库的一个并发性能严重的还会导致应用程序卡顿
索引失效会导致全表扫描 :
1. 模糊查询的做模糊会导致索引失效,全模糊是无法使用索引的
2. 查询的条件中存在is null会导致索引失效
3. 查询条件中使用了大于,小于,不等于这样的操作符会导致索引失效
4. or可以替换不等于来使用,但是or的使用不当也会导致索引失效
MySql :
1. MySql在5.7版本以后的默认存储引擎是InnoDB,提供了事物的处理,回滚,崩溃修复功能以及多版本并发控制的事物安全
2. 自增的列为主键(自增,唯一且不为空)
3. 还提供了外键约束,当删除或更新父表中的数据时子表中的数据也要有相应的改变
MySql事物特性 :
1. A原子性 : 一个事物是不可分割的工作单元,整个事物所有的操作要么全部执行成功,要么全部执行失败
2. C一致性 : 事物执行结束后,数据库的完整性约束没有被破坏,事物执行前后都是合法的数据状态
3. I 隔离性 : 一个事物提交之前对其他事物是不可见的
4. D持久性 : 事物提交后所做的修改是永久的,就算系统崩溃修改的数据也不会发生改变
事物的隔离级别 :