- 论坛徽章:
- 0
|
请问在论坛里怎么计算每个帖子的点计量的??
大家好,
neoanthropic的一篇贴子看来引起一番唇枪舌剑,两位仁兄各执一词都有一定道理,我这里也补充一下,象贴子计数、网页点击量等涉及到“大量”计数单位的问题,目前普遍采用数据库。我于是提出几个焦点:
A》凡涉及大量需要计数的对象只可能考虑在数据库里实现;
B》update包括一次select和一次I/O;
C》同时的多个请求可以在单独进程执行;
D》查询请求的执行通过“游标”进行,每个查询ID都有自己的游标,游标实质是一个指针,update操作通过当前指针进行。
如果不同意上述几点,您不必看下面的文章。
对A的说明:
如果只是少量计数单位如部分网页需要计数点击量,完全可以用读写文件来实现,不必大动干戈用数据库,但对于贴子而言,任何一篇贴子均要计数,从几十万到成百上万的贴子规模来看,用读写文件显然是不明智的,又因为贴子都是放在库里,所以只考虑用数据库实现。
为简化问题,可以假定现在只要求找到一个贴子并显示贴子内容并且还要更新点击量字段,于是我们向DB提交Select,游标指针定位于该记录,于是取出用于前台的数据,并update点击率字段,前面已说明update包括select过程和I/O过程,而此时的游标正指向该记录,所以不必再select,直接I/O,到此,问题的焦点集中在select和I/O谁开销大的问题。
I/O的开销,包括I/O队列等待、磁盘寻道、读写指定扇区的时间, 大家应该很清楚I/O时间几乎是固定不变,这里无需多说,数据库服务器一般都是高速SCSI接口,读写速度是普通IDE接口(10ms以下)的n倍以上,再看select的开销,容易理解的是:随着贴子数的迅速增加,哪怕最顶尖的服务器,从几十万、几百万的贴子中进行一次select至少在10~100ms级,各位可以亲自检测一下自己的服务器响应时间,由此得出结论是
select的开销>;>;I/O开销。
即update开销远小于select开销(条件是先进行select),这个结论应该可以说明楼主所述的问题,关于这个问题希望到此为止,再进行下去无非是口水战。也希望借这个机会能交一些朋友,共同进步。 |
|