我正在为以下用例寻找最佳设计。
我正在构建一个系统,用户可以使用结束日期/时间创建实体。我需要安排一项工作,以便在达到结束时间后立即将这些实体的状态更改为“已过期”。
这是我能想到的两个解决方案
有没有比上面两个更好的解决方案?一般人们如何做到这一点?
答案 0 :(得分:0)
每分钟的查询不是很重的负载。我有一个Windows服务,执行以下操作:
管理voip会话计划,启动它们,结束它们,开始录制,结束录制,清除录制驱动器上的录制空间,显示OSD消息。这些任务中的每一个都在一个带有计时器的自己的线程中,并且每4秒运行一次查询。数据库中有超过100,000条记录,Web应用程序的100个用户一次访问同一个数据库。它运行良好,现在已经有3年了。
根据您的框架,可能有更好的选择,但我目前还没有找到任何选项。例如,.NET有任务并行库,我还没有使用过,我听说这里提供了一些东西。无论如何,我多年来一直在使用方法#1,它从来没有让我错过。
当你考虑它时,即使是基于事件的系统也会在一个带有一些函数指针的循环中。问题是您是否手动管理它以及如何进行线程化。 db负载应该是无关紧要的。
答案 1 :(得分:0)
我认为你可以结合两个想法。
每小时运行一次获取数据的工作。 现在为每个在接下来的60分钟内到期的对象创建作业。
现在60分钟的时间只是一个例子.. 改变它以满足您的需求。