0

我正在尋找解決方案,看起來是一個複雜的問題。基本上,我需要找到最快和最可靠的方法來根據來自多個其他「分佈式」記錄系統的數據創建一個「主」數據庫(記錄系統)。讓我分解這個問題: 我有N個系統的記錄,每個記錄都附加了一個Web服務並響應數據請求。 N個Web服務中的每一個都標準化了響應對象模式,因此對於每個Web服務,XML/JSON響應數據模式都是完全相同的。 這個任務是創建一個單一的「主」數據庫,以儘可能最快的方式反映所有N記錄系統。 (基本上,通過一些程序/應用程序/程序等定期合併所有N個數據庫)。如何將多個系統的記錄數據庫系統複製到一個主系統的記錄數據庫

從每個「分佈式」記錄系統獲取數據的唯一方法是通過與其各自的Web服務進行交互。這是所有N系記錄擁有者同意的全球標準。

解決此問題的最有效方法是什麼?

這裏是被認爲是一種方法,但我認爲這種做法是不是最佳: 創建一個C#程序,將同時/ asynchrounously從每個Web服務請求數據,並將該數據推到一個臨時環境SQL Server。然後SQL Server將運行程序將這些數據合併到主數據庫中(目前這需要17個小時才能完成,顯然這是一段很長的時間)

這裏是移動部件的基本圖形,「??」在中間表示解決方案 Here is a basic drawing of the moving parts, the "??" in the middle represents the solution

+0

你的方法看起來不錯,但你的問題是缺乏一些細節。你寫道這種方法需要大約17個小時才能完成。那段時間有多少記錄被傳輸?瓶頸在哪裏?你如何將記錄發送到你的主要sql服務器? –

+0

嗨Zohar,我正在使用的方法作品,但在我看來並不理想。是的,在17個小時內,大約159273條記錄被保存到數據庫。現在使用當前解決方案的最大瓶頸在於,對Web服務的請求每個請求需要幾秒鐘,因此總處理時間大約爲17個小時。我可以在C#中使用TPL Task Parallel Library來爲請求使用多線程,但我仍然覺得解決方案比需要的更復雜。你怎麼看?同樣,我們的目標是儘量減少「總同步時間」 – joey

+0

我的最佳解決方案是,不探索隊列和「競爭消費者」模式是使用任務並行庫,是聚合所有需要請求的URI XML Web服務創建任務(可能一次批量爲100),並行運行GET請求。這會將時間從17小時(一系列請求)減少到更少,也許不到2小時(並行運行請求) – joey

回答

0

謝謝Zohar。事實證明,我仍然會用Task Parallel Library來解決這個問題。我將繼續使用任務,但決定創建一批執行異步的任務(5-10),然後針對所有Web URL使用ConcurrentQueue。這將使我儘量減少時間。

確實有一個很好的理由來關注「瓶頸」,每個Web服務器都有不同的「瓶頸率」(缺少更好的單詞)。我將配置我的算法創建N個任務,N與Web服務關聯並可配置。因此,例如,如果Web服務1的性能很高,我將創建更多任務(線程)以並行運行請求。謝謝。