CodeIgniter中广告展示次数统计与更新的优化方案咨询
优化CodeIgniter广告展示次数更新方案
方案一:实时批量更新本次展示的广告
针对每次展示的3个广告,用单条SQL语句批量更新它们的count_ads字段,避免多次查询或全量更新的开销。
实现代码(CodeIgniter Query Builder)
// $displayedAdIds为本次展示的3个广告ID数组 $displayedAdIds = [12, 34, 56]; $this->db->set('count_ads', 'count_ads + 1', FALSE); $this->db->where_in('id', $displayedAdIds); $this->db->update('ads_sponsers');
- 说明:第三个参数
FALSE用于告知CodeIgniter不转义count_ads + 1表达式,确保SQL正确执行自增操作。 - 优势:仅需1次SQL查询,性能开销极低,且只更新需要统计的广告,不会冗余操作其他数据。
方案二:定时批量同步日志数据(非实时场景)
如果对count_ads的实时性要求不高,可定期从ads_sponsers_log表汇总展示次数,批量更新到主表,减少实时请求的负载。
实现代码(CodeIgniter原生SQL执行)
UPDATE ads_sponsers a INNER JOIN ( SELECT ad_id, COUNT(*) AS display_count FROM ads_sponsers_log -- 统计最近1小时未同步的日志,可根据需求调整时间范围或标记已同步数据 WHERE created_at >= DATE_SUB(NOW(), INTERVAL 1 HOUR) GROUP BY ad_id ) b ON a.id = b.ad_id SET a.count_ads = a.count_ads + b.display_count;
在CodeIgniter中执行该SQL:
$sql = "UPDATE ads_sponsers a INNER JOIN (...) b ON a.id = b.ad_id SET a.count_ads = a.count_ads + b.display_count"; $this->db->query($sql);
- 配套操作:编写CodeIgniter CLI同步脚本,通过服务器Cron任务定时执行(比如每小时一次),避免在Web请求中处理耗时统计。
- 优势:大幅降低实时更新频率,适合展示次数统计无需绝对精准的场景。
注意事项
- 实时批量更新方案需确保展示广告时正确记录本次展示的广告ID数组,避免遗漏或错误更新。
- 定时同步方案若需更精准统计,可在
ads_sponsers_log表添加synced字段,标记已同步日志,防止重复统计。
内容的提问来源于stack exchange,提问作者Misha
相关产品推荐
相关产品推荐

