1
yangxin0 2016-08-18 22:44:03 +08:00 via iPhone
工作内容的咨询是要按小时收费的
|
2
htfy96 2016-08-18 23:11:22 +08:00 via Android
检查一个广告位在一段时间内可能被多少个之前的广告占用,只要查找出没有在这段时间内占用位置的广告数量。
没有占用位置的用 count(end_time <= current_start_time) + count(start_time >= current_end_time)得出。我猜建了索引的话应该挺快的? |
3
binux 2016-08-18 23:19:56 +08:00
「把这一百个显示器的八个广告位理解成八百个独立广告位」
并不合理,客户是买一个显示器上的八个广告位,还是八个显示器上的一个广告位。 你确定产品需求要确定到具体某台显示器的某个广告位某个时间点第几个滑出吗? 显示器不能分区吗?八个广告位随机位置不可以吗? |
4
bingdong700 OP @binux 显示器布置在不同的地点,所以是买不同显示的某个级别广告位。八个广告位大小不全相同,级别也不全相同,同样级别的可能大小也不一样,这里只用考虑同一个广告位级别,不用考虑不同显示器。
|
5
bingdong700 OP 重新整理一遍:
假定现有 100 台布置在不同地点显示器,每个显示器上有 8 个不全相同的广告位(不同级别,不同大小。同级别也有可能大小不一样,暂时只考虑级别),不同广告位有不同空闲时间段可投放广告。一个订单在同一时间段对应多个广告位,每个广告位对应多个不同时间段的订单,因为起始结束时间不一样,这样就存在空档期。现在有客户下单投放广告,需要搜索出来在指定的时间段内的有空档广告位,要怎么做才能减少广告位的空闲浪费呢? 我目前的想法,把这 100 台显示器的 8 个广告位理解成 800 个独立广告位,每个广告位会对应若干条不同时间段的订单,分别记录不同的起始结束时间。用户在搜索的时候,后台就需要遍历这 800 个广告位,然后将客户指定的时间段来对比历史订单(后面待执行)的时间段,若没有重叠时间则为可用广告位。 以上想法在目前可能应付得过来,可是后期,会有 1000 甚至更多台显示器,而且,若屏幕允许左右滑动,一个显示器就有可能有 16 或者 24 个广告位。广告多了还会考虑将每个广告位做成轮播图片形式,也就是多个订单可选这个广告位。但为了保证广告展示时间会限制轮播循环图片不超过五张。这样计算出一个有效广告位,还需要对比历史订单,同时间段内重叠不超过五次。至于根据重叠时间长短来取舍是后话了。 1000 台显示器、 24 个广告位、重叠不超过 5 次,应该还有更好的算法,求指教。 |
6
lecher 2016-08-19 01:12:43 +08:00
搜索可用资源这个事情,把资源维度从多维展开,降到一维就好了。
这个资源计算并不是 800 个广告位的颗粒度,还要算上时间颗粒度。比如按 10 秒为时间颗粒度的话,一个广告是 20 秒就要占用两个时间单位,这样拆下来,一天大概是 800×8640 个单位。这样可以把广告轮播的维度展开。 提前将这些单位预先创建好。如果是在数据库的话,就相当于每条记录一个单位,按每天的数据提前创建 800×8640 条记录,哪怕提前创建一年的数据也可以的,这种已经展开的数据,没有复杂的汇总计算。建个索引速度快得很。 一旦用户决定购买一个时间段的某个广告位,直接把这个广告需要占用的单位标识为使用。 这样下一个用户决定订购的时候,可以直接搜没使用的单位汇总成可选时间段。 至于要扩展广告轮播之类的,也就是增加展示单位的事情。搜索可用单位还是同样的逻辑。 以上是获取可用资源显示成时间段给用户的事情。 至于要把客户订单按逻辑展开,怎么标注要占用的展示单位,间隔之类的。都拿到所有可用的展示单位了,怎么安排就简单很多。 |
7
winglight2016 2016-08-19 13:53:40 +08:00
你把(显示屏+位置)生成一个编号,这不就变成了一个工单排号系统了?或者当成一个美甲预约系统?
|
8
bingdong700 OP @yangxin0 你得有两把刷子才行啊
|
9
bingdong700 OP |