擔心被罵,本不想寫這篇。猶豫良久,最終還是決定寫。希望能夠幫助到一些朋友,認識到數據庫索引正確設計的重要性。
由于我比較懶,就簡單用文字描述一下,就懶得切圖片證明了,懂技術的朋友可以自己測試一下,可證實我的測試結果是否真實。不懂技術的朋友信不信也無妨。
測試程序
CMS程序 帝國cmsdedecmsphpcms
論壇程序 discuzphpwindxiuno
負載測試結果
xiunodiscuzphpwindphpcms帝國cms?dedecms
從數據庫設計來看個人觀點
xiunodiscuz、phpwind、phpcms帝國cms、dedecms
dedecms和帝國cms都是老牌的CMS了,從的數據庫設計來看,不知是數據庫設計者完全沒有理解mysql索引的真諦,還是留一手以對高負載需求的用戶收費改進?希望不懂技術的朋友不要噴我,真正懂mysql索引的朋友可以自己看一下他們對索引的設計,雖然對于dedecms和帝國cms的作者來說,我只是一個晚輩,像您們這樣有10多年開發經驗的人,我比較尊敬,但我建議當前的dedecms和帝國cms數據庫設計者還是再研究一下mysql索引吧,可以不相信我,但可以花點時間看看discuz、phpwind的數據庫設計吧,確實是比您們的好。
如果有幸帝國cms作者能看到此文,希望您再重新設計帝國cms架構吧,畢竟這些年您一直在改進帝國cms的負載能力,光是通過分表技術提升,沒有真正用到索引來優化,真的不行的,如果用對了索引,性能還會有更大的提升。
dedecms的創始人我算是和他認識,但現在dedecms卻不是他的,比較遺憾,現在的dedecms這幾年確實沒多大變化,一直在打補丁,這樣下去真是比較悲劇。
我的測試環境
i3CPU4G內存1T硬盤win7系統apache2.2+mysql5.0普通環境沒有優化過
測試方法
導入100萬至1億不等數據,進行簡單的訪問測試
我的導入方法
根據各個程序的數據結構寫出導入程序,
1.先寫一個PHP程序,將數據寫入e:insert1.sql這個文件,
2.然后再通過LOADDATAlocalINFILE'e:insert1.sql'INTOTABLE`數據表名`characterset編碼;這種方式導入的,導入千W數據也就幾分鐘。
1、帝國cms
測試版本 EmpireCMS_7.0_SC_GBK當前最新版
先說說帝國cms,有一篇大數據測試貼2千萬數據、17.3GB數據庫下帝國CMS超強生成速度,當年我看到這篇測試貼時,也覺得負載非常強大,但我測試后,令我失望了。
安裝默認測試數據共33篇新聞測試數據,改為動態第一次訪問0.5459第二次訪問0.958
我導入100W數據時,數據庫大小3.6G,第一次訪問182秒,第二次訪問155秒,我不知道當時帝國cms作者測試時,是否有測試過動態訪問的時間。包括從6.0版起,每次更新都有說提升性能,但為何會這樣?
帝國CMS的測試帖,就是誤導人,忽悠人。
問題1.測試數據并沒有提到動態訪問或是生成。也沒有提到動態訪問列表頁,和生成列表頁。
問題2.測試統計的時間,也只統計了連接數據庫之后的執行時間,并沒有加上連接數據庫的時間,這樣很容易誤導很多人,拿這個時間和別人統計了連接數據庫的時間比。這樣就差別大了。
問題3.每篇新聞的內容很少也就幾行字。同時內容頁模板,也非常簡單,生成出來的文件也非常小,只有3K。正常的,都是上10K至幾十K。
問題4.同時因為phome_ecms_news表id為主鍵,讀取內容時,都是走的索引,所以動態訪問內容頁,編輯內容,生成內容頁很快,都是理所當然的。
問題5.測試時都是通過分表來測試的,在真實站長做,不可能一開始就把內容分表。所以這和真實做站情況完全不一樣。
像這種測試貼,真是誤導人,而且還掛了幾年。對于不懂技術的人,就是一種誤導,讓普通用戶盲目的崇拜。
2、dedecms
測試版本 DedeCMSV5.7SP1_GBK正式版當前最新版
織夢CMS在知度CMS中一直公認的負載性能最差的CMS,確實很差。
我導入100W數據時,數據庫大小只有330M,訪問已經需要70幾秒80幾秒才能訪問。
新聞熱點
疑難解答