2016-11-09 120 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