discuz楼层错乱一楼不显示处理
discuz楼层错乱1楼主题内容不显示问题解决
任何数据库应用都存在分页性能问题,mysql的性能问题似乎更大些。Discuz7.2(以下简称dz7.2)和Discuz X2(简称X2)的抢楼机制基本相同,抢楼与普通帖子(盖楼)是不同的处理机制。到了Discuz X2.5(简称X2.5)就把抢楼与盖楼机制统一。
引用来源:X2.5的新程序架构
由以上信息可以看出Discuz!X2.0及更早版本与Discuz!X2.5对抢楼及盖楼的机制并不相同、数据结构也相应的存在差距。为了解决这一问题,我们同时首先需要了解下discuz数据表以下几个常见字段:
tid:主题id
pid:帖子id
position:显示位置
first:是否是首贴
Discuz!X2.0及更早版本主题抢楼盖楼数据表:
forum_post 帖子表
forum_postposition帖子排楼顺序表,用来存储论坛帖子的排序,该表采用 (tid, position) 两个字段联合做自增主键,在高并发情况下,效率自然不高。(题外话,补充一点:该表不宜修改为InnoDB,建议新增了一列自增ID做主键,该主键和业务完全没有任何关系,仅用做自增主键。)
forum_postposition表的存储内容格式:
在抢楼帖中假设forum_post表中first字段为1且该帖pid与forum_postposition表中pid相等且forum_postposition表中position字段为1对应则为1楼。
Discuz!X2.5及更高版本主题抢楼盖楼数据表:forum_postpositin帖子排楼顺序表:取消了forum_postpositin表,在 post主表中增加 position 字段保存每个帖子的楼号。
forum_post 帖子表中多了一个position字段,如图:
至此,你应该知道如何解决或处理该问题了。该问题在Discuz!X2.5及更高版本中很少遇见或几乎不会遇见,原因上述内容已经提到。
扩展阅读
先不分析X2.5固定楼号的利弊,就谈谈从dz7.2到X2.5对楼层处理机制以及变化的优缺点。
dz7.2用 postposition表来实现抢楼楼号排序,顺便也实现了对高楼层分页性能优化;X2 postpositon表只用来抢楼,对于高楼层主题分页优化没看到相关处理;X2.5对post主表添加楼号字段来让所有帖子的楼号固定,从而解决分页性能问题,也一并解决了抢楼问题。
从抢楼为主,附加高楼层分页到所有楼层分页为主,附带实现了抢楼,这个变化说明随着discuz功能增加对于分页性能的需求也变大,另外一个显示原因是那些长期使用discuz系统的大站数据也越来越大,大于1000万帖子的不是少数,他们对分页性能提高的需求更迫切。
看似Discuz!X2.5及更高版本的处理方式更好,但或许是因为缺乏DBA的支持,Discuz因为mysql的弱智低能带来的称重包袱而导致开发正走向歧路,具体可以参阅Discuz上这篇帖子《从Discuz7.2/X2盖楼机制到DiscuzX2.5盖楼抢楼合一分析Discuz!X的mysql技术包袱》。
对dz很有研究呀
@52ling.cn
只是用用啊 哪有神马研究