一尘不染

Node.js-监视数据库中的更改

node.js

我正在使用node.js服务器在Web应用程序和数据库之间创建一个“接近实时”套接字。当前,我使用的是MySQL,它每秒在节点中轮询一次,以检查表是否有任何更改(基于时间戳)。

我想知道是否有使用MySQL进行此类操作的特定技术?目前,我只是在运行SQL查询并在下一次轮询之前使用setTimeout。

我知道在这样的实例中使用NoSQL数据库更为普遍,但我对技术并不满意,我宁愿使用SQL。

有没有人有任何经验或技巧来监视带有节点的SQL数据库?


阅读 338

收藏
2020-07-07

共1个答案

一尘不染

我个人不会为此使用轮询机制。我认为这是pub / sub
mq的一个很好的用例,它是数据库顶部的组件,允许消费者订阅特定频道以关注他们关注的实体上的更改事件。

例如:

  1. 有人要求更改模型
  2. 模特儿广播变更事件
  3. 将更改排队以保留在数据库中
  4. 触发消息队列中特定通道上的更改集,以分发给所有相关方

您可以使用节点EventEmitter对此类事物使用非常简单的进程内发布/订阅机制,并且由于需要扩展,具有持久性要求或需要跨语言MQ,可以使用Rabbitmq,zeromq等技术我已经开始在我的一个应用程序中实现非常轻巧的功能来做到这一点:https
:
//github.com/jmoyers/mettle/blob/master/src/pubsub.coffee

归结为:

pubsub.sub('users.*', function(updates){
    // Interested party handles updates for user objects
});

这样,您就不会对数据库施加愚蠢的轮询压力。实际上,变更分布完全独立于写入数据库

乔希

2020-07-07