担心被骂,本不想写这篇文章。犹豫良久,最终还是决定写。希望能够帮助到一些朋友,认识到数据库索引正确设计的重要性。2 L0 R& w2 k# i4 Y* V( j
$ I+ E; c& i, h/ B
由于我比较懒,就简单用文字描述一下,就懒得切图片证明了,懂技术的朋友可以自己测试一下,可证实我的测试结果是否真实。不懂技术的朋友信不信也无妨。0 c6 l# U4 h7 S. x
; a/ P+ W, ^6 L% w7 R2 l" h测试程序:
$ x2 q5 w0 f; }7 C$ A, b* f; d! u- k* @030ci.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.com5 K1 R9 I7 }5 R9 f2 _8 T: T
CMS程序:帝国cms dedecms phpcms
- Y5 z) G; O/ L8 j4 d8 s5 w. }- j7 L5 v
论坛程序:discuz phpwind xiuno
. D2 h6 H' U- I6 f s8 M' b* u* r+ Q4 Q |; M) E' D# J/ h
负载测试结果:: A" y" j% L w$ \
3 s0 l! y w% i+ K5 w7 m3 gxiuno > discuz > phpwind > phpcms > ( 帝国cms ? dedecms)/ M; N9 D, [ u, l
! r1 |) I# k3 Z; z7 @/ O0 D' W
从数据库设计来看(个人观点):
- g* V& D" }0 ? K) c) d( [
x2 i7 _* E4 ~3 A( N6 H1 Xxiuno > (discuz 、 phpwind 、 phpcms) > (帝国cms 、 dedecms)
1 e! R7 _) E4 R* Q& A/ B' K+ k" D Z
dedecms和帝国cms都是老牌的CMS了,从的数据库设计来看,不知是数据库设计者完全没有理解mysql索引的真谛,还是留一手以对高负载需求的用户收费改进?(希望不懂技术的朋友不要喷我,真正懂mysql索引的朋友可以自己看一下他们对索引的设计,虽然对于dedecms和帝国cms的作者来说,我只是一个晚辈,像您们这样有10多年开发经验的人,我比较尊敬,但我建议当前的dedecms和帝国cms数据库设计者还是再研究一下mysql索引吧,可以不相信我,但可以花点时间看看discuz 、phpwind的数据库设计吧,确实是比您们的好)。
- Y- c8 T" E4 V5 @% @
5 s, X6 H$ N/ T% W5 L$ h* c2 d如果有幸帝国cms作者能看到此文,希望您再重新设计帝国cms架构吧,毕竟这些年您一直在改进帝国cms的负载能力,光是通过分表技术提升,没有真正用到索引来优化,真的不行的,如果用对了索引,性能还会有更大的提升。
1 r g% \$ ]$ j7 h3 n0 c$ }$ m1 ?( I ~! s5 j
dedecms的创始人我算是和他认识,但现在dedecms却不是他的,比较遗憾,现在的dedecms这几年确实没多大变化,一直在打补丁,这样下去真是比较悲剧。
" S, Z6 h1 B1 j P; Z; Q7 o' {4 n
我的测试环境:
' C) P8 |% N$ G* w3 w
5 p) \3 p1 i* k! Q: c! Ni3CPU 4G内存 1T硬盘 win7系统 apache 2.2 + mysql 5.0(普通环境没有优化过)* |$ c- S3 h7 k* @( W4 Z+ U
/ S$ E8 d" J2 b
测试方法:
) m5 l3 A) Y: Q( |5 u+ _$ }
7 K# X* g6 o2 J导入100万至1亿 不等数据,进行简单的访问测试+ T- }" B6 h2 F* _
# p% b& X! o _* H
我的导入方法:4 g0 g5 ]8 b0 }( _- M/ \! f
% ^9 K6 {; [7 R& O7 L
根据各个程序的数据结构写出导入程序,
- b; X0 ]' O" h. j' ^3 K% S K8 b4 w- ]) s( L+ v; Y; B }
1.先写一个PHP程序,将数据写入 e:/insert1.sql 这个文件,0 ]1 @5 t- h' U% L2 r
# |& L/ ?" `4 W- H6 p% }3 K
2.然后再通过 LOAD DATA local INFILE 'e:/insert1.sql' INTO TABLE `数据表名` character set 编码; 这种方式导入的,导入千W数据也就几分钟。
2 y+ y, C6 P- p3 X) I
- K: t/ A" Y9 \1 C& ?. q1、帝国cms
F2 x7 w! J& k5 v
w- C% B; }, c测试版本:EmpireCMS_7.0_SC_GBK (当前官方最新版)
. e) q7 N: k: ~- i, I- d E* e C; b7 ~+ q( ~8 K
先说说帝国cms,官方有一篇大数据测试贴(2千万数据、17.3GB数据库下帝国CMS超强生成速度 ),当年我看到这篇测试贴时,也觉得负载非常强大,但我测试后,令我失望了。( V' P5 z/ m$ G5 {
& s7 \9 a- L- d/ G- g% K' g) S6 p& I
安装默认测试数据(共33篇新闻测试数据),首页改为动态首页 第一次访问0.670127010345459 第二次访问0.07926607131958
" A: l- w1 ]: }% I' W% d- x& i# c1 @! L( o ]7 i
|