广告系统

时间:2009-03-25 04:54:56

标签: asp.net algorithm

我正在为ASP.NET网站创建广告系统。该网站有一个广告客户部分。他们在广告中注册并发布广告,他们将首先支付广告的最高预算,每日预算,因此广告客户可以控制他的预算,不同的广告客户会有很多广告在网站上展示。广告有两个属性:最高预算和每日预算,如何选择广告,广告可以展示多少次,任何人都可以为我提供方法或算法。

3 个答案:

答案 0 :(得分:2)

嘿Priyan, 以下是我们在AdServerBeans中处理它的方法(http://www.adserverbeans.com - 它是开源的,您可以查看源代码):

DROP FUNCTION if exists get_speed;
CREATE FUNCTION get_speed(from_date DATETIME, to_date DATETIME, views_limit INT, views_served INT, now_date_time TIMESTAMP)
  RETURNS double
  DETERMINISTIC
  NO SQL
BEGIN
  DECLARE banner_total_serving_time INTEGER;
  DECLARE banner_served_time       INTEGER;
  DECLARE percent_time_served        DOUBLE;
  DECLARE percent_ad_events_served    DOUBLE;
  IF (views_limit IS NULL OR views_limit=0) THEN RETURN -1;END IF;

  IF (views_served IS NULL) THEN SET views_served = 0;END IF;
  IF (banner_total_serving_time = 0) THEN SET banner_total_serving_time = 1;END IF;
  IF (views_limit = 0) THEN SET views_limit = 1;END IF;

  SET banner_total_serving_time = TIMESTAMPDIFF(SECOND, from_date, to_date);
  SET banner_served_time = TIMESTAMPDIFF(SECOND, from_date, now_date_time);
  SET percent_time_served = (100 * banner_served_time) / banner_total_serving_time;
  SET percent_ad_events_served = (100 * views_served) / views_limit;
  RETURN percent_ad_events_served - percent_time_served;
END
;;

此MySQL函数返回负数或正数。如果我们表现不佳则为负,如果表现不佳则为正。 表现不佳 - 发球,超越 - 跳到下一个横幅或不发球。

我希望输入参数不言自明。

答案 1 :(得分:1)

我建议查看调度算法。

例如,您可以使用预算来确定次数/期间(日/周/等),并将其用作weighted round robin schedule.中的加权因子这将是一种平衡的简单方法来自不同广告商的请求在时间上均匀。 (注意:上面的链接更适合网络数据包调度,但基本算法可以工作......)

答案 2 :(得分:0)

我认为你应该为你的问题使用不同的算法。通常在这种系统中你有:

  1. ASAP (广告系列将尽快展示,不受限制)
  2. 即使分发/重新分发,如果过度投放(广告系列的流量将在指定的时间段内均匀分配。如果广告系列因任何修改而过度投放,则新的流量分配将会计算,以便剩余的交通量在剩余的时间内均匀分配)
  3. 均匀分布在两半(两半功能的均匀分布与均匀分布/重新分配选项类似。但是,它允许用户为前半部分分配一定量的流量。通过考虑活动的总持续时间,每周时间表以及多个开始和结束日期(如果适用)来计算一半的活动。然后,系统获取总流量,乘以它按每一半的相应百分比设定,并在每一半内均匀分配。)
  4. 适应性均匀分布(流量将根据广告系列投放网站的流量分配进行分配。更多流量将分配到高峰时段,而不会分配到非高峰时段。在其计划结束日期附近,将加速流量分配以确保达到目标。)
  5. 如果太多算法是你不想处理的事情,那么只实施ASAP,我的意思是如果一个广告客户可以赢,他仍然会赢得他的每日预算结束