在前几天写的一篇博文《为网站添加图片网站地图》中我提到有三种办法来实现网站地图:
- 专门写的php程序,与.htaccess的rewrite配合重写网址(详见《Drupal网站Views生成页面的XML网站地图构建》)
- 用module文件中的menu路径来生成(详见《Drupal中用module文件中的menu路径来生成sitemap.xml》)
- 用views中的xml views来生成(现在来写这篇博客文章来介绍)
以前很早就想过用views来做xml sitemap,替代
这是 Views 分类的页面,点击下面标题查看详细文章内容:
在前几天写的一篇博文《为网站添加图片网站地图》中我提到有三种办法来实现网站地图:
以前很早就想过用views来做xml sitemap,替代
最近发现有一台阿里云RDS数据库服务器负载持续很高,CPU总是占满,当前连接数超过几十的时候网站就被卡得不能动了。除了升级RDS配置以外,可以仔细检查慢查询日志,发现这种查询特别多:
SELECT node.title AS node_title, node.nid AS nid, node.sticky AS node_sticky, node.created AS node_created FROM node node WHERE (( (node.status = 1 OR (node.uid = 0 AND 0 <> 0 AND
最近看到一些Drupal日志中出现这样的报错“无法找到文本格式:1。”,如下图:
检查发现是一些带参数的Views页面,当找不到页面的时候报这个错,再仔细看Views设置,发现这里没有设置格式:
点击打开“全局:文本域”显示:
Drupal里面Views功能很方便、强大,而在PHP程序中调用Views的Page或者Block也很需要,有时还可以起到替代写SQL语句的作用,不过需要带参数变量Block的调用不太常见,以前用过也老是忘记调用办法,昨天又花时间找了一下,现在就记录下面,免得以后又到处去找。
views_embed_view('views_name', 'page_or_block_id', 'variable');
详情请看Drupal官方网站中的API文档:views_embed_view
Drupal网站的Views功能相对强大,特别是对于SQL不太熟悉的朋友来说Views的Web界面非常方便,而且数据库查询功能一点不弱,用Drupal这么多年了不能用Views实现的查询功能极少极少,但也还是存在用Views不好实现的场景,例如我遇到的:
我们一直很重视网站地图对搜索引擎的提交,以前的MediaWiki自带生成sitemap的程序,Drupal也有专门的第三方扩展XML Sitemap程序。
但Drupal的这个扩展只能对node, user, taxonomy term, menu等生成网站地图,也可以手工添加custom网址加入地图中,但却无法把Views批量做成的页面都加进去。这个问题以前不算很突出、很重要,因为主要页面都是node页面或者分类页面,但采取“在Drupal中直接导入、使用数据库”的办法以后,一个网站的主要页面基本上都是Views生成的,这时Drupa
Drupal中两种可以进行页面分类的工具是Taxonomy系统和Views方式,前者是专门的分类系统,用得比较多,而Views更加灵活,另外很早前也发现Views中有个叫着Taxonomy term的View,默认没有开启,如果开启的话,可以替代相同路径的分类页。
很早前为了降低数据库负载也曾在部分国外系列网站中启用过Taxonomy term View,现在发现RDS的慢查询语句中还有不少是默认分类页面的翻页计数SQL语句,现在全面使用Views Litepager,于是在把Taxonomy term这个View启用,还有几个措施:
Drupal系统的Views是个功能强大的工具,但也可能引起MySQL数据库性能问题,为了排查可以打开一些Views的开关设置。
我一般常用的是:
用Drupal很多年一直都是用的自带搜索,但存在数据量大时速度很慢、搜索结果不准确等问题,中途尝试过Apache Solr,但感觉太复杂、麻烦了。也知道Views可以用作内部搜索,但一直没有实施。
最近在设法降低MySQL服务器负载时,查看RDS后台的慢查询日志,发现有相当多的慢查询都是Drupal自带的搜索造成的,特别是数据量大的中文站、搜索汉字词特别长的时候。还有些数据量大的站,生成搜索索引都需要非常长的时间(生成的搜索表可能比内容类型的字段表大得多),自己去试着搜索也是非常慢(有些需要几十秒以上,几乎无法正常使用)。于是就尝试用Views来替代,现在记录
Drupal的Views是个非常强大、灵活的工具,但用得不合适也可能导致数据库负载的飙升。最近把Drupal站启用UTF8MB4支持,转换程序自动把以前的MyISAM引擎转为InnoDB了,也因此引起阿里云RDS的IOPS升高。
又试了一些调整RDS参数等,无效。再看了一些资料、观察了RDS的进程,还是一些Views的消耗大,特别是数据量大的站。以前在Drupal 6时就在个别网站中启用过views_litepager这个插件,来替换Views本身的翻页,牺牲了查看一共有多少页的功能,不再运行select count(*) ... 这个在InnoDB引擎消耗很
2002-2023 v11.7 a-j-e-0