[英]Records in DB that should trigger timed Events = How to implement efficiently?
問題:
這是一個非常有趣的問題:我在數據庫中擁有大量記錄,這些記錄本身與它們相關聯的是“觸發時間”(=未來的日期)。 如果此時間正確/達到,則記錄應執行/觸發特定操作。 多個線程將在此時更新記錄。 所以這個時間不固定,可以通過不同的線程改變...
解決方案:
輪詢:我當然可以一遍又一遍地查詢具有“timedout”的記錄。 在最后,如果事件/記錄有timedout,我將不得不編寫一個僅查詢(通過SQL)的循環。 但是對於DB這樣的輪詢循環來說這並不好!
線程 :另一種方法是將所有這些方法保存在內存中,例如使用“Executor Framework”或使用Quartz作為線程。 從JAva的角度來看,這很合乎邏輯,這很可能是非常好的時間。 但后來我會有成千上萬的線程......
題:
有什么更好的方法可以解決這個問題? 歡迎任何建議/想法,所以我可以對它們進行進一步的研究。
非常感謝!!
根據數據庫的不同,有些人會收到“通知”(我在這里想的是Postgres)。 它允許您啟動一個過程,並讓PG中的其他內容在發生時通知您。
即在這種情況下,當一個記錄隨着超時而改變時,你可能會有一個觸發器通知你的計時過程(它位於一個完全不同的數據庫連接上)然后它可以插入@at記錄,或者cron條目,或者其他任何東西你需要做的就是管理和執行行動。
在最新版本的PG中,您可以將數據與通知一起發送,即您可以發送更改記錄的PK值。
Clients --> [Postgres] -----------<> Record Monitor client ---- > process records()
| |
records_table |
| |
\_ timing_Trigger() --/
on_update/insert/delete notify RecordMonitorClientOfChange.
我將做什么的超級糟糕的圖表。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.