龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > web编程 > php编程 >

openx广告管理系统pv机制分析及大流量网站的解决方案

时间:2011-10-28 22:38来源:未知 作者:admin 点击:
分享到:
首先监听广告投放页面,可以得到写pv所执行的页面url如下: http://www.1sohu.com/www/deliver ... mcb=8461ba7146 然后打印 sql 可以看出其执行的语句 INSERT INTO ox_data_bkt_m (interval_start, creative_id, zon

首先监听广告投放页面,可以得到写pv所执行的页面url如下:
http://www.1sohu.com/www/deliver ... m&cb=8461ba7146
然后打印sql可以看出其执行的语句
INSERT INTO ox_data_bkt_m
            (interval_start, creative_id, zone_id, count)
            VALUES ('2011-10-28 02:00:00', '8', '5', '1')
     ON DUPLICATE KEY UPDATE count = count + 1

查看表结构可以了解到是个复合主键,interval_start是只取到小时的日期, creative_id,zone_id对应具体广告单元,三个键发生重复时,则执行,对应的count+1

跟踪
http://www.1sohu.com/www/deliver ... m&cb=8461ba7146
得到被调入口函数,其位置是在/plugins/deliveryLog/oxLogImpression/logImpression.delivery.php
具体插入pv的入口方法

 
  1. function Plugin_deliveryLog_OxLogImpression_LogImpression_Delivery_logImpression($adId = 0, $zoneId = 0, $okToLog = true)
  2. {
  3.    
  4.         if (!$okToLog) { return false; }
  5.     $aData = $GLOBALS['_MAX']['deliveryData'];
  6.     $aQuery = array(
  7.         'interval_start' => $aData['interval_start'],
  8.         'creative_id'    => $aData['creative_id'],
  9.         'zone_id'        => $aData['zone_id']
  10.     );
  11.     return OX_bucket_updateTable('data_bkt_m'$aQuery);
  12. }

 

当然大家测试可能发现对它的改动没有效果,实际上是缓存在作怪,清掉/var/cache下所有文件 ,即可看到效果。
对于大流量的优化,其实说实话,openx这个机制已经很完美了,除了高并发的执行大量insert or update之外,没什么大的压力,要解决这个就要用到memcached了,只要将其存入memcached中,用计划任务定时读取并写到库中即可,当然要记得插入库的时候,也要清掉对应的memcached数据,以节省资源,这样子一来,就完美了,并且我觉得,即使上千万的访问量,内存足够大,也足以应付了。

本站原创,转载请注明出处:
http://www.1sohu.com/newsHtm/58/n_16858.shtml


精彩图集

赞助商链接