首页 > 代码库 > 超大容量负载方案
超大容量负载方案
如何实现更大入量的负载
mysql 优点:数据完整,更新操作方便,数据量小
memcache 优点: 读取方便,操作方便
案例:
用户表:
createtable Discuz_user(
user_id smallint(6) unsigned not nullAUTO_INCREMENT, /*用户id*/
user_name varchar(255) not null,
user_pwd varchar(255) not null, /*用户密码*/
primary key(user_id)
)engine=innodb default charset=utf8 auto_increment=1;
文章表:
createtable Discuz_article(
article_id smallint(6) unsigned notnull AUTO_INCREMENT, /*文章id*/
article_title varchar(255) notnull, /*文章标题*/
article_date timestamp not null defaultcurrent_timestamp, /*文章更新的时间*/
user_id smallint(6) unsigned not null,
primary key(article_id)
)engine=innodb default charset=utf8 auto_increment=1;
文章内容表:
createtable Discuz_article_content(
article_content_id smallint(6) unsignednot null AUTO_INCREMENT,
article_content text not null, /*文章内容*/
article_id smallint(6) unsigned notnull,
primary key(article_content_id) /*文章内容id*/
)engine=innodb default charset=utf8 auto_increment=1;
文章回复表:
createtable Discuz_reply(
reply_id smallint(6) unsigned not nullAUTO_INCREMENT,
reply_content text not null,
article_id smallint(6) unsigned notnull,
user_id smallint(6) unsigned not null,
primary key(reply_id)
)engine=innodb default charset=utf8 auto_increment=1;
由于我设计的数据库涉及多多库,所以就没必要设置外键
第一种实现负载:新闻每天20W的发布量,这个负载如何做???
方案:
1.可以分成多库
比如:mysql1 : root root 127.0.0.1 3306
mysql2: root root 192.168.1.2 3307
把文章平均分配到 mysql服务器在
在显示列表页的时候,可以用memcache实现列表的储存
也可以实现的方案是:
把列表页可以单独拿出来生成数据库和表,这样就只单独对一个数据库和表操作
怎么更快的把数据库列表中的内容读出来
1.可以把数据库的东西只显示前2000条,那样在前端绑定的时候对数据库的访问速度更快一些,在绑定前端的时候,列表页可以用memcache先读取出来,用crontab做一下定时任务,那样就可以实时更新memcache中key的东西了
2.关于文章列表页的东西,回复
回复的实现可以用json和memcache实现,完全没有必要用数据库中单独拉一表或者数据库在储存
可以把回复的内容,用户,回复时间,全部放到json里面,在存储到memcache中就更大的缓解了服务器的压力实现了负载
3.也可以更大的实现负载加入squid(Squid Cache(简称为Squid)是HTTP代理服务器软件。Squid用途广泛的,可以作为缓存服务器)可以毫无压力的实现负载
4.更好的一个手段,也可以把拿出来的列表信息,生成静态页面,完全无压力的实现在squid上实现缓存
DU比较大的,
实时达到文章的更新那是不可能的
可以多一些弹框的效果那样就可以为crontab重新生成新的key放在memcache争取时间
超大容量负载方案