2011-09-03 55 views
0

我正在尋找以下用例的優化設計。調度作業 - 優化設計

我正在構建一個系統,用戶可以使用結束日期/時間創建實體。我需要安排一份工作,在達到最終時間後立即將這些實體的狀態更改爲已過期。

這些是我能想到的

  • 一個作業每分鐘運行一個查詢,以檢查過期的實體(結束時間> SYSDATE)的兩個解決方案。 問題:在數據庫上加載,每分鐘運行一次此查詢可能會將負載加載到數據庫上。
  • 一旦創建實體,就爲每個實體安排一份工作。 問題:系統中會創建太多作業,每天會創建1000個這樣的實體。

有沒有比上述兩個更好的解決方案?人們如何做到這一點?

回答

0

每分鐘查詢不是一個非常沉重的負載。我有一個Windows服務,執行以下操作:

管理VoIP會話的時間表,啓動它們,結束它們,開始錄製,結束錄製,清除錄製驅動器上的錄製空間,顯示OSD消息。這些任務中的每一個都在他們自己的線程中使用計時器,並且每4秒運行一次查詢。數據庫中有超過100,000條記錄,並且一次訪問同一數據庫的網絡應用程序的數百名用戶。它運行良好,已經有3年了。

根據您的框架,可能有更好的選擇,但我目前還沒有找到任何。例如,.NET有任務並行庫,我還沒有使用,我聽到有一些東西在這裏提供。無論如何,我已經使用了多年的方法#1,它從來沒有讓我錯過。

當你考慮這個問題時,甚至一個基於事件的系統都會在一個帶有一些函數指針的地方循環。問題在於你是否手動管理它以及它是如何線程化的。數據庫負載應該是微不足道的。

0

我認爲你可以結合兩個想法。

在每個小時運行一個獲取數據的工作。 現在爲僅在接下來的60分鐘內到期的每個對象創建作業。

現在60分鐘的時間就是例子.. 改變它以適應您的需求。

+0

謝謝高拉夫,我以爲這是最初的。但是如果用戶選擇30分鐘結束時間,還有其他需要做的事情。然後我們需要編寫一些額外的邏輯來處理這些場景。 – firefly

+0

究竟..沒想到那... –