对dedecms表现出来的相对较差的性能也感觉比较迷惑,到底是什么在制约其负载效率?难道真的是某些dede论坛版主说的是因为mysql不堪重负的原因吗?
还是因为一个表的大数据造成性能严重下降?难道我们必须通过分多个表来存储才能解决问题吗?以下我们通过一个实例来解析和优化dedecms的数据管理性能,千万别让mysql当替罪羊,罪莫大焉。
测试数据是无意中得到的企业黄页的数据,数据量将近90万,都是完全真实的数据,测试使用的程序是dedecms4.0版本,你问为什么不用
dedecms5.1?那是因为我们为了优化,针对dedecms做了很多修改,如果使用dedecms5.1,我们害怕收到法院传票……,补充一句,以
下的优化方法均能在dedecms5.1中使用,请在理解其原理的基础上自行完成。
未优化前我们测试发现主要有三个经常性的操作在dede大数据量的情况下影响管理性能,分别是文档生成、列表页生成和栏目列出所有文章,我们就针对这三个方面进行优化实践。
以下是测试数据的基本信息:
文档数量接近90万
每个栏目包含近3万数据
1.改进文档生成速度
问题提出
和我们前一次测评结果相同,dedecms的文档的生成速度惨不忍睹。使用默认模板(article_article.htm),平均接近30秒才能生成20个页面(如图),按照这个速度生成下去,90万的数据全部生成网页能等到头发都白了。那么到底问题在哪里呢?
优化前单个栏目文档生成速度
问题分析
先排除表索引的问题,因为dede的数据库已经在数据主表(dede_archives)为主要字段都建立了索引。再排除主要内容的提取效率问题,因为页
面生成过程中读取页面中的文章数据,每次需要到主表和附表中select取得id值唯一的数据内容,这个SQL语句的效率我们通过直接在mysql中运行
SQL语句测试,执行时间非常短,因此这也不是最大的瓶颈。
终于在页面生成过程中,我们发现程序执行了数次主表(dede_archives)查询,并取出符合一组复杂查询条件数据的操作,查询效率非常低,原来是
它在影响效率!通过调试跟踪haole123.com
,我们定位了问题的关键,元凶就是模板中arclist标签。Arclist标签是很多人很喜欢用的标签,因为它比较灵活,能从数据中取出热门、最新、相
关等各种类型的文章列表,但是arclist标签每次都会带着一大推搜索条件去主表中查询,实际上对于一次性生成大量文章来说,如果使用相同的模
板,arclist对数据库的查询操作只是简单机械重复罢了,为此而耗费了大量时间绝对是不值得的。接下来我们给出问题解决的建议。
解决问题
解决方案1:去掉最终页面模板中的arclist标签,或者尽可能少用。这个方法虽然能极大提高效率,但是无异于泼水把孩子泼走了,对于企图增加访问pv的网站来说,不建议使用。
解决方案2:建立arclist缓存,将每次arclist生成的数据放到临时目录或者缓存当中,在文档生成过程中判断缓存是否有更新,如果无更新,直接使用缓存数据。这个方法无需改变模板,对于提高生成效率也有一定的效果,但由于对程序改动较大,酌情考虑使用。
解决方案3:也是小组建议的解决方案,那就是充分挖掘现有dedecms的功能,在尽量不改变程序的基础上,大幅提高效率。具体的方法就是通过
freelist(自由列表生成)功能事先生成热门文章、最新文章、相关文章等内容的列表页面,然后使用dedecms提供的include标签直接引入
文档页面。标签格式为:{dede:include file='列表页面文件名称' ismake='
no'/}。这个方案优点在于仅增加部分操作步骤,没有改动任何程序,性能提高亦非常明显。下图就是我们利用这个方法优化后的生成速度,仅用时50秒就完
成了1500多页的文章生成,达成目标优化效果。此方案由于增加了操作步骤,懒人慎用。
优化后单个栏目文档生成速度
2.改进列表页面生成速度
问题提出
接下来我们继续测试列表页面的生成,这次我们学乖了,先把模板(list_article.htm)中的arclist标签删除后再测试,但是生成效果依
然非常不理想。如下图,每个列表页面生成时间接近20秒(我们修改了页面结果输出提示,为了大家更方便看到每个列表页面生成时间),按照每页50条数据计
算,生成单个栏目的3万数据理论上也要花费3个多小时,生成90万数据……无语ing。由于列表内容使用的是list标签,这是一个和arclist有点
类似的标签,因此我们不能延续上面的做法来解决问题,只能另辟蹊径。
优化前的列表页面生成速度
问题分析
由于目标锁定在list标签,测试的过程就简单了。我们直接使用dedecms中list的查询语句做优化分析,很快发现了问题。我们测试了list中的sql查询语句,以下代码就是list用来查询数据库中对应条件的SQL语句,执行时间大约为15秒,效率很不理想。
Select arc.ID,arc.title,arc.iscommend,arc.color,
arc.typeid,arc.ismake,arc.money,arc.description,arc.shorttitle,
arc.memberid,arc.writer,arc.postnum,arc.lastpost,
arc.pubdate,arc.senddate,arc.arcrank,arc.click,arc.litpic,
tp.typedir,tp.typename,tp.isdefault,tp.defaultname,
tp.namerule,tp.namerule2,tp.ispart,tp.moresite,tp.siteurl from
dede_archives arc left join dede_arctype tp on arc.typeid=tp.ID left
join qiye_addonarticle on arc.ID = qiye_addonarticle.aid where
arc.arcrank > -1 And ( ( arc.typeid='1′ ) or arc.typeid2='1′) order
by arc.sortrank desc limit 0,50
我们注意到这个SQL语句中的where子句使用了and和or的多种条件判断,经验告诉我们如果查询子句中使用了in或者or语句,会导致全表扫描,这
样的话索引的效率就无法体现。我们简化了where子句的判断条件进行测试,结果发现删除了or子句之后,查询效率大幅提升,上面的查询语句只用时不到1
秒就获得了查询结果。这就是问题关键。
分享到:
相关推荐
【描述】:“dede快速标签工具”是一款专为内容管理系统(CMS)用户设计的高效工具,特别是在基于DEDECMS(织梦内容管理系统)的网站开发中,它能够帮助开发者和管理员快速、便捷地生成和管理网页中的各种标签。...
标题中的“动易6.8转dede5.5”指的是将使用动易6.8系统构建的网站数据和内容迁移至织梦CMS(DEDECMS)5.5版本的过程。这个过程通常涉及到数据库的迁移、模板的适配以及功能模块的转换。动易6.8是一款早期的中国国内...
DEDE(Dedecms)是一款广泛使用的开源CMS(内容管理系统),许多网站管理员使用它来搭建和管理他们的网站。在DEDE文章中,图片是内容的重要组成部分,而为这些图片添加合适的ALT属性是SEO的基本技巧之一。本文将详细...
dedecms5.5toecms6.0gbk这个是dede升级帝国的gbk编码程序,压缩包内有升级说明,更多使用过程及问题请参考历史文章https://blog.csdn.net/weixin_42198110/article/details/123715104,
DEDE网站模板是一种基于织梦内容管理系统(DEDE CMS)的专业设计模板,广泛应用于企业建站。DEDE CMS是一款开源的PHP+MySQL内容管理框架,以其功能强大、易用性好、灵活性高而受到众多企业和个人用户的青睐。下面将...
织梦DedeCMS批量导入Excel表文章内容插件是一款针对织梦内容管理系统(DedeCMS)设计的实用工具,主要用于高效、快速地导入大量文章内容。这个插件极大地提升了网站内容更新和管理的效率,尤其适合那些需要频繁更新...
标题中的“dede批量Getshell”指的是针对DEDECMS(织梦内容管理系统)的一种批量获取WebShell的操作。DEDECMS是一款广泛使用的PHP CMS,而Getshell则是网络安全领域中指利用漏洞在目标服务器上植入后门或者获取...
【WordPress仿Dede模板】是一种将流行的WordPress内容管理系统与经典的DedeCMS设计元素相结合的网站模板。WordPress以其易用性和强大的可扩展性而闻名,而DedeCMS则以其灵活的模板系统和对SEO友好的特性受到青睐。...
dedecms批量漏洞扫描,大家可以自己试试效果
DEDE导入Pbootcms专业增强版10.24日3.10.exe
DEDE标签是DEDE系统中不可或缺的一部分,熟练掌握DEDE标签的使用,可以让你在构建网站时更加得心应手。"DEDE超级标签22"工具则是提升开发效率的好帮手,它让DEDE标签的编写变得更加简单。通过深入理解和实践,你将能...
DEDECMS数据库结构和配置 DEDECMS是一个基于PHP和MySQL的内容管理系统(CMS),其数据库结构和配置是系统的核心组件。本文档将详细介绍DEDECMS数据库结构和配置文件的内容。 数据库配置文件 DEDECMS数据库配置...
如果你希望通过二次开发来拓展dede的功能,本教程将引导你逐步了解如何进行dede插件开发。 首先,我们需要理解插件在dede系统中的角色。插件是扩展系统功能的基础模块,它们可以增加新的功能、修改现有行为或集成...
dede5.6免登陆发布模块(含接口)utf8与gbk编码
### Dede后台验证码不显示三种解决方案 #### 概述 在使用DedeCMS(织梦内容管理系统)的过程中,用户可能会遇到后台登录时验证码不显示的问题。这种情况不仅影响用户体验,还可能导致无法正常登录后台进行管理操作...
标题中的“dede后台登录界面”指的是DEDECMS(织梦内容管理系统)的管理后台登录页面。DEDECMS是一款基于PHP+MySQL开发的开源CMS,广泛应用于网站建设和内容管理。登录界面是用户进入系统进行管理和操作的第一步,...
在本文中,我们将深入探讨DEDE标签,这是在使用DEDECMS(织梦内容管理系统)进行网站构建时不可或缺的一部分。DEDECMS是一个流行的开源CMS,它提供了丰富的模板标签,使得非程序员也能轻松创建和管理网站内容。让...
【标题】"DeDe反编译工具 DEDE 3.50.4的修改版"是针对Delphi和BCB(Borland C++ Builder)应用程序的反编译工具,主要用于帮助开发者分析和理解Delphi或BCB编译的二进制代码。此版本为3.50.4的改良版,引入了新的...
"dede织梦 转建站"可能是指利用DedeCMS进行网站迁移或改造,比如将现有网站的数据导入到DedeCMS系统中,或者使用DedeCMS来改版原有的网站,以提高用户体验和管理效率。 标签 "安装 dede" 明确了讨论的主题是关于...
标题“dede会员三级联动”指的是在DEDECMS(织梦内容管理系统)中实现的会员系统的一个特性,即会员注册时或在会员管理中采用的一种分级制度。这种联动通常指的是新注册的会员自动关联到其上一级会员,形成一种树状...