现在我的应用程序每隔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本身.您可以在sql Server中设置某些内容以跟踪更改并获取轮询,仅查看Node尚未提取的更改.
您是否可以控制更新/插入过程?如果您这样做,请轻松将更改跟踪代码放在插入/更新代码旁边.我假设你没有,在这种情况下,我建议*查看triggers
.这些基本上是附加到表的事件监听器,允许您在插入/更新表之前,期间或之后执行sql,并允许您使用已删除和插入的表访问要更改/插入的数据.
*由于一些原因,sql Server社区不喜欢触发器,其中一些是在on this SQLServerCentral article讨论的.事情的要点:它们很难调试,它们会降低性能,因为它们成为写操作的一部分,并且要小心不创建循环触发器(更新了table1,触发trig1,更新table1,触发trig1等).因此,如果您使用表上的触发器进行更改跟踪,请创建一个单独的表,在其中跟踪这些更改,并且只让触发器更新/插入该表.
现在,您可以设置一个更改跟踪表,触发器将填充所做的任何更改,以及何时进行更改,甚至可能还有一些字段表示Node是否已撤消这些更改.现在你所要做的就是让Node查看那个表,并且只引入尚未引入的更改.这个表可能会变得非常快,因此调查速度很慢,因此我建议在标志或字段上添加一个索引,指出更改的日期.现在,由于民意调查很快,您应该能够减少间隔.