我们在Django中有一个运行PGSQL数据库的应用程序。我们已经成长为支持的功能之一是在后端数据库中更新数据时实时向我们的UI发送消息。
所以...例如我们在UI中显示客户表的内容,因为从后端客户数据库表中添加/删除/更新记录,我们通过一些redis实时回显这些更新到我们的UI socket.io/node.js magic。
目前,我们已经使用Django表模型上的重载save()方法为这整个事物推出了自己的解决方案。这对于我们当前的功能实际上非常有效,但随着表格继续增长为GB的数据,随着我们的引擎通过当前“订阅”的UI和适当的消息进行挖掘,需要更新所需的更新表格,它开始放慢速度。哪个客户。
很好奇这里可能存在的其他选项。我相信MongoDB和其他无sql类型的引擎支持一些开箱即用的结构,但是当谷歌搜索更好的解决方案时,我找不到确切的命中。
答案 0 :(得分:1)
目前我们已经使用了这个整体推出了自己的解决方案 在Django表模型上重载了save()方法。
您可能希望在较低的数据库级别上工作,而不是在应用程序级别上工作。
在插入行后添加PostgreSQL触发器,并使用pg_notify通知外部应用程序更改。
然后在NodeJS中:
var PGPubsub = require('pg-pubsub');
var pubsubInstance = new PGPubsub('postgres://username@localhost/tablename');
pubsubInstance.addChannel('channelName', function (channelPayload) {
// Handle the notification and its payload
// If the payload was JSON it has already been parsed for you
});
你可以在Python https://pypi.python.org/pypi/pgpubsub/0.0.2中使用相同的内容。
最后,您可能希望在PostgreSQL中使用data-partitioning。长话短说,PostgreSQL已经拥有了你需要的一切:)