使用 Nginx 作为前端接入
用 Nginx 进行动静分离。这个不用多讲,新浪、网易、淘宝、腾讯等巨头的使用已经说明了一切。
保持最简单的架构
遵守 KISS 原则(Keep it simple and stupid)。尽量不要考虑项目外的重用。过多的考虑项目外的重用,必然会增加项目的复杂度。避免过度集成,让每个模块只做自己的事,这对于日后的维护和模块复用都有好处。
精心设计缓存处理、毫不吝啬代码(对象、列表、片段)
对于门户网站的首页来说,往往可能会有近百个 SQL。用户并发上去以后,光首页就足以让服务器 down 掉。缓存不但有利于降低负载,而且还能提高响应速度。
调整使用聚集索引
对于每个表来讲,聚集索引只有一个,利用好了,查询速度会有意想不到的提升效果。
以 MySql 为例,InnoDB选取聚集索引参照列的顺序是
1. 如果声声明了主键(primary key),则这个列会被做为聚集索引;
2. 如果没有声明主键,则会用一个唯一且不为空的索引列做为主键,成为此表的聚集索引;
3. 上面二个条件都不满足,InnoDB会自己产生一个虚拟的聚集索引。
CREATE TABLE `timeline_raw` ( `rawId` bigint(20) NOT NULL AUTO_INCREMENT, `uid` bigint(20) DEFAULT NULL, `did` bigint(20) DEFAULT NULL, `channelId` char(1) NOT NULL DEFAULT '1' COMMENT '1:qvga; 2:720p', `fileId` bigint(20) DEFAULT NULL, `sectionId` bigint(20) DEFAULT NULL, `headerFilePath` varchar(120) DEFAULT NULL, `startTime` bigint(20) DEFAULT NULL, `endTime` bigint(20) DEFAULT NULL, `updateTime` datetime DEFAULT NULL, `createTime` datetime DEFAULT NULL, PRIMARY KEY (`rawId`), KEY `index_uid_did_startTime` (`uid`,`did`,`startTime`) USING BTREE, KEY `index_uid_did_endTime` (`uid`,`did`,`endTime`) USING BTREE, KEY `index_time` (`startTime`) USING BTREE, KEY `index_uid_did_fileId` (`uid`,`did`,`sectionId`) USING BTREE, KEY `index_sectionId` (`sectionId`) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 |
这个表有四个索引:主键 rawId、sectionId、`uid`,`did`、startTime。