浅谈服务器压力解决方案
优化服务器性能,从后往前说归根结底不外乎以前几种情况:
- 优化数据库
- 优化代码
- 使用静态数据
下面就分别做下介绍。
一、数据库优化
- 尽可能的使用SP,而不是让sql语句裸奔;
- 表结构设计要合理,起码要遵守三范式;
数据库设计三范式: 第一范式:原子性。表中不能套表 第二范式:有主键 第三范式:引用通过主键.
- 合理地设计索引,正确地使用索引;
- 对于超极大表(千万级别)最好采用分区表的方式存放,Oralce、SqlServer和Mysql都支持。
二、业务代码优化
- 减少数据库往返,
数据库连接是很重要且宝贵的资源,尽量避免没调用一次方法就读取一次数据库的情况,别小看这一条,我在项目就看到有同事在一个for循环中都次读取数据库。
尤其避免绑定的时候都次执行存储过程; - 合理正确的使用缓存,通过全局变量来保存一些设定,或是页面级缓存、站点级别缓存来减少服务器压力;
如果是大内存服务器,我见过最大96G内存的服务器,可以把一些重要数据放在内存中,利用Nosql做成内存缓存,当然这是另一个话题了; - 多用Ajax和客户端js、html代码,少用服务器控件,减少刷新和生成冗余的viewstate;
- 采用好的数据结构和算法;
哈系类性能最好,查找的复杂度是O(1),例如Dictionary<K,V>
二叉树查找复杂度O(logn),排序O(n*logn),List和ArrayList自带的排序速度接近O(n*logn),
数组类的线性查找O(n),如果你用冒泡排序O(n*n),那么你不是优秀的程序员。
StringBuilder 性能好于 string+=,不过提升的有限,不是本质的数量级别的提升。 - 及时关闭非托管资源;
除了上面提到的数据库connection,文件IO等也要注意。
三、使用静态数据
- 使用静态数据也很重要,可以提升速度2个数量级(百倍),例如门户网站、大型网站的首页,引用由特定服务生成的静态数据(js、txt、html等)速度会很快;
- 图片、文件、数据服务器分流,可以提升1个数量级(十倍)
web服务器1台或多台;
图片服务器1台或多台;
文件服务器1台或多台;
数据库服务器1台或多台; - CDN
作者:樊勇
出处:http://www.cnblogs.com/fanyong/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
我的联系方式:fanyong@gmail.com
个人独立博客:www.fy98.com