2013-10-20 44 views
0

我的項目的總體目標是收集來自多個911調度中心的當前緊急事件信息,並通過web服務將該信息發送給我們的服務器,它將顯示我們地區的緊急事件清單。我目前在每一個調度中心收集數據的方式是這樣的:頻繁間隔(3秒...)跟蹤(非特定數據庫服務器)數據庫更改

  • 調度中心具有某種數據庫服務器上運行的存儲所有的事故信息
  • 我有一個查詢數據庫中設置一個以xml格式返回所有當前緊急事件
  • 我有一個每3秒鐘運行一次查詢(實際上是一個存儲過程)的Windows服務,然後將該數據(xml)發送到我們的webservice
  • 當我們的服務器接收信息,它會刪除(從我們的數據庫,而不是調度中心)所有當前的事件信息和重新將它與「新」數據放在一起

這種方法的問題是我們發送大量冗餘數據。我想要做的只是發送自上次運行sproc以來發生更改的數據庫行。我的想法是讓我的Windows服務做這樣的事情。運行sproc並將結果存儲在某種數組/字典中。下一次運行sproc(3秒鐘後)是將新結果與現有數組進行比較,並僅提取差異併發送它們...想將數據作爲JSON而不是XML發送到我們的Web服務。 。不知道有什麼想法的人有最好做到這一點(不一定是特定的代碼,但更多的概述...)使用C#...

編輯

經過一番調查多,我想我想要的是沿着「數據集到列表」類型的過程......這將允許我將每個記錄轉換爲自定義對象,然後創建這些對象的列表...然後可以存儲該對象列表在內存中,可以使用下一組數據(3秒鐘後)與原始列表進行比較,以查看是否有任何更改... Windows服務不一定會調用SQL Server sproc,因此需要將此代碼與其他數據庫服務器配合使用。應該注意的是,記錄數在每個數據集返回將可能只有10-15最多......我們不是在談論成千上萬的記錄......

回答

0

要運行也會產生一些問題 因爲新的Windows服務是一個911的電話,您可以存儲您上次提取最後一次數據的最後時間和日期。然後你可以從這個日期和時間收集數據到最近的時間,每3秒做一次,然後你只有改變了的數據行。 你也應該使用JSON格式而不是XML(更瘦格式) 我也建議你使用REST API,而不是SOAP

你也可以考慮SQL Tasks

0

你可以在桌子上建立CDC(S)涉及並查找自上次調查以來發生的更改。當然,那會在你和你存儲的proc之間引入一個層,但是這樣就行了。

+0

標題提到「非特定數據庫服務器」,所以我認爲調度中心數據庫是一個異構混合。不只是SQL Server。 –

+0

這是正確的Martin,調度中心可以使用任何類型的數據庫服務器,所以我想要的邏輯可以在任何地方使用,而不僅僅是SQL Server ... –

+0

CDC存在其他RDBMS'。 HTTP://文檔。oracle.com/cd/B28359_01/server.111/b28313/cdc.htm http://flexviews.sourceforge.net/flexcdc.html http://pgfoundry.org/projects/postgrescdc/ –