2011-07-29 66 views
0

我想弄清楚如何並行化一些過程代碼來在表中創建記錄。並行化TSQL CLR過程

這裏的情況(抱歉,我不能在實際代碼的方式提供太多):

我要預測何時將需要車輛服務,基於以前的服務日期,當前行駛里程,每項服務的計劃每日裏程和里程差異。總而言之 - 這是非常程序化的,對於每輛車,我需要考慮到它的歷史,當前的維修狀態,每日裏程(可根據里程計劃中定義的範圍改變),以及維修。

目前,我正在計算所有這一切在PHP中,100輛車大約需要20秒。由於這將來可能會擴大到幾千,20秒太長了。

所以我決定嘗試在CLR存儲過程中做到這一點。起初我以爲我會嘗試多線程,但是我很快發現在TSQL主機上做起來並不容易。我被建議允許TSQL自己完成並行化。但我不知道如何。如果這是不是事實的代碼需要創建記錄,我可以把它定義爲一個函數,做:

SELECT dbo.PredictServices([FleetID]) FROM Vehicles 

和TSQL應該弄清楚它可以並行化,但我知道沒辦法的程序。

有什麼我可以做並行化呢?

回答

0

您收到的建議是正確的。您的CLR存儲過程中不提供用於並行的.NET框架工具。另請注意,CLR存儲過程的適用範圍相當狹窄,並且對SQL Server的性能和可伸縮性產生負面影響。

如果我正確理解任務,您需要爲某些記錄計算函數PredictServices並將結果存儲回數據庫。在這種情況下,您可以選擇CLR存儲過程PredictServices只是數據訪問/直接轉換數據。最佳實踐是創建WWF(Windows Workflow Foundation)服務來執行計算並從PHP中調用它。在Workflow Service中,您可以實施任何解決方案,包括涉及並行性的解決方案