2010-02-22 80 views
4

大家下午好,Web服務或Windows服務或SQL CLR集成?

我有點茫然,面臨一些緊迫的期限,所以希望有人能提供一些建議。

我的起點將是SQL Server數據庫中的一個表格,其中兩個字段是從gps單元獲得的x,y座標。我將負責對這些位置進行地理編碼(獲取實際街道地址),並將結果寫入成功表或錯誤表中。我正在封裝實際進行地理編碼過程的類庫(C#),但對於將所有內容綁定在一起的最佳方法非常困惑。

理想情況下,我想從SQL Server發送數據集/數據表到某種類型的服務,其中所有記錄將進行地理編碼,並且每條記錄的結果/失敗將被寫回適當的表中。由於數據庫和DLL將駐留在同一臺服務器上,我不明白我爲什麼要使用Web服務。因此,我的其餘調查指向了Windows服務或SQL CLR集成。我的主要問題是:

  1. 其中一種方法比其他方法更合適嗎?
  2. 這種方法是否可以接受(根據最佳實踐)?

任何提示,意見,建議將不勝感激。

在附註中,如果它不是很明顯,我是一個相對新手的程序員。作爲一名程序員,這個網站一直是我成長過程中寶貴的工具,我非常感謝那些花時間閱讀帖子並提供專家建議的人。

回答

3

您的地理編碼代碼可能會連接到地理編碼服務,這就排除了SQL CLR集成。在技​​術上可行的是,從SQL CLR內部獲取外部資源,特別是Web服務是您可以犯的最大錯誤。在幾天的時間內,由於CLR線程劫持,您的服務器將被凍結在工作人員飢餓狀態,並有保證。

最好的方法是使用ETL策略。將座標轉儲到暫存表中,然後開始ETL過程並將所有座標轉換爲地理編碼,並將結果寫入成功和錯誤表。 ETL方法通常用於批處理,中斷和恢復等。 ETL可以是一個啓動應用程序的SQL工作,一個SSIS包,有很多方法可以做到這一點,重要的是將工作分離到臨時表以及提供暫停/恢復語義。您現在擁有的dll代碼(我認爲這是一個地理編碼Web服務客戶端代理代碼)可能是您項目的0.001%。

過程是否需要作爲Web服務公開,與ETL過程完全正交,應該由客戶端連接需求和技術來驅動。換句話說,如果客戶端代碼preffer使用WS上傳座標,只要您考慮大型數據集並且只要爲結果提供分離的,異步的和排隊的語義即可。

+0

爲什麼使用SQL Server CLR會導致線程匱乏?如果服務是一個單身人士,並在完成後妥善處理它的資源,那麼它仍然被認爲是一個壞主意? – 2011-03-30 00:55:17