基本上,我有一个名为event的表:
id |标题|倒计时|描述|活跃的|已过期| created_at |的updated_at
我开始构思如何使用MySQL或PHP创建“LIVE”事件。所以我想我可以使用Cron引用PHP或使用直接SQL的事件。
所以我的想法如下:
将我的表格重组为:
事件: id |标题|描述| created_at |的updated_at
event_queue: id | event_id的
active_events: event_id |倒计时|迭代
expired_events: event_id | expired_at
因此,如何创建一个活动计时器以每秒运行一次,每秒最多更新一次active_events中的100行?
进入active_events的示例数据如下:
event_id:1, 倒计时:20(20分钟), 迭代:90
我想每秒递减倒计时,当它达到0时,递减迭代并开始倒计时回到20.一旦迭代为0且倒计时为0,只需完全删除该条目,然后归档事件到expired_events。同样,active_events中最多只能有100行。
这样做最好的方法是什么?
基本上这是一个内部应用程序,人们可以在办公室投票,如果没有投票,那么它就会消失。以上结构就是我想要的结果,看它是否有效。
有什么想法? (我必须去吃午餐并将更新此内容或稍后对任何帖子发表评论)
编辑: 从午餐回来!...我忘了注意倒计时需要在每次操作时重置(用户对其进行投票)。为了我的大脑和思考,让我们说每当有人接受其中一个事件时,它就会存储到accepted_events中,并且active_events倒计时必须重置为20。
这是我的服务器顶部运行mysql事件而不是:
top - 11:56:59 up 1:29,1位用户,平均负载:0.11,0.06,0.01 任务:共92个,2个跑,88个睡觉,2个停止,0个僵尸 Cpu(s):0.0%us,0.0%sy,0.0%ni,99.7%id,0.0%wa,0.0%hi,0.3%si,0.0%st 内存:510552k总计,499364k使用,11188k免费,74316k缓冲区 交换:1048568k总计,0k使用,1048568k免费,251872k缓存
top - 12:00:08 up 1:32,1位用户,平均负载:0.06,0.04,0.00 任务:共92个,2个跑,88个睡觉,2个停止,0个僵尸 Cpu(s):0.3%us,0.3%sy,0.0%ni,99.0%id,0.0%wa,0.3%hi,0.0%si,0.0%st 内存:510552k总计,501720k使用,8832k免费,74996k缓冲区 交换:1048568k总计,0k使用,1048568k免费,253244k缓存
编辑#2:这是我的意思草图 - http://oi51.tinypic.com/29c1bp4.jpg
答案 0 :(得分:0)
不要将计时器存储的实际时间存储到完成时间,并始终将其与当前时间进行比较。在需要时更新完成时间。
答案 1 :(得分:0)
我最终创建了一个每秒运行一次的脚本并更新了一个小表。我的服务器上每天有大约250万个独特的视图,而我几乎没有看到这样的性能。
我只有一张包含200条记录的表格,我每秒都会减少这些值。
timer | location_id | queue_id
如果记录达到0,抓住下一个queue_id并将其插入那里,然后重置计时器...我会想到另一种方法,以后再做,现在,我没有看到一个糟糕的性能打击所有...如果我需要,我可以拥有自己的服务器/数据库。