使用织梦建站时候发现,当数据量达到一定级别的时候,会出现整个系统异常的缓慢。有一个朋友有大概40万条的数据的样子。网站就变得非常缓慢,生成静态页面时更是吃力的不行,让你等个够。武林网织梦模板网分享以下方法解决这个问题。
方案一:数据分表存储,不要把所有数据存于一个表
早期的织梦所有数据都是存储于一个表,并没有独立 addonarticle这样的附件表。从大概V5.0版本开始,出现了分表存储。所以,可以参考官方的整个升级变化,可以把网站的内容都分表处理,如果数据量非常大的话,推荐一个栏目一个表。如果数据量不是很大,可以一个顶级栏目一个表。(大概的一个量,在100万级别的话,推荐一个顶级栏目一个表,子栏目不多的情况下,如果在100万-500万级别,推荐一个栏目一个表,如果是500万往上走,换系统吧,织梦已经满足不了你了。。)
方案二:影响html生成速度的第一要素:arclist,优化arclist标签
其实在织梦v5.0的时候,织梦官方做了缓存机制,极大了优化了。但是从数据监控来看,影响静态化生成的第一要素,当属arclist标签。很多站长喜欢用arclist标签来调用最新文章、热门文章、推荐和头条等,同时arclist标签每次都带着一大堆条件去主表中查询,可能还会关联附加表,对一次性生 成大量文章来说,只是重复使用arclist标签对数据库重复查询罢了,自然会花去大量时间。
优化方法①、DedeCMS新的版本中,生成HTML时arclist标签会直接调用缓存数据,省去arclist标签重复查询数据库的时间,顿时让上述工作变得轻松起来,生成速度得到提升也是必然的。你只用在系统参数->性能选项中,找到arclist标签调用缓存(cfg_index_cache)(0 不启用,大于0值为多少秒),根据自身实际需求调整缓存调用时间。
优化方法②、我们可以通过freelist(自由列表)功能事先生成最新、热门、推荐、头条等文章列表页面,然后用include标签直接引入到模板里,标签格式为:{dede:include file=’文章列表页面文件名称’ ismake=’ no’/}。
另外,系统参数-核心设置里默认的关键字替换功能(cfg_keyword_replace)是开启的,如果文章是采集过来的,还是关闭的好,有很多关键字都毫无意义,甚至会有乱码导致生成出错,关掉此功能对提高系统性能是有一定帮助的。
方案三:优化织梦数据表索引
在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,是文章附加表,主要是用来存储文章内容的,不作索引考虑。
方案四:搭建胜过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。