我正在构建一个web应用程序,简而言之,它在Server中接收结构非常糟糕的数据,并通过Node.JS将其移植到MongoDB。我需要这样做的原因是,我需要访问一个编写得相当糟糕的应用程序中的数据,这个应用程序是组织的核心,我没有能力在上更改输入初始数据的代码。一旦翻译完毕,我就可以让我的应用程序做生意想要做的事情。
现在,我的应用程序是每30分钟轮询Server一次更改,然后通过Node.JS更新我的Node.JS,而且由于数据量大得多,所以更频繁地轮询是不可取的。
我需要做的是让来自Server的实时通知以某种方式推送到我的Node.JS应用程序中,无论是主动的还是被动的,没有Node.js的末端,以便它可以更新我的Mongo数据库。
我用来获取数据的节点库是:https://github.com/patriksimek/node-mssql
我有几个可能的想法:
有几个人似乎在谈论这一点,但大多数人似乎谈论的是数据源起始点上的更改(我无法更改),而不是SQL Server本身。
发布于 2019-01-22 13:58:48
我有类似的情况,在研究之后,我将使用的解决方案是编写一个.Net核心窗口服务,它只会监听Server的查询通知。当通知到达时,它将命中nodejs REST端点,将更改通知它,并允许nodejs应用程序根据需要查询和处理数据。
我搜索并搜索了一种从nodejs执行查询通知的方法,但似乎没有这样的方法。您需要一个.Net应用程序。
但是,与编写.Net核心窗口服务(如果需要的话编写ASP.Net应用程序)不同,另一种可能是使用EdgeJ与nodejs应用程序(在同一进程中)实际运行.Net程序集。
我决定不走那条路,而是去做windows服务。但它也应该是可行的。
(我也意识到这个问题已经2年了,所以你可能已经完成了这个项目,但我会把这些答案留给后人)
发布于 2018-01-10 14:35:31
我得先说我没有实时解决方案。如果有一个实时的解决方案,我不知道。我只想谈谈如何减少民意测验的工作量。
我假设您可以控制Server本身。您可以在Server中设置一些内容,以跟踪更改,并获得轮询,以便只查看Node尚未拉动的更改。
您对更新/插入过程有控制权吗?(如果有),很简单,将更改跟踪代码与插入/更新代码放在一起。不过,我假设您没有,在这种情况下,我建议您查看一下triggers。这些基本上是附加到表的事件侦听器,它们允许您在表的插入/更新之前、期间或之后执行SQL,并允许您使用deleted和inserted表访问正在更改/插入的数据。
*由于种种原因,Server社区不喜欢触发器,其中一些原因被讨论过( 关于这篇SQLServerCentral文章 )。问题的关键是:它们很难调试,当它们成为写操作的一部分时会降低性能,并且要小心不要创建循环触发器(table1是更新触发trig1、更新table1、触发trig1等的触发器)。因此,如果您使用表上的触发器进行更改跟踪,则创建一个单独的表来跟踪这些更改,只允许触发器更新/插入表。
现在,您可以设置一个更改跟踪表,触发器填充了所做的任何更改,以及这些更改发生的时间,甚至还可以设置一个bit字段来说明Node是否已经删除了这些更改。现在你要做的就是让Node看看那张桌子,只需要调整一下,它还没有拉进去。这张表可能很快就会变大,因此投票速度很慢,所以我建议在标志或字段上添加一个index,以说明更改的日期。现在,由于投票很快,您应该能够减少间隔。
这不是一个理想的解决方案,而且可能需要做很多工作,所以最好等一等,看看是否有人想出了更好的解决方案。
发布于 2018-12-23 04:04:38
您可以解决触发器和CLR存储过程的问题。更新表之后,可以执行CLR存储过程,例如向Nodejs发送通知。
https://stackoverflow.com/questions/35372594
复制相似问题