上周同事開始在多個子網站更改各項設置,特别是添加多個Views後,服務器負載持續攀升,也影響到服務器上的沒有更改的網站,特别是幾個數據量達到數十萬、上百萬的網站,已經連續出現首頁報錯的情況了。
http://tx.bizdirlib.com/ 的首頁主要由兩部分組成:城市列表和行業列表,首頁報錯的時候,上半部分的城市列表還是可以正常顯示的,隻是下半部分的行業列表無法顯示,錯誤提示信息也是與sic行業代碼的查詢有關。
檢查兩個Views,城市列表的Views很簡單,而行業列表的Views中采用了Relationships,以便查找行業代碼對應的行業描述,本來行業總數隻有5000左右,但每個行業都要到數十萬公司數據中去查找行業代碼對應的描述,再用Distinct來去掉重複,從PHPMyAdmin中看到語句中有好些left join,這就是負擔所在了!
雖然對php, mysql, drupal api不熟悉,但沒有辦法還是編寫了一個小程序在後台運行,将行業代碼在公司數據中查找到第一個,讀取行業描述後寫到行業代碼分類term對應的description中,再修改Views不使用Relationships了,而是直接讀取term的description,效率可以提高很多個數量級。
Drupal的Views确實是個好東西,不需要會編程就能靈活處理很多顯示方面的問題,而且運用熟練後會發現很強大。不過在大數據量、多級索引、交叉索引等複雜情況下,雖然Views也能完成預想的任務,但還是存在明顯效率不高、展示不靈活等問題,看來這種特殊情況下還是得結合程序來解決。
自由标簽
评论