2017-07-08 92 views
0

我有一個JavaScript的Web應用程序,我使用Node.JS作爲服務器組件。輪詢數據庫獲取值的最佳選擇是什麼?

我想將我的應用程序與數據庫集成。這個數據庫有一個表格,裏面有一個名爲「狀態」的字段,可以頻繁更改(每隔幾分鐘左右)。

我希望我的網絡應用程序能夠實時瞭解狀態字段的值。

我目前的方法:

我currenlty,在Javscript的AJAX功能,發送一個HTTP請求到我的Node.js服務器。 Node.js服務器從數據庫中選擇記錄,然後將結果返回給AJAX函數,AJAX函數將結果顯示在屏幕上。我設置了一個間隔來每秒執行一次該功能。

這似乎不是一個很好的選擇,它導致我的服務器上的很多流量。

什麼是實時監控SQL字段的正確方法?

+1

爲什麼不將變量保存在內存中並避免輪詢數據庫呢?在狀態更改時,更新內存和數據庫中的值。這取決於您的用例和資源 – vol7ron

+0

我不控制狀態更改。該字段來自第三方數據庫。我需要我的應用程序來了解它的價值。 – cleverpaul

+0

第三方數據庫?你可以直接訪問它?如果沒有檢查或更新連接以便將它推送給您時,您還能知道什麼時候進行了更新?如果這是你管理一個數據庫,我建議檢查出火力地堡,否則,我很好奇,看看別人怎麼說。看起來像使用Web套接字和內存管理的簡單設置。 – vol7ron

回答

1

如果所有的客戶有興趣在數據庫中的相同的價值和你的數據庫的情況防止任何非輪詢的情況下,那麼你將要投票從客戶端轉移到服務器,因此服務器可以一勞永逸地輪詢客戶。這將顯着限制服務器和數據庫服務器上的負載。

然後,您可以讓每個客戶端通過webSocket(或socket.io)連接連接到服務器,並且當數據庫中的值更改(並且只有這樣)時,纔可以向每個客戶端發送更新消息webSocket連接。這將使用更少的CPU和帶寬以及客戶端電池。

相關問題