SQL Server 实时推送通知到 Node.JS

本文关键字:知到 Node JS 通知 Server 实时 SQL | 更新日期: 2023-09-27 18:34:28

我正在构建一个Web应用程序,简而言之,它在SQL Server和Node中获取结构相当差的数据.JS并将其移植到MongoDB。 我需要这样做的原因是,我需要从一个编写得相当糟糕的应用程序访问数据,该应用程序对于一个组织至关重要,我无法更改输入初始数据的代码。 翻译完成后,我可以让我的应用程序完成业务所需的操作。

现在,我的应用程序每30分钟轮询一次SQL Server以进行更改,然后通过Node.JS更新我的MongoDB,并且由于数据量大,不希望更频繁地轮询。

我需要做的是将来自SQL Server的实时通知以某种方式推送到我的Node.JS应用程序,无论是主动还是被动,都没有Node.JS结束,以便它可以更新我的Mongo数据库。

我用来获取数据的节点库是:https://github.com/patriksimek/node-mssql

我有几个可能的想法:

  • 让 SQL Server 向我的 NodeJS HTTP 服务端点发送某种通知
  • 让 NodeJS 运行一个流查询,每次进行更改时,该查询都会在我的端运行
  • 用 C# 编写一个应用程序来监视这些更改并将它们推送到我的 NodeJS HTTP 端点。
有一些似乎在谈论

这个问题,但大多数似乎都在谈论数据源起始点的更改(我无法更改(,而不是来自SQL Server本身。

SQL Server 实时推送通知到 Node.JS

我也有类似的情况,经过研究,我将采用的解决方案是编写一个.Net Core Windows服务,该服务除了侦听来自SQL Server的查询通知外什么都不做。当通知到达时,它将到达 nodejs REST 端点,通知它更改,并允许 nodejs 应用程序根据需要查询和处理数据。

我搜索并搜索了一种从nodejs执行查询通知的方法,但似乎不存在任何内容。您需要一个 .Net 应用程序。

但是,也就是说

,另一种可能性不是编写.Net Core Windows服务(如果需要,也可以编写 ASP.Net 应用程序(是使用EdgeJs实际运行与nodejs应用程序内联的.Net程序集(在同一进程中(。

我决定不走这条路,而是做Windows服务。但它也应该是可行的。

(我也意识到这个问题已经有 2 年了,所以你可能已经完成了这个项目,但我会把这些答案留在这里留给后人(

我必须首先说我没有实时解决方案。如果有实时解决方案,我不知道。我只想谈谈减少民意调查的负担。

我假设您可以控制SQL Server本身。您可以在 SQL Server 中设置一些内容来跟踪更改,并让轮询仅查看尚未由 Node 拉取的更改。

您是否可以控制更新/插入过程?如果您这样做,很容易将更改跟踪代码放在插入/更新代码旁边。我假设你没有,在这种情况下,我建议*查看triggers.这些基本上是附加到表的事件侦听器,允许您在插入/更新表之前、期间或之后执行 SQL,并允许您访问使用 deletedinserted 表更改/插入的数据。

* SQL Server 社区不喜欢触发器的原因有很多,其中一些原因在这篇 SQLServerCentral 文章中进行了讨论。要点:它们很难调试,当它们成为写入操作的一部分时会降低性能,并且注意不要创建循环触发器(更新表1触发trig1,更新表1,触发trig1等(。因此,如果要使用表上的触发器执行更改跟踪,请创建一个单独的表来跟踪这些更改,并且仅让触发器更新/插入该表

现在,您可以设置一个更改跟踪表,触发器会填充所做的任何更改以及何时进行更改,甚至可以设置一个bit字段来说明 Node 是否已提取这些更改。现在你所要做的就是让 Node 查看该表,只拉入它尚未拉入的更改。这张表可能会很快变得很大,因此对于民意调查来说很慢,所以我建议在标志或字段上放置一个index,说明进行更改的日期。现在,由于轮询速度很快,您应该能够减少间隔。

这不是一个理想的解决方案,可能需要做很多工作,所以最好等一会儿,看看是否有人想出更好的解决方案。

可以使用触发器和 CLR 存储过程解决此问题。更新表后,您可以执行 CLR 存储过程,例如向 Nodejs 发送通知。

相关文章: