基本上,我有一个表格叫做事件:使用MySQL的现场计时器(&php)
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。同样,最多只有100行将在active_events内。
要做到这一点,最好的方法是什么?
基本上这是一个人们可以在办公室投票的内部应用程序,如果没有投票完成,那么它就会消失。上述结构是我想要的,并看到它的工作。
有什么想法? (我要去吃午饭,并会更新这个或以后的任何帖子发表评论)
编辑:! 返回从午餐......我忘了要注意的是倒计时需要每一个动作放在时间重置它(用户投票)。为了我的大脑和思维,让我们说每次有人接受其中一个事件时,它被存储到accepted_events中,并且active_events倒计时必须重置为20.
这里是我的服务器顶部运行mysql事件而不是:
中运行VM实例ON MACBOOK PRO
这是没有事件
顶部 - 11点56分59秒达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缓存
这是计划和运行在200行下面的SQL事件:
更新测试设置计时器=计时器1
顶部 - 12时00分08秒向上1:32,1个用户,平均负载:0.06,0.04,0.00 任务:92总,2运行,88睡眠,2个停止,0个僵尸 Cpu:0.3%us,0.3%sy,0.0%ni,99.0%id,0.0%wa,0.3%hi,0.0%si,0.0%st Mem:510552k total,501720k使用,8832k免费, 74996k缓冲区 交换:1048568k总,使用0K,1048568k免费,253244k缓存
编辑#2:这是我的意思的草图 - http://oi51.tinypic.com/29c1bp4.jpg
棘手的是,当某人“投票”或对事件做出动作时,计时器重置(类似于quibids重置的方式)。我还能这样做吗? – Jordan 2011-03-10 20:56:06
是的。想想每个重置只是改变定时器完成时的时间戳。当在代码中显示时间时,只需将当前时间与结束时间进行比较,然后显示差异即可。所以你只更新更改的结束时间不会随实时更改,这在数据库中是非常不切实际的。 – 2011-03-11 20:09:55
我还没有看到你如何能够完成所有的逻辑,并且创建一个“实况”定时器,而不必更新当前“实时”事件之后应该执行的所有事件的开始时间。 – Jordan 2011-03-11 23:03:15