担心被骂,本不想写这篇文章。犹豫良久,最终还是决定写。希望能够帮助到一些朋友,认识到数据库索引正确设计的重要性。' N: _; Q2 S7 q" [) L' M1 H
5 [# B ~% V! X) a- _' p
由于我比较懒,就简单用文字描述一下,就懒得切图片证明了,懂技术的朋友可以自己测试一下,可证实我的测试结果是否真实。不懂技术的朋友信不信也无妨。
- O( N6 R# u& ?* C9 f9 S# v: C: C5 C+ ?8 n
测试程序:
4 y" D$ _* R1 u- d030ci.mmafn.com 248bk.mmg2g.net 774ke.mobilew.net 082pp.mobilew.net 748fm.mobo6.com 280or.mokezi.com 732pb.mrdxm.com 606tq.mrpao.com 735tg.mrpao.com 570ct.msd0755.com3 v& u3 m8 {( ^* U, h
CMS程序:帝国cms dedecms phpcms
0 z* S, z- Q+ U) r$ t' l" q3 y+ w+ _% [% q S* b* a9 @
论坛程序:discuz phpwind xiuno
& H& [7 M5 B4 ~, z* X) H6 L5 ?+ ~! q. h& U. V
负载测试结果:
! q+ B& c) |6 m" h* |# V3 C8 ?8 b: q5 u, z5 o5 B" J8 k
xiuno > discuz > phpwind > phpcms > ( 帝国cms ? dedecms)
* G: c: J: h" J' i! Z; p/ z& v; X- j. Z2 [" `2 u) t& u; C
从数据库设计来看(个人观点):3 S" h( }- Z8 H8 c# i) o
1 D; s& f$ g7 k1 H* H0 k
xiuno > (discuz 、 phpwind 、 phpcms) > (帝国cms 、 dedecms); v; K9 c1 z. D( R }2 s. S
% Z* Q9 Z" ^4 ^3 n* Pdedecms和帝国cms都是老牌的CMS了,从的数据库设计来看,不知是数据库设计者完全没有理解mysql索引的真谛,还是留一手以对高负载需求的用户收费改进?(希望不懂技术的朋友不要喷我,真正懂mysql索引的朋友可以自己看一下他们对索引的设计,虽然对于dedecms和帝国cms的作者来说,我只是一个晚辈,像您们这样有10多年开发经验的人,我比较尊敬,但我建议当前的dedecms和帝国cms数据库设计者还是再研究一下mysql索引吧,可以不相信我,但可以花点时间看看discuz 、phpwind的数据库设计吧,确实是比您们的好)。
0 V P* L' C% ^# m% H2 Z7 V# K$ j2 n' a3 X* Q* S& L( j
如果有幸帝国cms作者能看到此文,希望您再重新设计帝国cms架构吧,毕竟这些年您一直在改进帝国cms的负载能力,光是通过分表技术提升,没有真正用到索引来优化,真的不行的,如果用对了索引,性能还会有更大的提升。
9 Y2 O4 O0 S8 T. s$ A- m( t; X+ U; x+ f- r% V2 O" T
dedecms的创始人我算是和他认识,但现在dedecms却不是他的,比较遗憾,现在的dedecms这几年确实没多大变化,一直在打补丁,这样下去真是比较悲剧。8 w/ h# z: v. U' T6 ]
* c: \8 ?. o8 b0 R3 i, \我的测试环境:
1 y) f0 [" K' D2 A! T/ w
/ t$ x' H8 }. O6 wi3CPU 4G内存 1T硬盘 win7系统 apache 2.2 + mysql 5.0(普通环境没有优化过)2 b; c$ W# C7 V. Y9 B! G3 }
& x/ Z2 c# b4 e' h
测试方法:
: O+ ]: l/ C$ B8 h6 `) `7 R( F% d2 N! \
导入100万至1亿 不等数据,进行简单的访问测试
1 o$ | G8 Q5 W6 c* _' g8 N# D8 \' W* B2 k9 ]: u# v
我的导入方法:
+ ^* _7 U) V. [4 [* @
/ E9 Z9 T+ x0 j& Q根据各个程序的数据结构写出导入程序,- \0 ` C, F' b! W
* Q3 b- L8 @2 o) p1 F- D3 g8 V
1.先写一个PHP程序,将数据写入 e:/insert1.sql 这个文件,4 q+ s# |2 Z) E! M3 d: L
: z2 T) ?; u. K* H- c. r% \2.然后再通过 LOAD DATA local INFILE 'e:/insert1.sql' INTO TABLE `数据表名` character set 编码; 这种方式导入的,导入千W数据也就几分钟。
* B3 o; B7 |# {* V) O8 A6 X7 R& R- {+ r
1、帝国cms
% b% h' {9 [5 R! ?+ v8 ~4 G
9 z5 ?" Q; E1 K f3 D测试版本:EmpireCMS_7.0_SC_GBK (当前官方最新版)
( D9 T( d7 B: [) a% r* r3 y6 s* u( L5 n
先说说帝国cms,官方有一篇大数据测试贴(2千万数据、17.3GB数据库下帝国CMS超强生成速度 ),当年我看到这篇测试贴时,也觉得负载非常强大,但我测试后,令我失望了。
5 g5 B% c4 i8 {/ h5 B9 f+ n
, n. L+ ~% L( B7 G! Z/ `安装默认测试数据(共33篇新闻测试数据),首页改为动态首页 第一次访问0.670127010345459 第二次访问0.07926607131958. y- T, u! ]8 ^5 y7 V
4 G! a5 C S9 Q |