Originally posted by faimond at 2004-9-24 01:54 PM:
至少我不会在我不清楚的事上下断论的,难不成你也清楚技术内容?如果你清楚就不会说出纯粹为减少queries的错误了。
phpwind 确实宣扬过 queries, 只不过当年他宣扬的时候阁下估计还不知 phpwind 为何物, 没有看到, 但别人却看到了而已.
phpwind 的在线文件是这样处理的:
每一行都是定长数据, 通过一个 offset 值来实现查找, 而 offset 值是已知的, 所以更新和读取单个用户的在线纪录, 这里不会出现什么效率问题.
关键在于显示在线列表那里, 我们知道, 如果一行是 50 byte, 假设一个大型论坛有 6000 人在线 (这个值在门户网站, 学校的 bbs 上是很可能的), 那么就需要 6000 * 50 个 bytes 来记录, 大概会生成一个 300k 的文件.
显示在线列表不像更新操作只读一个记录, 所以 offset 在此无效, 这里需要用 file() 或者 fread + explode() 全部读取 300k 的文件并拆分成数组, 然后筛选出 lastvisit 还有效的纪录. 而经过统计, 光读一个 80k 的文件, 一般就需要 0.03 ~ 0.06 秒, 300K 的读取是什么数量级可想而知, 况且接下来还要分析成数组, 并且逐个判断 lastvisit, 再加上我们假设这是个人很多的论坛, 必定时刻都在刷新在线记录, 以这种方式存储的效率如何, 结果是显而易见的.
不知阁下还有什么问题 ?
[ Last edited by LostButterfly on 2004-9-24 at 09:28 PM ] |