Discuz!官方免费开源建站系统

 找回密码
 立即注册
搜索

看了大家关于论坛执行效率的讨论帖子.. 一些不得不说的话

 关闭 [复制链接]
LostButterfly 发表于 2004-9-23 08:54:17 | 显示全部楼层 |阅读模式
对于最终用户 - end users 来说, 评估论坛效率主要包含两个方面, 一是执行时间 Process Time, 就是下面 0.0x 那个标注, 二是数据库请求次数, 及下面 4 queries 那个标注.

执行时间只和服务器有关, 和用户的网络状况无关, 无论你是用 56K 还是 T1 专线上论坛, 都不会影响执行时间.

执行时间 Process Time 又基本分为三个主要组成部分:

(1) PHP 脚本执行时间
(2) mysql 数据库请求往返的开销
(3) 页面输出时间.

这里首先阐明两件实事:

一. 某些论坛产品会在执行时间上作假 (故意的或者非故意的), 没有包括 (3), 或者只包括了 (1) 的一部分, 这样执行时间看起来会很快, 但是实际上效率却很低. 这里举一个例子, Celeste 2003 / 2004 就属于这种情况. (非故意行为, 由于其采用全推式的模板系统, 无法正确统计指标 (3))

二. 如果全部统计了以上三项指标, 一个正常页面在 1.5 G 机器上的执行时间极限就是 0.01 左右, 如果某个论坛标注出 0.003 这样的执行时间, 除了作假, 我们只能假设他是在 "深蓝" 或者 "银河" 系列超级服务器上跑出来的了..

话说回来, 以上三项指标中, 第二项非常重要, 你的论坛能否支撑数千人甚至上万人很大程度上取决于这个指标. 而 (2) 又和第一段中所说的数据库请求次数 ? queries 有关. 如果某个经常打开的页面 (例如看贴子) 其执行时间为 0.008xxx, 但是却有 10 多个 queries. 那我保证在人多的情况下这个页面效率下降是最迅速的.

一台 P3 * 2 的机器能够容忍的 mysql 请求总量大约为平均一秒钟 200 次(SQL 平均复杂程度下), 这时候已经非常慢了. 一秒钟 200 次是个什么概念呢, 大约就是 1000 个人在线的 vbb 论坛 (30 分钟统计) 的极限 query 次数. 所以我们说 vbb 的效率很差就是这个原因, 他主要页面的 query 次数大约都是以 10 为基数, 如果每一秒钟内都有 20 个人同时刷新页面, 那服务器卡是意料之中的事情.

那么是否数据库请求的 query 次数越少就一定越好呢 ?

这不一定, 他还要取决于 query 的复杂程度, 比如做一个查看贴子的动作, 论坛会请求一个 SQL 如下, SELECT a FROM b LEFT JOIN c LEFT JOIN d LEFT JOIN e..... WHERE... 可以看出这个 query 中有很多 LEFT JOIN 语句, 做了很多表的连接, 连接越多, 速度越慢, vbb 大约会做出 5 ~ 7 个 LEFT JOIN, celeste 2004 是 4, 5 个, 国内的论坛像 phpwind, discuz 似乎都是 2 ~ 4 个, 效率差距一看即可明白.

一个系统的设计是一件很科学的事情, 要在 query 次数和各类查询复杂程度上做一个平衡.

我个人认为像 phpwind 论坛那样过渡宣扬 query 次数少的行为没有意义. 首先撇开 phpwind 写得让业内人士笑掉大牙的代码格式不说, 为了减少 query 次数, phpwind 用了一种文本数据库格式, 实际上就是以读磁盘文件来代替 mysql query, 当磁盘文件不大的时候效率尚可, 当文件很大的时候惨不忍睹. 例如 phpwind 用文本来记录论坛在线列表(非索引模式), 若一个论坛只有 200 人在线, 那么这个文本大约就有 200 行, 读取是很快的. 但如果一个论坛有 6000 人在线呢 ? 呵呵, 不知道原作者有没有考虑到这个问题 ?

本人参与管理大型论坛很久了, 为了效率问题, 先后换过很多论坛系统(掏钱买的正版), 对其中的利弊深有体会, 对于目前流行的 php 论坛, 从用户和程序员两个角度来说, 比较欣赏的只有两个, 一个是 discuz  (代码格式不错, 看起来舒服, 有一些先进的理念, 速度也快), 另外一个是 celeste 2004 (核心代码赏心悦目, oop 思想十分优越, 可惜 bug 太多, 速度稍慢), 其余碌碌, 尤其是那个 xxx wind.. 简直不入法眼.. 呵呵.. (很难想象缩进书写都不规范的程序还能拿出来卖)

[ Last edited by LostButterfly on 2004-9-23 at 12:04 PM ]
回复

使用道具 举报

 楼主| LostButterfly 发表于 2004-9-23 08:58:26 | 显示全部楼层
建议大家购买论坛产品的时候不只以标注的效率来评判. 因为那个标注不一定是真实的 ! (我甚至可以通过一些手段把执行时间缩减到 0.005 以下的级别, 但有什么用呢) 一个商业化论坛系统的专业程度, 关键要看其核心代码的质量和作者的编程理念 !

[ Last edited by LostButterfly on 2004-9-23 at 09:00 AM ]
回复

使用道具 举报

Crossday 发表于 2004-9-23 10:11:52 | 显示全部楼层
楼主看来很专业 绝大部分观点是一语中的 也是我们所认同的 并有深刻体会的

说实话当年我冥思苦想了的半天的cache.php,sessions等至今仍是Discuz!里最核心和最先进的技术之一二 之后升级版本时越发的感觉到这个机制的优越和潜在的扩展能力。如果要我们自己评价 Discuz!在理念和思路上有所创新,数据结构也是花了很大功夫去设计,弱势在于程序逻辑性和封装方面不如IPB和旅行的产品。

我们现在的重点(就是4的重点)是力求在数据结构上有所突破,不片面追求速度,但尽量通过减少锁表而增强负载能力,同时在易用性和人性化的功能上下了一些功夫。
回复

使用道具 举报

1111 发表于 2004-9-23 10:37:45 | 显示全部楼层
其实脚本执行时间只要把 connect 到输出结束时算上就都大同小异了, 记得当时看 celeste 时在NT上显示速度一眼就看出少了 connect 时间!
不过对 mysql  query 数 却有些片面 , 以次数和 sql 语句复杂程度而定只能说对了 2/3
回复

使用道具 举报

 楼主| LostButterfly 发表于 2004-9-23 11:37:42 | 显示全部楼层
关于 sql 的复杂程度的开销有一些基本计算公式, 例如 io + 请求页开销等, 我记忆不太清楚了, 具体计算的时候需要查找一些原版的数据库系统书籍.

因为我们用的是 mysql, 不是 oracle, SQL 语句一般就几行, LEFT JOIN 只是其中一个比较有代表性的例子, 不知道 4 楼指的是哪个部分 (如果还涉及到数据表索引的运用等等那就另当别论了).

[ Last edited by LostButterfly on 2004-9-23 at 11:39 AM ]
回复

使用道具 举报

paulgao 发表于 2004-9-23 11:47:05 | 显示全部楼层
“一个系统的设计是一件很科学的事情, 要在 query 次数和各类查询复杂程度上做一个平衡.”
赞同楼主说得,query刻意的少,并不一定是好事,我是认为相对减少每一条QUERY的执行时间,更应该说是锁表的时间(MYSQL是表级锁),应该是最核心的思想,尤其在多表查询的情况,更要考虑,如果有QUERYCACHE的话,也可以适当的一拆多方式。当然前提是在数据库记录和查询次数比较多的时候来进行测试,或者实测,或者模拟,当然实测最好。表比较小、查询比较少的时候,是看不出SQL语句的好坏的,呵呵。

[ Last edited by paulgao on 2004-9-23 at 11:50 AM ]
回复

使用道具 举报

hehechuan 发表于 2004-9-23 11:50:20 | 显示全部楼层
nod 说的不错,0.01和0.09秒的执行时间对于用户没什么区别

discuz目前在系统资源节省方面做的不错了,我觉得可以“浪费”一些系统资源增强一些使用功能,当然这个功能不是说那些Hack。

vbb确实要更消耗资源,不过他的功能的确是十分强大的。不过老外用vbb的服务器好像也都挺牛的,我在vbb官方论坛看到过有用4颗CPU+7G内存来跑论坛了。 :cool: :cool:
回复

使用道具 举报

paulgao 发表于 2004-9-23 11:53:19 | 显示全部楼层
Originally posted by hehechuan at 2004-9-23 11:50 AM:
nod 说的不错,0.01和0.09秒的执行时间对于用户没什么区别

discuz目前在系统资源节省方面做的不错了,我觉得可以“浪费”一些系统资源增强一些使用功能,当然这个功能不是说那些Hack。

vbb确实要更消耗资源 ...

对用户没区别,但是对站长有区别。而这里大部分都是站长,呵呵。
只是确实奇怪,这就要问大C改动什么了,呵呵。
但是关键还是要系统综合能力的,呵呵。

[ Last edited by paulgao on 2004-9-23 at 11:54 AM ]
回复

使用道具 举报

 楼主| LostButterfly 发表于 2004-9-23 11:58:29 | 显示全部楼层
Originally posted by Crossday at 2004-9-23 10:11 AM:
说实话当年我冥思苦想了的半天的cache.php,sessions等至今仍是Discuz!里最核心和最先进的技术之一二 之后升级版本时越发的感觉到这个 ...


我个人比较看好 diz 的模板程序, 关于拉式的模板类可以写个 100k, 一次编译, 二次编译等等非常复杂, 没有必要. diz 的 template 写得简洁有效, 对论坛系统来说再合适不过, 可以做教材了.

至于 cache, 从当年的角度来看不能不说是先进技术的运用, 随着 php 更高版本的出现, 最终包含了 var_export 这个函数, 现在 cache 的实现越来越简便. 查找一些英文 php 论坛看到关于 cache 的讨论也多了, 不知大 C 对 cache 还有什么新的理解 ? (呵呵.. 如果是商业机密就免了)

关于旅行的程序, 前不久和他聊天得知他开发了一套全文搜索系统, 尝试了一下确实厉害. 他对编成思想和算法的理解令人佩服. 可惜开发出来的论坛作为最终成品还是欠缺了一些, 主要倒不是速度慢的问题, 而是没有充分地考虑到用户的多样性, 使用的灵活性, 很多地方如果要自己 hack, 关联太多, 工程大矣...

关于程序的封装和数据结构, 由于 php 是 script 类语言, 结构松散, 还要考虑到效率的问题, 现在还没有什么权威的 PHP 编成思想类的书, 到底从逻辑上如何实现才最平衡现在还不敢去研究.
回复

使用道具 举报

 楼主| LostButterfly 发表于 2004-9-23 12:02:13 | 显示全部楼层
Originally posted by hehechuan at 2004-9-23 11:50 AM:
nod 说的不错,0.01和0.09秒的执行时间对于用户没什么区别

discuz目前在系统资源节省方面做的不错了,我觉得可以“浪费”一些系统资源增强一些使用功能,当然这个功能不是说那些Hack。

vbb确实要更消耗资源 ...


哈哈, vbb 的确是每个论坛作者都要学习的东西, 他至少代表着一个领域的领先, 程序考虑得也很完善, vbb 3 的一些思想还是不错的.

4CPU  7G RAM 我看只算是个人服务器的极品, 呵呵.
oracle 一开动, 转眼之间 4G 没了..

[ Last edited by LostButterfly on 2004-9-23 at 12:12 PM ]
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|Discuz! 官方站 ( 皖ICP备16010102号 )star

GMT+8, 2025-12-12 02:19 , Processed in 0.119905 second(s), 14 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表