2012-11-06 49 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