当前位置: 首页 > 面试题库 >

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

艾凯捷
2023-03-14
问题内容

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

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

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

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


问题答案:

我个人不会为此使用轮询机制。我认为这是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
});

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

乔希



 类似资料:
  • 数据库解决方案:每当工具A运行时,它会添加一个数据库记录,其中包括时间戳、元数据和状态“运行”。如果执行了工具A,而工具B应该运行,它会将DB记录状态更新为“NEXT_TOOL_B”。工具B经常查询DB中具有“NEXT_TOOL_B”状态的记录。如果它发现了一些东西,工具B将使用来自DB记录的元数据运行。 虽然我意识到数据库解决方案的缺点,例如从工具B进行持续轮询,但我错过了基于消息的解决方案中的

  • 我在SprintBoot 2上配置了一个DB连接(HikariCP)。我在application.properties中定义了poolName: 我想监控空闲的数据库连接的数量,所以我试图创建一个线程来监控数据库连接: } 但我得到一个例外,它无法找到poolName HikariConnectionPool的实例。关于如何获得HikariCP管理的空闲DB连接,有什么建议吗? 进一步分析,我可以

  • 本文向大家介绍在SAP HANA中更改数据库视图,包括了在SAP HANA中更改数据库视图的使用技巧和注意事项,需要的朋友参考一下 您可以更改视图,然后我们可以使用“更改视图”命令来更改视图。 示例 我们已应用ALTER命令来更新名称为View_EmpInfo的现有视图,该视图正在对ID列的两个表应用内部联接以创建数据库视图。

  • 问题内容: 我正在使用WatchService来监视目录中的更改,尤其是在目录中创建新文件。下面是我的代码- 当我在“ mk”目录中创建文件时,我正在收到通知。但是,当我在此目录中复制某些文件时,打开该复制文件时出现异常。 我的猜测是Windows Copier对话框仍然锁定了该文件,而我无法打开该文件。因此,基本上我想知道是如何通知文件已被其他进程关闭。 上面代码的输出就像- 我已创建文件“ ”

  • 问题内容: 我正在实现一个购物车,并希望将数据存储在localStorage中。我想观察变量的变化,以便可以更新localStorage cart变量看起来像这样: 这是手表的代码。 这是用户更改模型的HTML。 使用以下代码,永远不会触发该方法。我不确定自己在做什么错。我检查变量是否更改,但未触发更新。 问题答案: 仅在其第一个参数中计算字符串或函数参数。像这样改变你: 要么 请参阅参考API

  • 问题内容: 我刚刚在Windows上安装了node.js。我有一个不运行的简单代码: 我得到:错误:听EADDRINUSE 是否有一个 配置文件 告诉node.js在特定端口上侦听? 问题是我已经让Apache监听了端口80。 编辑: 问题答案: 没有配置文件,除非您自己创建一个。但是,端口是函数的参数。例如,侦听端口8124: 如果查找打开的端口时遇到问题,可以转到命令行并输入: 查看每个适配器