forum_post表是存儲(chǔ)主題和回復(fù)內(nèi)容的表,是discuz系統(tǒng)中存儲(chǔ)內(nèi)容最多的一個(gè)表。對(duì)于內(nèi)容較多的大型站點(diǎn)來說,隨著這個(gè)表的逐漸增大,已經(jīng)嚴(yán)重影響了站點(diǎn)的打開速度。Discuz!系統(tǒng)本身已經(jīng)有了帖子分表功能,但是每次都要手動(dòng)操作分表,過一段時(shí)間之后主表(forum_post)變的很大。本文介紹一種通過簡單修改數(shù)據(jù)表和系統(tǒng)程序的方法實(shí)現(xiàn)發(fā)帖回帖自動(dòng)分表存儲(chǔ)。
執(zhí)行思路:將forum_post平均分成10份,分別為pre_forum_post/pre_forum_post_1/pre_forum_post_2/…/pre_forum_post_9,每次發(fā)帖回帖之后根據(jù)帖子tid按10取余數(shù)分別存在不同的表中。
具體執(zhí)行步驟:
1、后臺(tái)->全局,關(guān)閉網(wǎng)站。備份pre_forum_post表和pre_forum_thread表;
2、將數(shù)據(jù)庫中的pre_forum_post連續(xù)復(fù)制10次,分別命名為pre_forum_post/pre_forum_post_1/pre_forum_post_2/…/pre_forum_post_9;
3、分別執(zhí)行如下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、再執(zhí)行如下sql語句
update pre_forum_thread set posttableid=tid%10;
5、修改系統(tǒng)文件sourceclassmodelmodel_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、后臺(tái),站長,帖子分表,點(diǎn)擊更新備注信息。
6、后臺(tái),工具,更新緩存。
修改完成!
注意此方法修改后,所有通過discuz!的帖子發(fā)布和回復(fù)功能產(chǎn)生的內(nèi)容都是自動(dòng)分表存儲(chǔ),但是要注意如果用了采集或其他插件發(fā)布帖子和回復(fù)請(qǐng)記得修改對(duì)應(yīng)的程序。