簡體   English   中英

使用Spring避免數據庫輪詢的最佳方法

[英]Best approach for avoiding database polling using Spring

我有用於讀取和更新數據並使用spring,spring JDBC進行數據庫訪問的Web服務。 我的控制器可以通過許多渠道訪問,例如台式機,移動設備等。如果使用台式機更新數據,則應該立即在移動設備中反映出來。 當前的方法是不斷調用服務以獲取更新的數據。 我認為這是最糟糕的方法,並且也會導致數據庫性能問題。

有沒有一種可能的方式,使得僅當通過其他通道進行數據庫更新而不是連續輪詢時才調用GET服務? 最佳方法是什么?如何實施?

連續調用該服務似乎是個壞主意。 我認為您需要一個數據庫觸發器,當插入/更新/刪除行時將觸發該觸發器。 它可以將某些內容發布到Web服務或將某些內容放入消息隊列中。

祝好運。

我可以想到一個對該問題的體系結構答案。 在spring控制器和數據庫之間使用消息傳遞解決方案。 實際上,您將需要兩個隊列

  • EventSink隊列-將來自任何通道的所有數據更改請求發布到此隊列。訂戶將是管理數據庫更新(即dbservice)的服務。

  • EventBroadcast隊列-將數據庫更新后的更改數據發布到此隊列。 理想情況下,dbservice應該在與db update相同的事務中處理此發布。 所有通道都可以訂閱此隊列以接收更新。

    考慮這種方法的優點將涉及

  • 優點-這種方法不涉及任何數據庫服務,因此性能和與數據庫更改的脫鈎都沒有。

  • 缺點-復雜性增加

連續輪詢並不像您想象的那樣糟糕。 在沒有請求的情況下將消息推送給客戶端需要Web套接字等來實現。 如果它不是服務器中的重要部件,並且使用頻率不是很高(如數以百萬計的請求中那樣),那么我將暫時保留它。

但是,如果這是大量帶寬,我們正在談論,那么您就不想進行輪詢。 您可能希望查看訂戶類型模式,在發生特定事件時,客戶端將通過該模式訂閱客戶端的通知。 發生此事件時,服務器將向客戶端發送一條消息。

檢測到此事件不需要輪詢數據庫。 對數據庫的修改應觸發事件。 如果您喜歡這種事情,可以在Spring中使用切入點來實現。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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