2011-10-31 26 views
0

問題:
這是一個非常有趣的問題:我有一個數據庫中的大量記錄,它本身與它們關聯了一個「觸發時間」(=未來的日期)。如果這個時間正確/到達,記錄應該/發起一個特定的動作。多個線程將在這次更新記錄。所以這個時候是不固定的,它可以通過不同的線程來改變......DB中應該觸發定時事件的記錄Events =如何有效實現?

解決方案:
投票:
我當然可以一遍又一遍地查詢記錄,有「已逾時」。在最後,我將不得不寫一個循環,只查詢(通過SQL),如果事件/記錄超時。但是,對於一個DB有這樣的輪詢循環,這是不好的!
主題:另一種方法是保留所有的內存,例如使用「Executor Framework」或將Quartz用作線程。從JAva的角度來看,這很可能是非常好的時機。但後來我將有數千個線程...

問:
有什麼更好的方法是有沒有辦法解決這個問題?任何建議/想法都是值得歡迎的,所以我可以對它們做進一步的研究。

非常感謝!

回答

2

根據數據庫,有些人有'通知'(我在這裏想到Postgres)。它允許您啓動一個流程,並讓其他事情在PG中通知您。

I.e.在這種情況下,當記錄被超時更改時,您可以通過觸發器通知您的計時過程(位於完全不同的數據庫連接上),然後可以插入@at記錄或cron條目或任何它您需要在您身邊執行管理和執行操作。

在PG的最新版本中,您可以將數據與通知一起發送,即您可以發送已更改記錄的PK值。

Clients --> [Postgres] -----------<> Record Monitor client ---- > process records() 
      |      | 
     records_table    | 
      |      | 
      \_ timing_Trigger() --/ 
         on_update/insert/delete notify RecordMonitorClientOfChange. 

一個超級蹩腳的圖表,我會做什麼。

相關問題