【问题标题】:Can I poll a database every 3 seconds我可以每 3 秒轮询一次数据库吗
【发布时间】:2012-10-26 10:12:49
【问题描述】:

我正在构建一个系统,用于在处理数据后异步发送邮件(最多可能需要 10 秒的处理时间)。

我最初的想法是让 Windows 服务每 3 秒通过数据处理请求轮询数据库,以便处理第一条记录。完成后,轮询并获取要处理的新的第一条记录。

当没有记录时,等待 3 秒,然后再次轮询以检查记录。

我不确定这是否是个好主意。在我看来,使用计时器并不是一种很好的编程方式。即使在不需要时,数据库的性能和使用也是一个问题。

在这种情况下,最佳做法是什么?

使用的技术:.net 3.5、SQL Server、服务器在场中。

【问题讨论】:

  • 您可能想看看是否可以使用消息队列来满足您的需求。像 MSMQ 之类的东西,或者在网络上搜索 .net 消息队列。

标签: .net sql-server architecture polling


【解决方案1】:

这完全取决于您创建了多少开销。

如果您可以有效地轮询数据库(即,使用简单的查询)并且这种轮询不需要大量的网络流量(通常不需要),为什么不每 3 秒轮询一次?

您是如何达到第 3 位的?是任意的还是有理由每 3 秒精确检查一次?

为使查询简单,您可以使用 2 个查询:一个用于检测是否有新数据,另一个用于实际获取数据。这样您就可以优化最常出现的那个(显然是第一个)。

【讨论】:

  • 3 只是一个数字,我希望它尽快运行,但我不想过度查询数据库。 2 查询确实是个好主意,因为我不希望数据库不断填充要处理的记录。
【解决方案2】:

为什么一次只能收到一个请求?

并考虑通知

Working with Query Notification

【讨论】:

  • 我认为由于 Windows 服务将在场中的不同服务器上运行,因此将工作分开而不是将其声明给一台服务器会更快。不确定这是否是最好的方法。
  • 即使在农场,我仍然会一次得到一些。将农场放在您的问题中,因为这是一个重要的设计因素。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-04-12
  • 2012-04-04
  • 1970-01-01
  • 2023-03-29
  • 2023-01-02
  • 1970-01-01
  • 2021-10-07
相关资源
最近更新 更多