我正在构建一个简单的应用程序,根据用户输入的时间安排启用/禁用广告集。
例如,用户可能希望广告的投放时间为上午6点至上午9点,然后是下午5点至晚上10点,其他时间则为其他广告。
安排此计划的最佳方法是什么?我会将所有数据存储在MYSQL中,如果我有一个cron / task来检查表中与时间匹配的行的每一分钟,然后是函数enable / disable?
要继续该示例,该表可能包含列,时间,函数。
早上6点,启用 上午9点,禁用 下午5点,启用 晚上10点,禁用
我的问题是,如果我有10,000个用户左右,这对于网络服务器来说是否太多,或者是否有更有效的方法来执行此操作?
答案 0 :(得分:1)
在下面的方法中,我们正在做的是......
ads
和ad_timings
,可为每个广告保存不同的 start_time 和 end_time ... 2016-23-12 06:50:11
)......您将其转换为0650
。你的桌子
ad
id | name | current_status | ....
1 | ... | 0 | .....
ad_timings
id | ad_id | start_time | end_time
1 | 1 | 600 | 900
1 | 1 | 1700 | 2200
你的模特
class Ad extends Model
{
public function timings()
{
return $this->hasMany('App\Models\AdTimings');
}
}
class AdTimings extends Model
{
protected $table = 'ad_timings';
public function ad()
{
return $this->belongsTo('App\Models\Ad')
}
}
在您的日程安排程序中
use Carbon\Carbon;
use App\Models\Ad;
class AdScheduler
{
public function handle()
{
$now = Carbon::now();
// This will convert current timestamp to something like
// Timestamp: 2016-12-23 23:36:11
// to
// Now: 2336
// Basically you are calculating time on the basis of hundreds..
// Like people say... 1300 hours... get me?
$now = $now->hour . $now->minute;
// These are the ads to run
// You can change their current_status field to 1 with update
$adsToRun = Ad::whereHas('timings', function($query) use ($now) {
return $query->where('start_time', '<=', $now)
->where('end_time', '>=', $now)
})->get();
// Ads to Stop
// You can change their current_status field to 0 with update
$adsToStop = Ad::whereHas('timings', function($query) use ($now) {
return $query->where('start_time', '>=', $now)
->where('end_time', '<=', $now)
})->get();
}
}