在前幾天寫的一篇博文《為網站添加圖片網站地圖》中我提到有三種辦法來實現網站地圖:
- 專門寫的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