问题:
这是一个非常有趣的问题:我在数据库中拥有大量记录,这些记录本身与它们相关联的是“触发时间”(=未来的日期)。如果此时间正确/达到,则记录应执行/触发特定操作。多个线程将在此时更新记录。所以这个时间不固定,可以通过不同的线程来改变......
解决方案:
轮询:
我当然可以一遍又一遍地查询具有“timedout”的记录。在最后,如果事件/记录有timedout,我将不得不编写一个仅查询(通过SQL)的循环。但是对于DB这样的轮询循环来说这并不好!
线程:另一种方法是将所有这些内容保存在内存中,例如使用“Executor Framework”或使用Quartz作为线程。从JAva的角度来看,这很合乎逻辑,这很可能是非常好的时间。但后来我会有成千上万的线程......
问题:
有什么更好的方法可以解决这个问题?欢迎任何建议/想法,所以我可以对它们进行进一步的研究。
非常感谢!!
答案 0 :(得分:2)
根据数据库的不同,有些人会收到“通知”(我在这里考虑Postgres)。它允许您启动一个过程,并让PG中的其他内容在发生时通知您。
即。在这种情况下,当一个记录随着超时而改变时,你可能会有一个触发器通知你的计时过程(它位于一个完全不同的数据库连接上)然后它可以插入@at记录,或者cron条目,或者它是什么你需要做的就是管理和执行行动。
在最新版本的PG中,您可以将数据与通知一起发送,即您可以发送更改记录的PK值。
Clients --> [Postgres] -----------<> Record Monitor client ---- > process records()
| |
records_table |
| |
\_ timing_Trigger() --/
on_update/insert/delete notify RecordMonitorClientOfChange.
我将要做的超级蹩脚的图表。