2016-02-12 41 views
7

我建立,在很短的SQL Server,並通過Node.js的過移植它MongoDB是採取相當糟糕結構數據的Web應用程序。我需要這樣的原因是,我需要一個相當寫得不好的應用程序,是中央到我沒有改變從上這是越來越進入初始數據代碼能力的組織對數據的訪問。翻譯完成後,我可以讓我的應用程序執行業務需求。SQL服務器的實時推送通知到的node.js

現在我的應用程序是輪詢的SQL Server每30分鐘變化,然後通過Node.js的更新我的MongoDB,並且由於數據量,這是不可取的更加頻繁地輪詢。

我需要的發生是有從以某種方式不管是主動還是被動無Node.js的結束,以便它可以更新自己的Mongo的數據庫推到我的Node.js應用程序的SQL Server實時通知。

我用來獲取數據的節點庫:https://github.com/patriksimek/node-mssql

幾個可能的想法,我所做的是:

  • 具有SQL Server發出某種形式的通知,我的NodeJS HTTP服務端點
  • 有無運行的NodeJS流查詢,將在我結束的變化是由
  • 運行每次寫C#是手錶這些變化,並促使他們到我的HTTP的NodeJS端點的應用程序。

有幾個似乎談論這個,但大多數似乎談論的數據源起源點(我不能改變),而不是從SQL Server本身的變化。

+0

感謝編輯@JamesZ,讓我聽起來比我真的更聰明XD – Nitroware

+1

這是一個非常重要的問題。我希望它得到更多關注。 –

回答

0

我得說我沒有實時的解決方案前言本。如果有實時解決方案,我不知道。我只是想談談減少調查的負荷。

我假設你有在SQL Server本身的控制。您可以在SQL Server中設置一些內容來跟蹤更改並獲得輪詢,以僅查看尚未由Node拉取的更改。

你有過更新/插入過程控制?如果你這麼做,很簡單,將更改跟蹤代碼放在插入/更新代碼旁邊。我假設你沒有,在這種情況下,我建議*尋找triggers。這些基本上是事件監聽器附加到表上,允許您在插入/更新表之前,之中或之後執行SQL,並允許您使用deletedinserted表訪問要更改/插入的數據。

*觸發器是而不是由於憤怒的原因而受到SQL Server社區的歡迎,其中一些被討論爲on this SQLServerCentral article。事物的棘手:它們很難調試,它們會降低性能,因爲它們成爲寫操作的一部分,並且要小心不要創建循環觸發器(更新table1以觸發trig1,它會更新觸發trig1的table1等。 )。因此,如果您使用表格上的觸發器進行更改跟蹤,請創建一個單獨的表格,其中跟蹤這些更改,並且只允許觸發器更新/插入該表格

現在,你可以設置一個觸發與所做的任何更改填充的變化軌跡表,當他們被做,甚至一個bit場說節點是否已經退出這些更改。現在你所要做的就是讓Node查看那張表,並且只吸收尚未拖入的變化。這張桌子可能會變得非常快,因此投票速度會變慢,所以我建議在旗幟或字段上加上index,以表明變更的日期。現在由於民意調查很快,你應該能夠減少間隔。

這不是一個理想的解決方案,可能需要很多工作,所以最好等一會兒,看看有沒有人想出更好的解決方案。