2011-10-31 27 views
0

问题:
这是一个非常有趣的问题:我有一个数据库中的大量记录,它本身与它们关联了一个“触发时间”(=未来的日期)。如果这个时间正确/到达,记录应该/发起一个特定的动作。多个线程将在这次更新记录。所以这个时候是不固定的,它可以通过不同的线程来改变......DB中应该触发定时事件的记录Events =如何有效实现?

解决方案:
投票:
我当然可以一遍又一遍地查询记录,有“已逾时”。在最后,我将不得不写一个循环,只查询(通过SQL),如果事件/记录超时。但是,对于一个DB有这样的轮询循环,这是不好的!
主题:另一种方法是保留所有的内存,例如使用“Executor Framework”或将Quartz用作线程。从JAva的角度来看,这很可能是非常好的时机。但后来我将有数千个线程...

问:
有什么更好的方法是有没有办法解决这个问题?任何建议/想法都是值得欢迎的,所以我可以对它们做进一步的研究。

非常感谢!

回答

2

根据数据库,有些人有'通知'(我在这里想到Postgres)。它允许您启动一个流程,并让其他事情在PG中通知您。

I.e.在这种情况下,当记录被超时更改时,您可以通过触发器通知您的计时过程(位于完全不同的数据库连接上),然后可以插入@at记录或cron条目或任何它您需要在您身边执行管理和执行操作。

在PG的最新版本中,您可以将数据与通知一起发送,即您可以发送已更改记录的PK值。

Clients --> [Postgres] -----------<> Record Monitor client ---- > process records() 
      |      | 
     records_table    | 
      |      | 
      \_ timing_Trigger() --/ 
         on_update/insert/delete notify RecordMonitorClientOfChange. 

一个超级蹩脚的图表,我会做什么。

相关问题