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

 找回密码
 立即注册
搜索

从两处设计看discuz开发人员需要注意的技术点

[复制链接]
mark35 发表于 2012-8-29 23:16:27 | 显示全部楼层 |阅读模式
本帖最后由 mark35 于 2012-12-3 19:47 编辑

有说凡所有相皆是虚幻,此说所有相皆是数据,有人的地方就有江湖,有数据的地方就有关系

Discuz从小小的论坛现在发展成一个庞大的门户系统,程序结构越发复杂庞大。数据库操作也从简单的CRUD变得日益复杂的关系查询。数据之间的关系变得越来越紧密,越来越复杂,此时功能的添加,架构的改动,数据库结构产生的影响也越发重要。如果项目主管,开发人员没有一定的数据库知识,没有对“数据”的一定了解,那么设计出来的东西要么不符合逻辑,要么不实用。

第一品:帖无所住,何生其心
discuz X2.5在设计上一个大变化是对于主题中跟帖被删除后其所占用楼层并不消失后续楼层并不自动变化楼层数值让楼层数字连续,而是跟帖内容显示成“无效楼层,该帖已经被删除”。
我估计此设计初衷是解决以前设计中删除跟帖后产生的一系列关联问题,假如删除了5楼回帖,那么删除前的6楼在5楼帖子删除后将会显示成5楼,其后所有跟帖的楼层也跟着减小一位。若后面有跟帖是引用5楼发布那么帖子中指向(原)5楼的url链接将会变得无效。dz开发人员觉得要解决这个逻辑问题,于是就在2.5上面实现了帖子删除保留楼层的功能。并且这个功能还可以与2.5另外一个新设计
post表的优化 问题:
高楼贴的性能问题 limit 187460, 20 方法:
增加position字段记录楼层,修改主键为:PRIMARY KEY  (tid, `position`)联合主键,其中position为auto_increment;
pid字段保留,仍然是auto_increment(单独的一个表),保持唯一,其值在一个单独的表中记录,保留此字段的主要目的是可以让原程序的基本不用做修改;
使用方法:
SELECT * FROM pre_forum_post WHERE tid=424 AND position>=$start AND position<$end ORDER BY position;
抢楼贴和普通的盖楼贴机制统一;

http://dev.discuz.org/wiki/index ... 4.E4.BC.98.E5.8C.96

搭配得天衣无缝。
可是,如果一个技术不符合实际那么无论它再怎么先进也是不适用的。借用某位网友对这个功能的截图:

invalid.png

无论你是论坛管理员还是会员,当你打开一个主题满屏都是“无效楼层,该帖已被删除”的提示,甚至翻过几页每页都是如此,你作何感想?

帖子既已被删除,过去的就过去了。固执己身不是法,你偏偏要为其强留印迹,虽然能让以后的恩怨能找到个节点,但这也是个结点,纠结的结——已经不存在的东西怎么能解决以后的问题呢,即便从以后跟帖的超链中找到这儿又能了解到什么呢?
无尽空虚带来的往往不是美好的回忆而是无尽的烦恼。

抽刀断水水更流,开发人员试图用一个无效楼层来解决一系列逻辑的,性能的问题。可适得其反。本该往生极乐的跟帖活生生被了留个尾巴在原地。无余涅槃不得,自然纠结其心,此无住,无中生有,生得观者烦心,管理者闹心,作者窝心……

帖有生灭,心无增减。去了的就让它去了吧,留下的即便也有丝丝藕连,也是有情众生之牵挂,为了忘却的纪念





第二品:评楼中楼,何降服其心



回复

使用道具 举报

魔法大师 发表于 2012-8-30 09:45:42 | 显示全部楼层
:L确实比较CD~~~
回复

使用道具 举报

小森我爱你 发表于 2012-8-30 10:03:13 | 显示全部楼层
楼上的头像
回复

使用道具 举报

彩色脚印 发表于 2012-8-30 10:05:50 | 显示全部楼层
总冠军。学习吧!   aiputuan.com
回复

使用道具 举报

magentoon 发表于 2012-8-30 13:28:39 | 显示全部楼层
已删除的楼层,留下痕迹而不影响其它楼层的URL和内容指向,应该说逻辑是正确的。如果在删除的楼层被后面的楼层挤占,和留下痕迹两者中选择,我宁可选择留下痕迹,而不是被挤占而造成后面所有楼层都混乱不堪。

只有一个问题:楼层留下的痕迹在数据库中不占太大字节吧?前台帖子中的痕迹是否可以隐藏?如果一不影响数据库,二不显示在前台,三不会造成之后的楼层混乱,那是不是就解决问题了?

怎么在前台隐藏已删除的楼层痕迹?
回复

使用道具 举报

 楼主| mark35 发表于 2012-8-30 13:39:38 | 显示全部楼层
本帖最后由 mark35 于 2012-12-3 19:48 编辑
magentoon 发表于 2012-8-30 13:28
已删除的楼层,留下痕迹而不影响其它楼层的URL和内容指向,应该说逻辑是正确的。如果在删除的楼层被后面的楼 ...

其实你的想法就一个:固定楼层
每个跟帖在生成时就分配楼层,即使前面有跟帖被删除了它的楼层编码都不会改变。然后页面按照以前的模式来显示、分页。
这时候楼层编号可能就不连续的,可能是1楼跟着的是100楼。这也完全解决了后面跟帖内容“我同意50楼的意见”在删帖后楼层编号改变问题
回复

使用道具 举报

magentoon 发表于 2012-8-30 14:06:27 | 显示全部楼层
mark35 发表于 2012-8-30 13:39
其实你的想法就一个:固定楼层
每个跟帖在生成时就分配楼层,即使前面有跟帖被删除了它的楼层编码都不会 ...

楼层不需要连续啊
天涯的楼层就是不连续的,如果2、3、4、5楼都是广告帖,最后显示的就是1楼紧跟着6楼,大家都明白中间四帖是广告被删掉了。
还有,天涯的页面也是固定的,比如每页100楼,如果删掉了20层的广告,这页就只剩80楼了。常常有些帖子被人恶意捣乱的,被删得每页只剩下两三帖的都有。这都无所谓啊,反而让大家明白:管理很严格,刷帖不管用。
回复

使用道具 举报

 楼主| mark35 发表于 2012-8-30 14:51:19 | 显示全部楼层
本帖最后由 mark35 于 2012-12-3 19:48 编辑
magentoon 发表于 2012-8-30 14:06
楼层不需要连续啊
天涯的楼层就是不连续的,如果2、3、4、5楼都是广告帖,最后显示的就是1楼紧跟着6楼, ...
还有,天涯的页面也是固定的,比如每页100楼,如果删掉了20层的广告,这页就只剩80楼了。常常有些帖子被人恶意捣乱的,被删得每页只剩下两三帖的都有。这都无所谓啊,反而让大家明白:管理很严格,刷帖不管用。

这其实和X2.5的处理是一样的,固定楼层。但天涯对于删除的楼层是彻底删除不显示的,X2.5偏偏要弄个占位楼层出来恶心大家
回复

使用道具 举报

magentoon 发表于 2012-8-30 15:11:29 | 显示全部楼层
mark35 发表于 2012-8-30 14:51
这其实和X2.5的处理是一样的,固定楼层。但天涯对于删除的楼层是彻底删除不显示的,X2.5偏偏要弄个占位 ...

隐藏不就行了?
回复

使用道具 举报

 楼主| mark35 发表于 2012-8-30 15:25:49 | 显示全部楼层
本帖最后由 mark35 于 2012-12-3 19:48 编辑
magentoon 发表于 2012-8-30 15:11
隐藏不就行了?

隐藏和显示在技术上其实差不多,主要是前台感觉不同。前者可能翻了几页一个帖子都没看到,而后者是看到无数的无效楼层。相比较而言前者心情会比后者好。其实这两种方式都是为了提升分页性能才做成这种的,否则按照一页固定楼层数量(比如20帖)来分页,那么在展示上就没有任何烦恼。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-11 10:30 , Processed in 0.148515 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

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