DedeCMS数据负载性能优化方案简单几招让你提速N倍
前文介绍了DedeCMS栏目列表页实现完美分页的方法,避免了大部分重复栏目标题对搜索引擎的影响,对SEO更有利。今天,分享一下DedeCMS数据负载性能优化的方法。
接触织梦也有三年多时间了,对它可谓是又爱又恨。它的模板简单易用,标签调用更是灵活,二次开发也非常方便。可是,站点数据庞大起来的时候(30多 万条),后台就会变得异常缓慢,生成HTML也很吃力,毫不夸张的说,头发都等白了。这不禁让我对DedeCMS数据负载性能产生了置疑?
查阅了相关资料,结合自身站点实际,还是总结出了一套不错的DedeCMS数据负载性能优化方案。废话不说,直接进入正题。
1)数据分表存储 减轻数据单表压力
自织梦V5版本起,DedeCMS开始分表存储以提高系统负载性能,确实在一定程度上缓解了数据压力。现在最新的DedeCMS V5.7版本已经出来了,据官方介绍,V5.7调整了缓存处理,应付50万以内数据没问题,至于真实性无从考究。如果官方陈述属实的话,对于中小型站长来 说确实是件好事,正常百万级内数据也不用过多担心了。
分表存储如何操作?
如果你只是个人或企业等小型站点,数据量也就撑死上万,那完全不用考虑分表存储,DedeCMS完全可以胜任。分表操作很简单,你只需要直接进入后 台,新建模型,然后设置一个栏目对应一个模型。个人建议一个大的频道栏目及子栏目对应一个模型,这要根据你的栏目可能存储的数据来做计划,考虑实际一点的 分表方案。
2)修改系统参数 arclist标签另类优化
在DedeCMS V5版本中,官方其实已经做了极力优化,引入了缓存机制。其实影响HTML生成速度的罪魁祸首还是模板中的arclist标签,很多站长喜欢用 arclist标签来调用最新、热门、推荐、头条等文章列表,但是arclist标签每次都带着一大堆条件去主表中查询,可能还会关联附加表,对一次性生 成大量文章来说,只是重复使用arclist标签对数据库重复查询罢了,自然会花去大量时间。现在DedeCMS新的版本中,生成HTML时arclist标签会直接调用缓存数据,省去arclist标签重复查询数据库的时间,顿时让上述工作变得轻松起来,生成速度得到提升也是必然的。你只用在系统参数->性能选项中,找到arclist标签调用缓存(cfg_index_cache)(0 不启用,大于0值为多少秒),根据自身实际需求调整缓存调用时间。
其实,还有一种解决办法,就是麻烦了一些,但是对性能提升是非常显著的。arclist 标签调用缓存虽说一定程度上提高了HTML生成速度,但是还是需要对arclist缓存进行判断,如果能把这部分时间也省去,那是不是会更快呢?答案是肯 定确定以及双重否定。我们可以通过freelist(自由列表)功能事先生成最新、热门、推荐、头条等文章列表页面,然后用include标签直接引入到 模板里,标签格式为:{dede:include file=’文章列表页面文件名称’ ismake=’ no’/}。如果你的站长数据很庞大,服务器硬件配置也一般的话,何不尝试一下呢?
另外,系统参数-核心设置里默认的关键字替换功能(cfg_keyword_replace)是开启的,如果文章是采集过来的,还是关闭的好,有很多关键字都毫无意义,甚至会有乱码导致生成出错,关掉此功能对提高系统性能是有一定帮助的。
3)数据库表索引优化 性能大幅提升
为什么要对DedeCMS数据库表索引进行优化呢?很简单,在Mysql中,索引无疑是最有效的加快查询的工具了,一个合理的索引组合会极大地提升 你的查询效率和系统性能。言归正传,你可以通过phpmyadmin或是一个叫Navicat for MySQL的软件(推荐)来管理你的数据库。
分析DEDECMS数据表信息,不难发现,所有的文章数据是存储在dede_archives和dede_arctiny,以及对应的 dede_addonarticle附加表中的。生成HTML时,sql查询主要围绕这三张表来的。个人认为,凡是要排序的字段和查询条件的字段及文档 ID都要建立索引,如果一个没有建立,将会严重影响MySQL的查询效率,最终导致生成速度变慢。DEDECMS数据表索引建立方法如下:
a)dede_archives,是文章的主表,存储文章标题、关键 字、描述、发布时间等信息,10万数据的表大小可能在30MB左右,也是我们优化的重点。你需要建立的索引字段有,id、channel、 pubdate、sortrank、ismake、typeid、mainindex、lastpost;其中,像系统默认的mainindex和 lastpost这两个组合索引,个人认为存在意义不大,可以删除,自己掂量。需要注意的是,click字段,是文档的点击数,此字段更新频率,建立索引 后会对系统维护带来一定压力,另外也有人说频繁更新的建立索引会容易导致数据库损坏,也无从查证。个人建议click字段保留,不建立索引。
b)dede_arctiny,这个表比较小,10万数据的表大小不到5MB,建议不建立索引,可以将自带的删除掉,或者只保留sortrank索引。
c)dede_addonarticle,是文章附加表,主要是用来存储文章内容的,不作索引考虑。
以上索引成功建立后,再测试下你的HTML生成速度,是不是让你精神一振呢?
4)搭建胜过Apache十倍的高并发Web服务器 Nginx + PHP(FastCGI)
Web服务器的重要性不需多言,对提升网站性能有着直接影响。在PHP开发中,最常用的环境莫过于在 LAMP:Linux+apache+mysql+php了,在windows下有 WAMP:Windows+apache/iis+mysql+php,我的WEB站点也是在这种环境下开发的。Nginx + PHP(FastCGI)无疑是你最好的选择,在Windows和Linux下都可以安装,只是Windows下的Nginx表现要远远逊色于Linux。
DedeCMS系统运行是依赖PHP+MYSQL环境的,所以说一个运行快、资源消耗小的Web服务器对提升系统性能有多重要。如果条件允许的条件,还是推荐下Nginx + PHP(FastCGI)这种WEB服务器环境。
以上就是DedeCMS数据负载性能的优化方案,针对的是有独立WEB服务器或控制权限的站长,至于虚拟主机想 达到这个速度还是很费劲的,但是也可以作为DedeCMS性能优化的一个参考依据,自己琢磨琢磨了。当然,如果有更好的提高DedeCMS数据负载性能的 办法,还希望分享下。其实,正常情况下(不包括采集),一般站点数据量也都有限,20万就很了不起了吧?我想,以上的DedeCMS优化方案足以解决了。 真到了百万级、千万级数据的时候,也不是一般站长需要考虑的事了。
DIV+CSS布局之浏览器兼容问题及CSS Hack使用方法
DedeCMS数据负载性能优化方案简单几招让你提速N倍的更多相关文章
- mysql 性能优化方案
网 上有不少MySQL 性能优化方案,不过,mysql的优化同sql server相比,更为麻烦与复杂,同样的设置,在不同的环境下 ,由于内存,访问量,读写频率,数据差异等等情况,可能会出现不同的结果 ...
- mysql 性能优化方案1
网 上有不少mysql 性能优化方案,不过,mysql的优化同sql server相比,更为麻烦与复杂,同样的设置,在不同的环境下 ,由于内存,访问量,读写频率,数据差异等等情况,可能会出现不同的结果 ...
- (转)Web性能优化方案
第一章 打开网站慢现状分析 在公司访问部署在IDC机房的VIP网站时会感觉很慢.是什么原因造成的?为了缩短页面的响应时间,改进我们的用户体验,我们需要知道用户的时间花在等待什么东西上. 可以跟踪一下我 ...
- mysql 性能优化方案 (转)
网 上有不少mysql 性能优化方案,不过,mysql的优化同sql server相比,更为麻烦与复杂,同样的设置,在不同的环境下 ,由于内存,访问量,读写频率,数据差异等等情况,可能会出现不同的结果 ...
- Redmine性能优化方案
近来公司redmine服务器表现很糟糕,在16核,64GRAM的机器上,压测结果竟然只有每秒5~7个请求,部分页面一个都出不来. 以下是我对Redmine性能优化方案: redmine服务器性能问题排 ...
- Web性能优化方案
第一章 打开网站慢现状分析 在公司访问部署在IDC机房的VIP网站时会感觉很慢.是什么原因造成的?为了缩短页面的响应时间,改进我们的用户体验,我们需要知道用户的时间花在等待什么东西上. 可以跟踪一下我 ...
- 老李分享:MySql的insert语句的性能优化方案
老李分享:MySql的insert语句的性能优化方案 性能优化一直是测试人员比较感兴趣的内容,poptest在培训学员的时候也加大了性能测试调优的方面的内容,而性能优化需要经验的积累,经验的积累依 ...
- 大数据应用之HBase数据插入性能优化实测教程
引言: 大家在使用HBase的过程中,总是面临性能优化的问题,本文从HBase客户端参数设置的角度,研究HBase客户端数据批量插入性能优化的问题.事实胜于雄辩,数据比理论更有说服力,基于此,作者设计 ...
- mongodb可以通过profile来监控数据 (mongodb性能优化)
mongodb可以通过profile来监控数据 (mongodb性能优化) 开启 Profiling 功能 ,对慢查询进行优化: mongodb可以通过profile来监控数据,进行优化. 查看 ...
随机推荐
- 前端必备PS技巧
hai,how is it going?I'm MuQing.I come back.哈哈,最近在英语的路上奋战,小秀一下.又好久没写博客了,实习的生活渐行渐远了,回到学校也终于能够坐下来对很多东西进 ...
- shell脚本基本知识点
Shell 是一个用C语言编写的程序,它是用户使用Linux的桥梁.用户通过这个界面访问Linux操作系统内核的服务.Shell既是一种命令语言,又是一种程序设计语言. 1.Shell 环境 Shel ...
- JavaWeb开发之HttpServletResponse
1. HttpServletResponse简介 Web服务器回送给Web客户端的HTTP响应消息分为三个部分:状态行,响应消息头,响应体. Servlet API中定义了ServletRespons ...
- Zepto 添加手势判断拓展方法(思路+原理)
一.前言 这几个月事情比较多,写了一些博客都没有来得及整理发布,今天刚好有一位同事在开发前端页面的时候用到了手势判断.所以翻出了之前写的 demo,顺便整理一下作为记录. 手势判断在各种应用中都十分常 ...
- 浅谈C#数组(二)
六.枚举集合 在foreach语句中使用枚举,可以迭代集合中的元素,且无需知道集合中元素的个数.foreach语句使用一个枚举器.foreach会调用实现了IEnumerable接口的集合类中的Get ...
- 简单的留言板(dom+正则练习)
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...
- git的使用及常用命令(二)
一,把文件放在版本库中 执行 git add XXX文件名 在执行 git commit -m ‘提交注释' 查看状态 git status 如果没有改变文件,nothing to comment ...
- 项目中如何使用babel6详解
由于浏览器的版本和兼容性问题,很多es6,es7的新的方法都不能使用,等到可以使用的时候,可能已经过去了很多年.Babel可以把es6,es7的新代码编译成兼容绝大多数的主流浏览器的代码. 本篇文章主 ...
- javaWeb项目(SSH框架+AJAX+百度地图API+Oracle数据库+MyEclipse+Tomcat)之一 基础Struts框架搭建篇
即将开始着手写这个项目,所以希望通过这篇博客来记录自己学习的过程 今天开学第一天,就上了软件工程实践课,自己也开始着手做这个大作业了.首先我的项目名称叫做智能班车管理系统. 项目的概况: 该软件产品是 ...
- python自动化开发-[第一天]-基础数据类型与编码
1.Python与其他语言对比 - C语言的解释方式 代码-->机器码-->计算机 - python,java,php等高级语言的解释方式 代码-->字节码-->机器码-- ...