2012-11-06 52 views
3

我正在构建一个系统,在处理完数据之后异步发送邮件(可能需要10秒的处理时间)。我可以每3秒轮询一次数据库吗

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

如果没有记录,请等待3秒钟,再次轮询以检查记录。

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

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

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

+0

您可能想看看一个消息队列可以用来满足您的需求。像MSMQ,或者对.net消息队列进行网络搜索。 – CodingWithSpike

回答

3

这一切都取决于您创建多少开销。

如果您可以高效地轮询数据库(即使用简单的查询),并且如果此类轮询不需要大量的网络通信量(通常不这样做),为什么不每隔3秒就轮询一次?

你是如何达到数字3的?它是武断的还是有理由每3秒精确检查一次?

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

+0

3只是一个数字,我希望它尽可能快,但我不想过度查询数据库。 2查询的东西确实是一个好主意,因为我不希望数据库不断被填充记录来处理。 – BBQ

1

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

并考虑通知

Working with Query Notification

+0

我想,由于windows服务将在服务器场中的不同服务器上运行,因此将工作划分为更快,而不是将其声明为一台服务器。不知道这是否是最好的方法。 – BBQ

+0

即使在农场,我仍然会一次获得几个。把农场放在你的问题上,因为这是一个重要的设计因素。 – Paparazzi