光电工程师社区

标题: 让您的论坛变得快、更快、再快! [打印本页]

作者: suncon    时间: 2003-4-30 06:09
标题: 让您的论坛变得快、更快、再快!
让您的论坛变得快、更快、再快!

下面我们来介绍一种几乎不需要对程序做任何改动就能增强论坛部分页面(主要是访问量很大的页面)2-3倍

性能的方法,在操作以下方法前请先做好您的数据库备份
其实本部分操作也可以由程序来完成,但由于我比较懒,而且这部分操作最好由手动来完成,所以在这里就不提供程序更新的方法了

要按照下面方法进行设置的朋友请详细看下面的说明,要不设置错了可别怪我:)

或许大家会问为什么下面主要是做了索引优化,为何原先默认数据不做这样的设置呢,在这里我就说明一下:
这因为ACCESS的索引结构太不符合常规设置了,要多次的摸索才能找到正确的设置方法,我也是刚摸索出来的,大家不要笑哟:)
就比如:
1、在多条件多排序的查询语句中,我们一般都是根据条件和排序建立索引,但是在ACCESS数据库中这个原则好像不能用,在查询结果很少(如2000条记录)的时候可以用这样的原则,但是在10万以上级别的查询就不能用这样的原则了,这个时候往往是索引不生效(取消了排序或者条件就好了,很奇怪,好像不能同时用一样)
2、根据实际测试的结果,在ACCESS里面对大量数据的操作,绝对要禁止top 20这样的用法,这样即使是有合适的索引,速度也会慢非常多,您可以在建立合适索引的基础上取消top 20并在程序中不要让他分页或者只显示20条记录,通过这样能加快5倍以上的速度(指20万的数据);另外对于要取得最后一行数据的ID,不能用top 1的方法,要用max(id)的方法,这个规则我在80万的数据测试下竟然能提高100倍的速度,呵呵,不可思议吧
关于这方面其实还有很多有效性规则,等那天有空了慢慢给大家说吧,都是经验之谈哟
说明:上述规则仅在ACCESS数据库下生效,当然部分规则也对SQL生效的

以下操作涉及索引删除和添加的方法请看最下面的说明

1、针对list.asp和topicwithme.asp页面
在这里我们不需要做任何程序上的改动,仅需要手动对数据库结构做一些调整
删除原先topic表中的索引,除了primarykey topicid以外的所有索引都要删除
大家在这里需要对topic表建立以下索引:
索引名称   索引字段    排序
boardid   boardid    升
istop    istop     升
topiclist  istop     升
       lastposttime  升
locktopic  locktopic   升
topicwithme postuserid   升
       child     升
建立这些索引后,list.asp页面能提高1-2倍的速度,topicwithme.asp能提高3-5倍的速度,具体测试数据下面提供

2、针对toplist.asp页面
对表user添加以下索引,原先的索引不用删除
索引名称   索引字段    排序
adddate   adddate    降
article   article    降
userwealth  userwealth   降
另外要检查是否有下面两个索引,如果没有则添加上
username   username    升
usergroupid usergroupid  升
本部分能提高toplist.asp页面2-4倍的速度

3、针对保存贴子页面,我在这里附带了修改后的文件,大家可以下载,也可以自己手动修改
涉及文件包括
saveannounce.asp/savereannounce.asp/savevote.asp
将里面的top 1 ***.....order by *** desc改成
max(***)把后面的order by *** desc去掉
本部分能提高非常多的速度,说100倍有点夸张但确实是

4、针对搜索页面和显示贴子页面
这两部分原先已经定义了合适的索引了,所以这里不需做改动
不过杨挣版主不知道怎么搞的在搜索结果页面放了很消耗资源的东东,所以我就取消了,如果大家需要就用压缩包里面的覆盖一下
另外搜索部分最好暂时先取消对所有版面的搜索,这部分消耗资源很大,目前还没有时间做这里的调整
至于显示贴子页面,原先已经有合适的索引了

文中所说补丁下载地址,手动修改文件的用户可不用下载或者自行对照,数据库操作还需按照上面所说的进行

相应修改!
http://www.dvbbs.net/download/dvbbs6.0.0_Q0416.rar
备注:当前网上6.0.0版本已经加入该修改操作

下面是测试结果:
用户数据20万,主题数据27万,帖子表数据80万
机器情况:P4赛杨 1.7G 256M内存 IDE硬盘

1、针对list.asp页面,27万数据
A.对于返回10万结果数的版面,当前论坛6.0版程序,有总固定,平均用1.5秒,之前用3-5秒
B.对于返回2万结果数的版面,当前论坛6.0版程序,平均用700ms,之前用2-3秒
C.对于返回6000多结果数的版面,当前论坛6.0版程序,平均用400ms,之前用2秒左右
2、针对toplist.asp用户显示页面,调用文章排行和财富等排行,20万数据
之前用3秒左右的时间,做了优化后用300ms左右的时间
3、针对贴子保存页面,80万贴子数据和27万主题
之前用100多秒,修正文件和数据库后用300ms左右
4、针对topicwithme.asp文件
之前用8秒左右,设置数据库后我参与的主题用500ms左右,我发布的主题用100ms左右
大家可以看到,我这里的测试都是使用20万级别以上进行测试的,主题20万是很可观的数字,很可能这时帖子数已经上百万了,还能达到这样的效果,看谁还说ACCESS仅能应付小型应用呢?
不过性能这东西是跟很多方面的因素有关的,动网目前也在不遗余力的在走这方面的路子,下个版本大家会看到一个全新的动网


建立索引的详细方法和图例,请看:

1、将您的网站论坛数据库下载回来
2、用ACCESS2000打开该数据库
3、点开您要操作的表(具体要操作的表上面有介绍),见图1http://www.dvbbs.net/help/images/ac_1.jpg
4、点进编辑表结构窗口,见图2http://www.dvbbs.net/help/images/ac_2.jpg
5、点进编辑索引窗口,见图3http://www.dvbbs.net/help/images/ac_3.jpg
6、对索引进行添加和删除的操作(具体要删除和添加的索引上面有介绍),见图4http://www.dvbbs.net/help/images/ac_4.jpg





作者: 乏味    时间: 2003-4-30 08:13
标题: 让您的论坛变得快、更快、再快!
呵呵,以前的是ASP程序,现在的是cgi的了。

如果以后有机会,还是会改的。
作者: wdy9006    时间: 2003-5-6 21:25
标题: 让您的论坛变得快、更快、再快!
加点醋就不乏味 了。




欢迎光临 光电工程师社区 (http://bbs.oecr.com/) Powered by Discuz! X3.2