【问题标题】:Real-Time Database Messaging实时数据库消息传递
【发布时间】:2017-03-23 07:12:43
【问题描述】:

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

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

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

很好奇这里可能存在哪些其他选项。我相信 MongoDB 和其他 no-sql 类型的引擎支持一些开箱即用的结构,但是在谷歌搜索更好的解决方案时我没有找到确切的结果。

【问题讨论】:

  • 您可以集成对讲系统以实现实时客户支持系统访问这里intercom.com

标签: node.js django postgresql redis socket.io


【解决方案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
});

请参阅 thatthat

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

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

【讨论】:

  • 谢谢,这就是我需要指出的领域。一旦我知道要谷歌什么,我就可以很好地解决这个问题。这个问题特别适合我的目标:stackoverflow.com/q/21117431/2123176
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-10-04
  • 2011-08-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多