当前位置

大数据量Drupal网站的Views中慎用Relationships

James Qi 在 2011年11月29日 - 09:53 提交
内容摘要: 上周同事开始在多个子网站更改各项设置,特别是添加多个Views后,服务器负载持续攀升,也影响到服务器上的没有更改的网站,特别是几个数据量达到数十万、上百万的网站,已经连续出现首页报错的情况了。 ......

  上周同事开始在多个子网站更改各项设置,特别是添加多个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也能完成预想的任务,但还是存在明显效率不高、展示不灵活等问题,看来这种特殊情况下还是得结合程序来解决。