node.js - 实时数据库消息传递

标签 node.js django postgresql redis socket.io

我们在 Django 中有一个针对 PGSQL 数据库运行的应用程序。我们已经发展到支持的功能之一是在后端数据库中更新数据时向我们的 UI 发送实时消息。

所以...例如,我们在我们的 UI 中显示客户表的内容,当记录从后端客户数据库表中添加/删除/更新时,我们通过一些 redis/将这些更新实时回显到我们的 UI socket.io/node.js 魔法。

目前,我们已经在 Django 表模型上使用重载的 save() 方法为整个事情推出了我们自己的解决方案。这实际上对我们当前的功能非常有效,但随着表继续增长到 GB 的数据,它开始在一些更大的表上变慢,因为我们的引擎挖掘当前的“订阅”UI 并适本地发出消息,需要更新哪些客户。

想知道这里可能存在哪些其他选项。我相信 MongoDB 和其他非 SQL 类型的引擎支持一些开箱即用的结构,但在谷歌搜索更好的解决方案时我没有找到确切的答案。

最佳答案

Currently we've rolled our own solution for this entire thing using overloaded save() methods on the Django table models.

您可能不想在应用级别上工作,而是在较低的数据库级别上工作。

在行插入后添加一个 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
});

参见 thatthat .

您将能够在 Python 中执行相同的操作 https://pypi.python.org/pypi/pgpubsub/0.0.2 .

最后,您可能想要使用 data-partitioning在 PostgreSQL 中。长话短说,PostgreSQL 已经拥有您需要的一切:)

关于node.js - 实时数据库消息传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40507599/

相关文章:

node.js - Node.js中如何使用express区分HTTP请求和XML HTTP请求?

javascript - 为什么 Promise 返回一个对象 Promise,即使我明确地输入 `return`?

python - 过滤 Django ManyToMany 字段中的初始数据

sql - PostgreSQL Concat 2 数字给我错误

ruby-on-rails - 在 "trust"模式下使用 postgresql 将 Rails 应用程序部署到 github 和 heroku 的安全隐患

regex - 在postgresql中按模式查找重复值

json - 在 Microsoft BotBuilder NodeJS SDK 中设置 waterfall 对话的下一步

node.js - 如何使用 typegraphql-prisma 保护用户数据免受彼此侵害

Django order_by,多个字段和优先级

mysql - 尝试制作 Django/Mezzanine "Page last updated by on date"