Add*_*ons 10 javascript c# sql-server mongodb node.js
我正在构建一个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本身.
我有类似的情况,经过研究,我打算采用的解决方案是编写一个 .Net Core Windows 服务,它除了侦听来自 SQL Server 的查询通知之外什么都不做。当通知到达时,它将命中 nodejs REST 端点,通知它更改,并允许 nodejs 应用程序根据需要查询和处理数据。
我搜索并搜索了一种从 nodejs 执行查询通知的方法,但似乎不存在此问题。您需要一个 .Net 应用程序。
但是,也就是说,另一种可能性而不是编写 .Net Core Windows 服务(或 ASP.Net 应用程序,如果您愿意)是使用EdgeJs实际运行与您的 nodejs 应用程序内联的 .Net 程序集(在同一进程中)。
我决定不走那条路,而是做 Windows 服务。但它也应该是可行的。
(我也意识到这个问题已经有 2 年历史了,所以你可能已经完成了这个项目,但我会把这些答案留在这里供后代使用)
小智 2
我必须先说我没有实时解决方案。如果有实时解决方案,我不知道。我只想谈谈减少民意调查的负载。
我假设您可以控制 SQL Server 本身。您可以在 SQL Server 中设置一些内容来跟踪更改并进行轮询以仅查看 Node 尚未拉取的更改。
您可以控制更新/插入过程吗?如果您这样做,很简单,将更改跟踪代码与插入/更新代码放在一起。我假设您不这样做,在这种情况下,我建议*查看triggers. 这些基本上是附加到表的事件侦听器,允许您在表插入/更新之前、期间或之后执行 SQL,并允许您使用 和 表访问正在更改/插入的deleted数据inserted。
* SQL Server 社区不喜欢触发器有很多原因,其中一些原因在这篇 SQLServerCentral 文章中进行了讨论。要点:它们很难调试,当它们成为写入操作的一部分时,它们会降低性能,并且要小心不要创建循环触发器(更新 table1 会触发 trig1,更新 table1,触发 trig1 等。 )。因此,如果您要使用表上的触发器进行更改跟踪,请创建一个单独的表来跟踪这些更改,并且只让触发器更新/插入该表。
现在,您可以设置一个更改跟踪表,触发器将填充所做的任何更改以及更改的时间,甚至可能还有一个bit字段来说明 Node 是否已提取这些更改。现在您所要做的就是让 Node 查看该表并仅提取尚未提取的更改。该表可能会很快变得很大,因此投票速度会很慢,因此我建议index在标志或字段上放置一个,说明更改的日期。现在,由于轮询速度很快,您应该能够缩短间隔。
这不是一个理想的解决方案,并且可能需要大量工作,因此最好等待一段时间,看看是否有人提出更好的解决方案。
| 归档时间: | 
 | 
| 查看次数: | 2132 次 | 
| 最近记录: |