擔(dān)心被罵,本不想寫這篇文章。猶豫良久,最終還是決定寫。希望能夠幫助到一些朋友,認(rèn)識到數(shù)據(jù)庫索引正確設(shè)計(jì)的重要性。
成都創(chuàng)新互聯(lián)公司專注于太和企業(yè)網(wǎng)站建設(shè),自適應(yīng)網(wǎng)站建設(shè),商城網(wǎng)站定制開發(fā)。太和網(wǎng)站建設(shè)公司,為太和等地區(qū)提供建站服務(wù)。全流程按需定制網(wǎng)站,專業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,成都創(chuàng)新互聯(lián)公司專業(yè)和態(tài)度為您提供的服務(wù)由于我比較懶,就簡單用文字描述一下,就懶得切圖片證明了,懂技術(shù)的朋友可以自己測試一下,可證實(shí)我的測試結(jié)果是否真實(shí)。不懂技術(shù)的朋友信不信也無妨。
測試程序:
CMS程序:帝國cms dedecms phpcms
論壇程序:discuz phpwind xiuno
負(fù)載測試結(jié)果:
xiuno > discuz > phpwind > phpcms > ( 帝國cms ? dedecms)
從數(shù)據(jù)庫設(shè)計(jì)來看(個(gè)人觀點(diǎn)):
xiuno > (discuz 、 phpwind 、 phpcms) > (帝國cms 、 dedecms)
dedecms和帝國cms都是老牌的CMS了,從的數(shù)據(jù)庫設(shè)計(jì)來看,不知是數(shù)據(jù)庫設(shè)計(jì)者完全沒有理解mysql索引的真諦,還是留一手以對高負(fù)載需求的用戶收費(fèi)改進(jìn)?(希望不懂技術(shù)的朋友不要噴我,真正懂mysql索引的朋友可以自己看一下他們對索引的設(shè)計(jì),雖然對于dedecms和帝國cms的作者來說,我只是一個(gè)晚輩,像您們這樣有10多年開發(fā)經(jīng)驗(yàn)的人,我比較尊敬,但我建議當(dāng)前的dedecms和帝國cms數(shù)據(jù)庫設(shè)計(jì)者還是再研究一下mysql索引吧,可以不相信我,但可以花點(diǎn)時(shí)間看看discuz 、phpwind的數(shù)據(jù)庫設(shè)計(jì)吧,確實(shí)是比您們的好)。
如果有幸帝國cms作者能看到此文,希望您再重新設(shè)計(jì)帝國cms架構(gòu)吧,畢竟這些年您一直在改進(jìn)帝國cms的負(fù)載能力,光是通過分表技術(shù)提升,沒有真正用到索引來優(yōu)化,真的不行的,如果用對了索引,性能還會有更大的提升。
dedecms的創(chuàng)始人我算是和他認(rèn)識,但現(xiàn)在dedecms卻不是他的,比較遺憾,現(xiàn)在的dedecms這幾年確實(shí)沒多大變化,一直在打補(bǔ)丁,這樣下去真是比較悲劇。
我的測試環(huán)境:
i3CPU 4G內(nèi)存 1T硬盤 win7系統(tǒng) apache 2.2 + mysql 5.0(普通環(huán)境沒有優(yōu)化過)
測試方法:
導(dǎo)入100萬至1億 不等數(shù)據(jù),進(jìn)行簡單的訪問測試
我的導(dǎo)入方法:
根據(jù)各個(gè)程序的數(shù)據(jù)結(jié)構(gòu)寫出導(dǎo)入程序,
1.先寫一個(gè)PHP程序,將數(shù)據(jù)寫入 e:/insert1.sql 這個(gè)文件,
2.然后再通過 LOAD DATA local INFILE 'e:/insert1.sql' INTO TABLE `數(shù)據(jù)表名` character set 編碼; 這種方式導(dǎo)入的,導(dǎo)入千W數(shù)據(jù)也就幾分鐘。
1、帝國cms
測試版本:EmpireCMS_7.0_SC_GBK (當(dāng)前官方最新版)
先說說帝國cms,官方有一篇大數(shù)據(jù)測試貼(2千萬數(shù)據(jù)、17.3GB數(shù)據(jù)庫下帝國CMS超強(qiáng)生成速度 ),當(dāng)年我看到這篇測試貼時(shí),也覺得負(fù)載非常強(qiáng)大,但我測試后,令我失望了。
安裝默認(rèn)測試數(shù)據(jù)(共33篇新聞測試數(shù)據(jù)),首頁改為動態(tài)首頁 第一次訪問0.670127010345459 第二次訪問0.07926607131958
我導(dǎo)入100W數(shù)據(jù)時(shí),數(shù)據(jù)庫大小3.6G,首頁第一次訪問182秒,第二次訪問155秒,我不知道當(dāng)時(shí)帝國cms作者測試時(shí),是否有測試過動態(tài)訪問首頁的時(shí)間。包括從6.0版起,每次更新都有說提升性能,但為何會這樣?
帝國CMS官方的測試帖,就是誤導(dǎo)人,忽悠人。
問題1.測試數(shù)據(jù)并沒有提到動態(tài)訪問首頁或是生成首頁。也沒有提到動態(tài)訪問列表頁,和生成列表頁。
問題2.測試統(tǒng)計(jì)的時(shí)間,也只統(tǒng)計(jì)了連接數(shù)據(jù)庫之后的執(zhí)行時(shí)間,并沒有加上連接數(shù)據(jù)庫的時(shí)間,這樣很容易誤導(dǎo)很多人,拿這個(gè)時(shí)間和別人統(tǒng)計(jì)了連接數(shù)據(jù)庫的時(shí)間比。這樣就差別大了。
問題3.每篇新聞的內(nèi)容很少也就幾行字。同時(shí)內(nèi)容頁模板,也非常簡單,生成出來的文件也非常小,只有3K。正常的文章,都是上10K至幾十K。
問題4.同時(shí)因?yàn)閜home_ecms_news表 id 為主鍵,讀取內(nèi)容時(shí),都是走的索引,所以動態(tài)訪問內(nèi)容頁,編輯內(nèi)容,生成內(nèi)容頁很快,都是理所當(dāng)然的。
問題5.測試時(shí)都是通過分表來測試的,在真實(shí)站長做網(wǎng)站,不可能一開始就把網(wǎng)站內(nèi)容分表。所以這和真實(shí)做站情況完全不一樣。
像官方這種測試貼,真是誤導(dǎo)人,而且還掛了幾年。對于不懂技術(shù)的人,就是一種誤導(dǎo),讓普通用戶盲目的崇拜。
2、dedecms
測試版本:DedeCMS V5.7 SP1_GBK正式版 (當(dāng)前官方最新版)
織夢CMS在知度CMS中一直公認(rèn)的負(fù)載性能最差的CMS,確實(shí)很差。
我導(dǎo)入100W數(shù)據(jù)時(shí),數(shù)據(jù)庫大小只有330M,首頁訪問已經(jīng)需要70幾秒-80幾秒才能訪問。
3、phpcms
測試版本:PHPCMS V9_GBK 正式版 (當(dāng)前官方最新版)
PHPCMS現(xiàn)在是由新的團(tuán)隊(duì)重新開發(fā),也是號稱高負(fù)載。
我導(dǎo)入100W數(shù)據(jù)時(shí),數(shù)據(jù)庫大小3G,首頁訪問需要20幾秒。
4、phpwind
測試版本:phpwind v9.0 UTF-8 正式版(當(dāng)前官方最新版)
phpwind以前和discuz比,速度上有優(yōu)勢,現(xiàn)在據(jù)說是全新開發(fā),新版確實(shí)做了很大的改變(以前一直是discuz追隨者,和discuz設(shè)計(jì)差別不是很大),現(xiàn)在這一變化,應(yīng)該值的贊揚(yáng),但現(xiàn)在速度上不如discuz了,以前網(wǎng)頁底部顯示執(zhí)行時(shí)間都去掉了。
我導(dǎo)入1000W數(shù)據(jù)時(shí),數(shù)據(jù)庫大小13G,
首頁第一次訪問8秒,第二次訪問0.70477390289307秒
帖子列表頁(默認(rèn)排序)0.2x-0.5x秒 但我采用按“最新發(fā)貼”排序時(shí),花了182秒才顯示出來(我看了數(shù)據(jù)庫設(shè)計(jì),因?yàn)橹蛔隽税础白詈蠡貜?fù)”的索引,“發(fā)帖時(shí)間”的排序都沒做索引,所以才很慢)
帖子內(nèi)容頁,沒填充多少回帖也沒具體測試
5、discuz
測試版本:Discuz_X2.5_SC_UTF8 Discuz_X3.0_SC_UTF8
dx3看來是dx2.5的加強(qiáng)版,從后臺、前臺設(shè)計(jì)看,都變化不大。數(shù)據(jù)庫架構(gòu)變化也不大。
我導(dǎo)入1000W數(shù)據(jù)時(shí),數(shù)據(jù)庫大小18G,
首頁0.05-0.06秒,(也沒太大測試價(jià)值,因?yàn)槎紱]讀到thread表)
帖子列表頁(默認(rèn)排序)0.07-0.09秒 但我采用按“發(fā)帖時(shí)間”排序時(shí),花了181秒才顯示出來(我看了數(shù)據(jù)庫設(shè)計(jì),因?yàn)橹蛔隽税础白詈蠡貜?fù)”的索引,“發(fā)帖時(shí)間”的排序都沒做索引,所以才很慢)
帖子內(nèi)容頁,(沒填充多少回帖也沒具體測試)
6、xiuno
測試版本:xiuno bbs 2.02 UTF8
我導(dǎo)入1000W數(shù)據(jù)時(shí),數(shù)據(jù)庫大小15G
首頁0.03-0.05秒
帖子列表頁0.03-0.05秒(回貼排序) 0.01-0.03秒(發(fā)帖排序)
帖子內(nèi)容頁0.03-0.05秒 (沒填充多少回帖也沒具體測試翻頁)
我導(dǎo)入1億數(shù)據(jù)時(shí),數(shù)據(jù)庫填充到215G
首頁0.05-0.08秒
帖子列表頁0.05-0.08秒(回貼排序) 0.03-0.05秒(發(fā)帖排序)
帖子內(nèi)容頁0.05-0.08秒 (沒填充多少回帖也沒具體測試翻頁)
總結(jié):
xiuno 雖然負(fù)載很高,但是功能上有很大的控制,去掉了很多可能影響到性能的功能,功能方面我覺得要是能有一個(gè)像wordpress這樣的一個(gè)平臺來彌補(bǔ),那將會有非常大的優(yōu)勢。
discuz 雖然沒做深入測試,不過已經(jīng)可見負(fù)載上面還是有缺陷的,同時(shí)thread表設(shè)計(jì)為 tid mediumint(8) UNSIGNED 所以大數(shù)值也就16777215,所以他的設(shè)計(jì)也并沒有往更高考慮。
phpwind 這次的新版本的改變,證明了他們的決心,要和discuz走不同的路,也能看出來他們更注重用戶體驗(yàn)方面。程序性能已經(jīng)次之。
phpcms 性能是比以前提升了,但是用戶體驗(yàn)我是感覺不太好。不過能夠說明CMS性能方面不如BBS程序。因?yàn)榕判蚍绞蕉?,而且同一個(gè)頁面列表也比論壇的多,所以讓CMS性能不如BBS。
帝國cms 雖然程序官方一直強(qiáng)調(diào)負(fù)載,但真還不如phpcms,光是通過分表提高負(fù)載,真不是一個(gè)好辦法。我個(gè)人愚見,程序負(fù)載高不高,第一步應(yīng)該是正確設(shè)計(jì)索引,索引都沒設(shè)計(jì)對,就用分表來解決,而且還要站長手動設(shè)置,完全增加使用難度。
dedecms 雖然用戶量非常大,但數(shù)據(jù)庫設(shè)計(jì)真不好,不但索引沒設(shè)計(jì)對,而且還沒分表,而且也能看出dedecms并沒有考慮做高負(fù)載,畢竟上百W級數(shù)據(jù)的網(wǎng)站很少。