数据库优化:
1、建立正确的主键、外键以及索引。
2、分离原则:读写分离,业务数据分离。
a)分库 b)分表 c)分区 d)分列(将大的列,不常用的隔离到他表,按需查询)
3、选择隔离级别:一些数据对一致性要求不高的,可以适当牺牲一致性,降低加锁阻塞。
4、保证事务简短以及去除不必要的锁机制。
5、查询优化:
a) 避免表内的相关子查询
b) 避免排序或者尽可能少的排序
c) 做大量数据排序时,数据尽量放在临时表中
d) 尽量在where后多加查询条件,以减少不必要的返回行。
e) 只select需要到的字段,减少不必要的返回列。
6、分页存储过程:大列表的数据查询也可以用分页存储达到优化效果。
7、利用数据库缓存、视图、临时表等最大程度优化系统,并对函数和存储过程做必要的优化。
8、如有必要刻意冗余表中字段,避免联合查询。
9、如有必要,可以将表中的大字段抽离到单独表中,供用户进行单独查询。
10、必须做多表关联查询时,尽可能过滤不符合条件的表中数据,以减少笛卡尔值的计算量。
应用层优化:
应用层优化侧重于应用层本身的逻辑优化,算法优化、代码优化等、优化的角色可以是熟悉应用本身的开发者。
1、优化算法,选择合适高效的算法,降到不必要的递归,循环、多层嵌套等计算。
2、避免申请过多的不必要的内存开销。
3、降低内存泄露。
4、使用频率降低的大文件、大对象、大数组,在使用完毕之后,及时释放。
5、考虑多线程技术。
6、选择适当的通讯方式:长连接、短连接、有以下方式(Socket、Remoting、WebService、WCF)
7、降低应用之间的通信次数,如用户认证服务、工作流服务、数据库服务。
8、降低应用之间的数据传输量,不必要的不传、少传。
9、缓存机制:缓存常用的,不经常变化的,偶有变化,可以考虑缓存依赖机制。
10、支持异步计算,降低等待时间。
11、考虑延迟加载,或者提前加载两种方式。
12、分离原则:分离业务模块、分离大I/0模块、分离高耗内存模块、分离高耗带宽模块。
13、考虑分布式应用、分布式存储。
Web优化:
1、减少http请求。
2、减少404错误。
3、在html页面header加入缓存标签。
4、Gzip压缩网页。
5、减少cookie体积、
6、使用外部的js和css。
7、消减js和css
8、压缩js
9、可以考虑静态页面,避免使用动态页面。
总结:
1、硬件方面使用高性能的小型机、存储设备。使用极好的网络带宽。
2、物理分离Web Server 和 DB Server 或其它服务如:用户认证服务。
3、缓存。数据缓存和页面缓存。
4、物理分离业务模块,单独重要频繁业务单独部署一台服务器。
5、部署Web Server集群。
6、Web负载均衡。
7、数据读写分离。
8、使用消息队列。进行各种应用间的同步/异步计算。
9、应用间选择合适的通讯方式、通信协议。
10、Web分布式、应用分布式、数据分布式。