我有一个相当“活跃”的CDR表,我想在过去5分钟内每隔5分钟选择一次记录。问题是它在其他一些列上生成了SHA ID,所以我必须依赖的是一个时间戳字段,通过它我按日期过滤以选择我想要的记录的时间窗口。
接下来的问题是,显然我不能保证我的脚本每次都会在第二次运行,或者服务器的挂钟是正确的(这没关系),最重要的是几乎肯定会有更多每秒一个记录说3行'2013-08-08 14:57:05',在第二个到期之前可能会插入一行。
截至'2013-08-08 14:57:05'并获得记录BETWEEN '2013-08-08 14:57:05' AND '2013-08-08 15:02:05'
将有更多关于'2013-08-08 14:57:05'的记录,我会错过。
本质:
是否都阻止我在指定的滚动时间窗口中获取有效的行集。关于我如何解决这些问题的任何建议?
答案 0 :(得分:0)
我可能没有得到所有细节,但要回答你的问题标题“以固定的时间间隔从数据库表中可靠地选择” ......
我认为你甚至不希望在“第二次准确”时间运行查询。
该方法的一个关键问题是您必须处理并发访问和锁定。您可能能够在固定的时间发送查询,但您的查询可能在数据库服务器上等待几秒钟(或者正在查看相当过时的快照D b)。特别是在你的情况下,因为桌子显然是“忙”。
作为建议,如果我是你,我会花一些时间考虑一下队列消息系统(比如http://www.rabbitmq.com/只引用一个,而不是预告它是某种方式“你的”解)。无论如何,这些工具可能更适合您的需求。
答案 1 :(得分:0)
如果您使用相同的时钟,那么我认为没有理由为什么会出错。您想要考虑的分辨率是日期时间表。这样,每次根据服务器时间更新开始和停止时间....然后在添加内容时,保证在该时间范围内。
我的意思是,您可以通过硬编码来实现,但我的方式是强行存储数据库中的起点和终点以供使用。
我会用Cron来处理间隔和时间。不要使用时间,而只是不要通过一直检查来锁定数据库。