任何數據庫應用都存在分頁性能問題,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 字段保存每個帖子的樓號.//開源軟件:Vevb.com
forum_post 帖子表中多了一個position字段.
至此,你應該知道如何解決或處理該問題了,該問題在Discuz!X2.5及更高版本中很少遇見或幾乎不會遇見,原因上述內容已經提到.
擴展閱讀:
先不分析X2.5固定樓號的利弊,就談談從dz7.2到X2.5對樓層處理機制以及變化的優缺點.
dz7.2用 postposition表來實現搶樓樓號排序,順便也實現了對高樓層分頁性能優化;X2 postpositon表只用來搶樓,對于高樓層主題分頁優化沒看到相關處理;X2.5對post主表添加樓號字段來讓所有帖子的樓號固定,從而解決分頁性能問題,也一并解決了搶樓問題。
從搶樓為主,附加高樓層分頁到所有樓層分頁為主,附帶實現了搶樓,這個變化說明隨著discuz功能增加對于分頁性能的需求也變大,另外一個顯示原因是那些長期使用discuz系統的大站數據也越來越大,大于1000萬帖子的不是少數,他們對分頁性能提高的需求更迫切.
新聞熱點
疑難解答