Discuz!教程之大型Discuz!论坛站点帖子表forum_post分表方案优化

159 篇文章 3 订阅
144 篇文章 1 订阅

forum_post表是存储主题和回复内容的表,是discuz系统中存储内容最多的一个表。对于内容较多的大型站点来说,随着这个表的逐渐增大,已经严重影响了站点的打开速度。Discuz!系统本身已经有了帖子分表功能,但是每次都要手动操作分表,过一段时间之后主表(forum_post)变的很大。本文介绍一种通过简单修改数据表和系统程序的方法实现发帖回帖自动分表存储。
执行思路:将forum_post平均分成10份,分别为pre_forum_post/pre_forum_post_1/pre_forum_post_2/.../pre_forum_post_9,每次发帖回帖之后根据帖子tid按10取余数分别存在不同的表中。
具体执行步骤:
1、后台->全局,关闭网站。备份pre_forum_post表和pre_forum_thread表;
2、将数据库中的pre_forum_post连续复制10次,分别命名为pre_forum_post/pre_forum_post_1/pre_forum_post_2/.../pre_forum_post_9;
3、分别执行如下sql语句
delete from pre_forum_post where tid%10!=0;
delete from pre_forum_post_1 where tid%10!=1;
delete from pre_forum_post_2 where tid%10!=2;
delete from pre_forum_post_3 where tid%10!=3;
delete from pre_forum_post_4 where tid%10!=4;
delete from pre_forum_post_5 where tid%10!=5;
delete from pre_forum_post_6 where tid%10!=6;
delete from pre_forum_post_7 where tid%10!=7;
delete from pre_forum_post_8 where tid%10!=8;
delete from pre_forum_post_9 where tid%10!=9;
4、再执行如下sql语句
update pre_forum_thread set posttableid=tid%10;
5、修改系统文件source\class\model\model_forum_thread.php(修改前记得备份)
找到代码
$this->tid = C::t('forum_thread')->insert($newthread, true);
在这一行代码下方加入
$posttableid=($this->tid)%10;
if($posttableid){
    C::t('forum_thread')->update($this->tid, array('posttableid' =>$posttableid));
}
5、后台,站长,帖子分表,点击更新备注信息。
6、后台,工具,更新缓存。
修改完成!
注意此方法修改后,所有通过discuz!的帖子发布和回复功能产生的内容都是自动分表存储,但是要注意如果用了采集或其他插件发布帖子和回复请记得修改对应的程序。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要将历史按月份进行分表,可以按照以下步骤进行操作: 1. 创建分表规则:确定每个分表名和结构。对于按月份进行分表,可以使用年份和月份作为分表的标识。例如,可以创建名为 `table_2022_01`、`table_2022_02`、`table_2022_03` 的分表来存储每个月的数据。 2. 创建触发器或定时任务:为了自动地将新数据插入到正确的分表中,可以创建触发器或定时任务来监控数据的插入,并根据数据的日期信息将其插入到对应的分表中。例如,可以创建一个每天执行一次的定时任务,将当天的数据插入到对应的月份分表中。 3. 迁移历史数据:将现有的历史数据根据分表规则迁移到相应的分表中。可以使用INSERT INTO SELECT语句或其他数据迁移工具来完成这一步骤。 4. 查询数据时动态选择分表:在应用程序中,当查询历史数据时,需要动态选择要查询的分表。可以根据查询的日期范围来确定需要查询的分表,然后在查询语句中指定相应的分表名。例如,如果要查询2022年1月份的数据,可以构建查询语句 `SELECT * FROM table_2022_01 WHERE date >= '2022-01-01' AND date <= '2022-01-31'`。 5. 定期维护:定期检查历史数据的增长情况,并根据需要创建新的分表。可以使用自动化脚本来完成这一步骤。例如,每个月初可以自动创建新的分表来存储新的月份数据。 请注意以下事项: - 索引:确保每个分表都有适当的索引来支持查询操作。 - 备份和恢复:确保备份和恢复历史数据分表的过程是可行的。 - 查询性能:分表后,查询历史数据可能需要跨多个进行联合查询,需要评估查询性能并进行必要的优化。 根据上述步骤,你可以按照月份将历史进行分表,并在应用程序中根据日期动态选择对应的分表进行操作。这样可以更好地管理历史数据,提高查询性能和管理效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值