【问题标题】:What is the best way to update database on 00:00 everyday in asp.net mvc4在asp.net mvc4中每天00:00更新数据库的最佳方法是什么
【发布时间】:2014-11-18 03:47:01
【问题描述】:

在一个 ASP.NET MVC4 项目中,我想在每天 00:00 更新 sql server(2012) 中的一些数据。 也许我有三个选择: 1.编写一个windows服务,运行在服务器上,执行数据库更新。 2.编写一个每天00:00执行的sql server存储过程。 3. 使用第三方工具,如Quartz.Net,流畅。

哪一个是最好的选择?为什么?

【问题讨论】:

  • 您是否拥有对服务器的 shell(RDP 或 Telnet)访问权限?如果是这样,请使用计划任务(使用 RDP)或 Telnet 中的 at 命令。
  • 或者,如果您严格只针对数据库运行 SQL,请改用 SQL Server 代理。

标签: asp.net schedule


【解决方案1】:

如果您对 T-SQL 感到满意并且任务可以完全在数据库中完成,那么将其实现为存储过程并使用 SQL Server 代理对其进行调度是有意义的。这减少了外部依赖项的数量,因为一切都发生在 SQL Server 内部,并且故障点更少(例如,如果 IIS 或您的 Web 解决方案出现故障,它仍然会运行)。

如果您的更新需要与其他资源交互,例如从已知位置导入文本文件等,那么您也可以考虑在 SSIS(SQL Server 集成服务)中实现它。这具有仍然是 SQL 托管的优势,同时让您可以访问使用存储过程不容易实现的其他功能。

如果我觉得在 proc 或 SSIS 包中实现所需的功能很难或难以实现,我只会在 .NET 中将其实现为批处理。这一点尤其重要,因为 SQL Server 2012 允许您使用 .NET 类型代码构建 SSIS 包,但它“存在”在 SQL Server 上注册的 SSIS 包中。

我根本不会在您的 ASP.NET 解决方案中实现它,除非它出于某种原因实际上需要基于 Web 的用户界面。您希望每晚在同一时间执行此过程这一事实告诉我,这不需要人工交互。

如果流程可以完全自动化,请避免在等待某种 UI 输入时放置用户界面或任何可能挂起或成为单点故障的东西。请记住,表示层是用于人机交互的——考虑是否需要。最好将其实现为某种批处理,这也使得通过自动化执行更容易。此规则有例外情况,例如如果您想将更新实现为带有 REST 接口或类似接口的 Web API,但一般来说它是正确的。

附带说明,如果您的目标是在一夜之间运行您的流程,请考虑将其安排在凌晨(凌晨 3 点到 4 点之间)而不是午夜,因为这通常是大多数人都在睡觉并且您的更新最不可能影响您的应用及其数据库的可用性,或者如果您的更新运行时间很长,则会遇到极端情况,例如夏令时更改或与其他通宵进程发生冲突。

【讨论】:

  • 非常感谢。你的回答对我很有帮助。
  • 你好,现在我选择SQL存储过程的分辨率。我也使用windows azure云服务。如何使用azure中的“Sql Server Agent”调度程序来运行我的任务。期待您的回答!谢谢。
  • 我没有使用过 Azure 服务,所以其他人可能会更好地为您提供建议。
【解决方案2】:

查看 Hangfire。 ASP.NET 中的计划任务。超级简单可靠。

http://hangfire.io/

我们刚开始使用它,我喜欢它。

【讨论】:

  • 不好意思问hangfire和Quartz.Net有什么区别
  • 我没用过Quartz.Net,所以不能智能评论。我可以说 hangfire 是专门为 ASP.NET 构建的,可以处理应用程序池回收和在 IIS 中运行的其他细微差别。
  • 非常感谢。对我帮助很大。
【解决方案3】:

我用过你写的所有三种方式,各有优缺点。但我建议你使用 Quartz.Net。它很容易实现,也很容易使用。
你可以看到heremike 写的一篇关于 ASP.NET 中的计划任务的精彩文章

【讨论】:

  • 这个方法的成功率怎么样?恐怕这种方法比存储过程还不够稳定。您对这个问题有何看法?
  • 这个方法我用了好几次都没有遇到任何问题,存储过程也不错,但我会去quartz.net
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-02-03
  • 1970-01-01
  • 2019-07-26
  • 1970-01-01
  • 2013-03-23
  • 2015-11-28
  • 2011-03-04
相关资源
最近更新 更多