簡體   English   中英

數據庫中應該觸發定時事件的記錄=如何有效實施?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM