首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >调度作业-优化设计

调度作业-优化设计
EN

Stack Overflow用户
提问于 2011-09-03 05:20:19
回答 2查看 357关注 0票数 0

我正在为下面的用例寻找一个优化的设计。

我正在构建一个系统,在这个系统中,用户创建具有结束日期/时间的实体。我需要安排一个作业,以便在到达结束时间后立即将这些实体的状态更改为过期。

这是我能想到的两个解决方案。

  • 作业每分钟运行一次,并运行一个查询以检查过期实体(endTime > sysdate)。Problem:在数据库上加载,每分钟运行这个查询可能会将负载放到数据库上。一旦实体被创建,
  • 就为每个实体安排一个作业。Problem:太多的乔布斯将在系统中创建,其中1000个实体将每天创建。

有没有比上述两种方法更好的解决办法?一般来说,人们是如何做到这一点的?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-09-03 05:35:21

每分钟一次查询并不是一个很重的负载。我有一个windows服务,它执行以下操作:

管理voip会话的日程,启动它们,结束它们,开始记录,结束记录,清除记录驱动器上的记录空间,显示OSD消息。这些任务中的每一个都在自己的线程中使用计时器,大约每4秒运行一次查询。数据库中有100,000多条记录,100多个web应用程序的用户一次访问同一个数据库。它运行良好,并已经有大约3年了。

根据您的框架,可能有更好的选择,但我目前还没有找到任何选项。例如,.NET有任务并行库,我还没有使用它,我听说这里提供了一些东西。不管怎样,我已经使用了第一种方法很多年了,而且它从来没有对我造成过错误。

考虑到这一点,即使是基于事件的系统也处于一个具有某些函数指针的循环中。问题是您是否正在手动管理它,以及它是如何线程化的。db负载应该是不重要的。

票数 0
EN

Stack Overflow用户

发布于 2011-09-03 05:36:16

我认为你可以把两种想法结合起来。

每小时运行一个获取数据的作业。现在只为在接下来的60分钟内到期的每个对象创建作业。

现在60分钟的时间只是个例子..改变它以适应你的需要。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7291322

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档