Discuz教程网

从Discuz7.2/X3盖楼机制到X3.0盖楼抢楼合一分析Discuz的mysql技术包袱

[复制链接]
authicon rudsfwo 发表于 2012-7-26 05:20:20 | 显示全部楼层 |阅读模式
任何数据库应用都存在分页性能问题,mysql的性能问题似乎更大些。Discuz7.2(以下简称dz7.2)和Discuz X3(简称X3)的抢楼机制基本相同,抢楼与普通帖子(盖楼)是不同的处理机制。到了Discuz X3.0(简称X3.0)就把抢楼与盖楼机制统一。看似X3.0的处理方式更好,但实际上我认为因为缺乏DBA的支持,DZ因为mysql的弱智低能带来的称重包袱而导致开发正走向歧路。

先分析dz7.2/X3,X3.0各自的技术实现

dz7.2使用 postposition 表来保存后台“帖子优化”操作以及抢楼帖的信息,这两个功能使用的是同一个机制:


  • CREATE TABLE `NewTable` (
  • `tid` int(10) UNSIGNED NOT NULL ,
  • `position` int(10) UNSIGNED NOT NULL ,
  • `pid` int(10) UNSIGNED NOT NULL ,
  • PRIMARY KEY (`tid`, `position`)
  • )

复制代码
postposition.position与tid配合决定跟帖的列表顺序。当新抢楼跟帖入库时调用
    savepostposition($tid, $pid);

复制代码
来更新postposition表


  • function savepostposition($tid, $pid, $position = 0) {
  • global $db, $tablepre;
  • if(!$position) {
  • $pos = $db->result_first("SELECT max(position) FROM {$tablepre}postposition WHERE tid='$tid'");
  • $pos ++;
  • } else {
  • $pos = $position;
  • }
  • $res = $db->query("INSERT INTO {$tablepre}postposition SET tid='$tid', position='$pos', pid='$pid'");
  • return $res;
  • }

复制代码

X3的处理机制与dz7.2基本相同,不同之处在于取消了后台帖子优化操作, postposition表仅供抢楼帖使用,此表的position字段变成自增长字段:<div class="blockcode"><div id="code_sL4"><ol>
CREATE TABLE `NewTable` (
`tid` mediumint(8) UNSIGNED NOT NULL ,
`position` int(10) UNSIGNED NOT NULL AUTO_INCREMENT , --



上一篇:A5站长网章征军:百度联盟助力完成亿元交易
下一篇:【诚聘】北京中联科中医医院诚聘以下人才
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

1314学习网 ( 浙ICP备10214163号 )

GMT+8, 2025-5-5 11:53

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

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