我有用於讀取和更新數據的Web服務,並使用Spring,Spring JDBC進行數據庫訪問。我的控制器可以通過桌面,手機等多種渠道訪問。如果使用桌面更新數據,則應立即在手機中反映。目前的方法是不斷調用服務來獲取更新的數據。我覺得這是最糟糕的做法,並導致數據庫性能問題。使用Spring避免數據庫輪詢的最佳方法
是否有一種可能的方式,GET服務僅在有其他通道更新數據庫而不是連續輪詢時調用?什麼是最好的方法和如何實現它?
我有用於讀取和更新數據的Web服務,並使用Spring,Spring JDBC進行數據庫訪問。我的控制器可以通過桌面,手機等多種渠道訪問。如果使用桌面更新數據,則應立即在手機中反映。目前的方法是不斷調用服務來獲取更新的數據。我覺得這是最糟糕的做法,並導致數據庫性能問題。使用Spring避免數據庫輪詢的最佳方法
是否有一種可能的方式,GET服務僅在有其他通道更新數據庫而不是連續輪詢時調用?什麼是最好的方法和如何實現它?
連續調用服務似乎是一個非常糟糕的主意。我想你需要一個數據庫觸發器,當行插入/更新/刪除時觸發。它可以將某些東西發佈到Web服務或將某些東西放在Message Queue上。
祝你好運。
我正在尋找一些使用Spring的實現/方法。謝謝 – user2968937
Web服務可以是Spring。您可以使用Spring Integration或JmsTemplate來處理Message Queue。在沒有使用數據庫來觸發更改事件的情況下,沒有好辦法做你想做的事情。 –
我能想到這個問題的架構答案。在彈簧控制器和數據庫之間使用消息傳遞解決方案。逸岸你將需要兩個隊列
EventSink的隊列 - 發佈所有從任何渠道,這queue.The用戶的始發將是服務管理又名dbservice數據庫更新數據的變更請求。
EventBroadcast隊列 - 將更改後的數據發佈數據庫更新發布到此隊列。理想情況下,dbservice應該在與db更新相同的事務中處理此發佈。所有頻道都可以訂閱此隊列以接收更新。
的優點來考慮這種做法將涉及
優點 - 這種方法不涉及數據庫服務,使性能和去耦從數據庫的變化。
缺點 - 複雜性增加
不斷輪詢不是那麼糟糕,因爲你可能想象。將消息推送給客戶端而不需要他們發出請求需要web-sockets或類似的來實現這一點。如果它不是來自服務器的大量休憩,而且不是太頻繁,例如數百萬和數百萬的請求,那麼我現在就離開它。
但是,如果這是一個大量的帶寬,我們正在談論它,那麼你不會希望被投票。您可能需要查看訂閱者類型模式,客戶端會在發生特定事件時訂閱通知。發生此事件時,服務器將向客戶端發送消息。
檢測此事件不應要求輪詢數據庫。對數據庫的修改應該觸發事件。如果你遇到這種情況,你可以在Spring中通過點減少來實現。
數據庫數據可以僅由桌面/移動客戶端更新,或者也可以有一些後端進程更改數據? – Insac