2011-07-29 12 views
0

プロシージャコードを並列化してテーブルにレコードを作成する方法を理解しようとしています。TSQL CLRプロシージャを並列化する

ここでの状況(申し訳ありませんが、私は実際のコードの方法で多くを提供することはできません)です。

は、私は車のサービスは以前のサービスの日付に基づいて、必要とされるであろうと、現在の走行距離を予測する必要があり、計画された1日の走行距離と各サービス間の走行距離の差。

すべての点で、非常に手続き的です。各車両について、履歴、現在のサービス状態、毎日のマイレージ(マイレージプランで定義された範囲に基づいて変更可能)、およびサービス。

現在、私はこれを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から呼び出すことです。ワークフローサービスでは、並列性を含む任意のソリューションを実装できます。