2016-11-09 118 views
0

我們在Django中運行了一個針對PGSQL數據庫的應用程序。當數據在後端數據庫中更新時,我們支持的其中一項功能是實時向我們的用戶界面發送消息。實時數據庫消息傳遞

因此...例如,我們在用戶界面中顯示客戶表的內容,因爲記錄是從後端客戶數據庫表添加/刪除/更新的,我們通過一些redis實時地將這些更新回顯到我們的用戶界面/socket.io/node.js魔術。

目前我們已經在Django表模型上使用重載的save()方法爲整個事情推出了我們自己的解決方案。這對我們當前的函數來說確實很好,但隨着表格不斷增長爲GB的數據,它會開始在一些較大的表格上放慢速度,因爲我們的引擎會通過當前的'訂閱'用戶界面和適當的消息進行適當的更新,哪些客戶。

好奇在這裏可能存在其他選項。我相信MongoDB和其他非sql類型的引擎支持這樣一些開箱即用的結構,但是當谷歌搜索獲得更好的解決方案時,我沒有找到確切的結果。

+0

你可以整合對講機實時客戶支持系統訪問https://www.intercom.com – Satendra

回答

1

目前我們已經在Django表模型上使用 重載的save()方法推出了我們自己的整個解決方案。

而不是在應用程序級別上工作,您可能需要在較低的數據庫級別上工作。

行插入後添加PostgreSQL觸發器,並使用pg_notify通知外部應用程序的更改。

然後在的NodeJS:

var PGPubsub = require('pg-pubsub'); 

var pubsubInstance = new PGPubsub('postgres://[email protected]/tablename'); 

pubsubInstance.addChannel('channelName', function (channelPayload) { 
    // Handle the notification and its payload 
    // If the payload was JSON it has already been parsed for you 
}); 

thatthat

而且你將能夠在Python https://pypi.python.org/pypi/pgpubsub/0.0.2中得到相同的結果。

最後,您可能想在PostgreSQL中使用data-partitioning。長話短說,PostgreSQL已經擁有了你所需要的一切:)

+0

謝謝你,那是我需要指出的領域。一旦我知道谷歌什麼東西,我可以很好地打擊這一點。這個問題特別關注我正在走向的方向:http://stackoverflow.com/q/21117431/2123176 – slumtrimpet