相信科技改变生活,一个老程序员的闲言碎语。

某即时信息搜索网站优化记录

内容简介:这是一篇关于信息搜索网站,信息检索的优化,信息检索优化的文章。前段时间以及在忙于优化这样一个提供即时信息搜索的网站。这个网站大概有10万条信息。每天以约5000条信息的速度在递增,同时,这些信息的时效性有一定的要求。这就导致了该网站的搜索页

        前段时间以及在忙于优化这样一个提供即时信息搜索的网站。这个网站大概有10万条信息。每天以约5000条信息的速度在递增,同时,这些信息的时效性有一定的要求。这就导致了该网站的搜索页面被大量访问——iis日志表明,约有30%以上的请求是指向搜索页面——,而对这些搜索请求占用了服务器cpu资源的70%以上。因此解决问题的关键就在于优化搜索页面。

       首先,对该网站的sql语句进行了优化。调试发现,在搜索信息的时候,并非从一个表中读取,而是同时对另一个表进行了连接查询。解决的办法是对信息表增加了几个冗余字段。将原本需要连接查询获得的数据,插入信息表中,做到只读取一个表。同时,将原先的sql语句更改为存储过程中拼合sql语句。

        其次,在调试的过程中,将除了搜索结果以外的其他内容,以内存缓存的形式(application)进行缓存。做到绝大部分情况,这个搜索页面只执行两次sql查询——即信息搜索以及为分页而进行的记录统计(count(id))。

        由于这个网站提供了信息更新功能——更新信息以后,排序发生改变——所以在之前,搜索结果的排序是以发布的时间为顺序的。这样的排序无法使用id<(select min(id) from (select top page*splitnum id from table 这样最优化的海量数据分页算法。而是采用 where id not in (select top  page*splitnum id from table 这样分页效率较低的算法。为了应用更高效的分页算法,在用户更新信息的同时,直接复制原有信息并插入数据库,同时删除原有的信息,这样更新的同时就更新了主键id,得以应用海量数据分页算法。

         经过初步的优化,该网站的的资源占用有了明显的降低。然后,一段时间之后,随着流量的上升,资源的占用再度紧张。于是又再次对此网站进行了一次检查。发现了几个问题

1、搜索引擎对这个站太偏爱的,特别是百度,访问量占到了总访问请求的21%。

2、许多用户,在同一时间段内,搜索的行为是相同的,也就是出现了许多重复的查询。

3、一些过期的数据没有及时删除。

        针对这些问题,决定对搜索结果使用硬盘缓存,为每个搜索结果生成一个结果缓存文件,对于普通的用户,设置缓存时间为15分钟,在缓存时限内读取硬盘缓存而不直接从数据库读取,而对于搜索引擎,高峰时段只读取缓存。对于普通用户而言,牺牲了一点时效性。对于搜索引擎而言,由于它在非高峰时段的抓取也是较为频繁的,因此数据的抓取数量应该影响较小。同时,设定数据库维护计划,定时删除45天前发布的信息。

后续工作:

       这个即时信息网站开通了多个城市的分站,各个城市间的数据并没有联系,数据库设计之处就不应该将数据存入同一数据库,后期应按照城市进行分表,减少每个表的数据量。

每次执行搜索,为分页而进行的记录统计(count(id))查询也占用了一定的资源。应使用cookies缓存入客户端。

       iis日志显示,用户平均查询的次数是4.8次,说明目前的搜索结果用户的满意程度较差,应记录每次搜索所得到的记录数,对未命中的结果进行优化,同时,开发相关搜索功能,研究用户的搜索关键词,改善搜索体验。

 

 

 

上一篇:web3.0?从内容匮乏到信息收敛

假如从内容层面定义web的版本——文章里有点概念投稿的时候总是比较容易让编辑通过审核的——那么可以说web1.0就是一个内容匮乏的时代,必须由编辑或者专业人士来建设互联网的内容。而web2.0则是一个信息爆炸的时代,各种UGC形式的涌现让所

下一篇:可能要买的四本书

今天遗憾地发现当当的配货速度实在不敢恭维,3号的订单到现在还在配货,此外貌似淘宝上图书价格比当当还便宜,可惜店家的书不知道会不会比当当全,下次决定尝试在淘宝上购书。