【问题标题】:Subscribe to changes in MySQL database without polling无需轮询即可订阅 MySQL 数据库中的更改
【发布时间】:2015-05-16 16:10:48
【问题描述】:

我有一个 MySQL 数据库,它由另一个应用程序更新,我想订阅该应用程序以从我的 node.js 服务器进行更改。是否可以监视数据库的任何更新,而无需长时间轮询所有行/列以对其值进行任何更改?

我见过的一个潜在解决方案是使用 redis 订阅数据库以侦听任何更改,然后通知我的客户端(在这种情况下将是我的服务器)。如果可能的话,我如何将 redis 订阅到 MySQL 数据库?

【问题讨论】:

  • 我编辑了标题以阐明关键约束并使问题主体更加清晰。我还删除了一个过于笼统的标签,以将其限制为可以提供帮助的回答者。
  • 如果可以选择,Postgres 确实支持 LISTEN 和 NOTIFY 语句,它们完全符合您的要求

标签: mysql node.js redis publish-subscribe


【解决方案1】:

您不能只在您的表中添加一个updated 列吗?

您可以在该列上添加 ON UPDATE CURRENT_TIMESTAMP,该列会在每次更新该行时自动存储当前时间。该规则适用于数据库本身,因此您无需更新任何其他使用该数据库的客户端,它会自动运行。

然后,任何客户端都可以根据上次检查更新的时间进行查询。您只需要根据其updated 字段SELECT 行。

这种方式只检查一列,而且查询速度非常快。

您也可以索引日期时间字段,apperently。这可能会使查询确实非常快。

【讨论】:

  • 我应该补充一点,我不相信您可以“收听” MySQL 更新。如果可以的话,您将需要对每一次更新执行计算……甚至是不重要的更新。我考虑过链接stackoverflow.com/questions/2884478/…,但我不在乎答案。触发器可能会起作用,但您可能仍然需要以某种方式轮询更新
  • 谢谢!,我不确定我这样做是否正确,但是如果在创建时间戳字段时在 MYSQL 工作台上检查唯一索引框,是否会确保日期时间字段被索引?
  • 不要使用唯一索引:如果在同一时间戳创建两条记录(例如在同一秒内创建两次,这很有可能),它将拒绝其中一条记录。您必须通过 MySQL Workbench 中的 Indexes 选项卡添加索引。请参阅:dev.mysql.com/doc/workbench/en/wb-table-editor-indexes-tab.html。我相信您只需勾选该列并选择“应用”即可为updated 字段添加索引
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-08-09
  • 1970-01-01
  • 2020-10-07
  • 1970-01-01
  • 1970-01-01
  • 2020-08-09
  • 2018-05-15
相关资源
最近更新 更多