0

手続き型コードを並列化してテーブルにレコードを作成する方法を理解しようとしています。

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

以前のサービス日、現在のマイレージ、計画された1日のマイレージ、および各サービス間のマイレージの差に基づいて、車両サービスがいつ必要になるかを予測する必要があります。

全体として、これは非常に手続き的なものであり、車両ごとに、その履歴、現在の整備状態、毎日の走行距離(走行距離計画で定義された範囲に基づいて変更される可能性があります)、および整備の順序を考慮する必要があります。

現在、これらすべてをPHPで計算しており、100台の車両で約20秒かかります。これは将来数千に拡張される可能性があるため、20秒は長すぎます。

そこで、CLRストアドプロシージャで試してみることにしました。最初はマルチスレッド化を試してみようと思っていましたが、TSQLホストで実行するのは簡単ではないことがすぐにわかりました。TSQLが並列化自体を実行できるようにすることをお勧めしました。しかし、私にはその方法がわかりません。コードがレコードを作成する必要があるという事実がなければ、関数として定義して次のようにすることができます。

SELECT dbo.PredictServices([FleetID]) FROM Vehicles

そして、TSQLはそれを並列化できることを理解する必要がありますが、プロシージャの代替手段はありません。

これを並列化するために私にできることはありますか?

4

1 に答える 1

0

あなたが受け取った推薦は正しいものです。CLR ストアド プロシージャで使用できる並列処理のための .NET フレームワーク機能がありません。また、CLR ストアド プロシージャのニッチはかなり狭く、SQL Server のパフォーマンスとスケーラビリティに悪影響を与えることに注意してください。

タスクを正しく理解している場合は、一部のレコードに対して関数 PredictServices を計算し、結果をデータベースに保存する必要があります。この場合、PredictServices が単なるデータ アクセス/データの単純な変換であれば、CLR ストアド プロシージャがオプションになる可能性があります。ベスト プラクティスは、WWF (Windows Workflow Foundation) サービスを作成して計算を実行し、それを PHP から呼び出すことです。Workflow Service では、並列処理を含むソリューションを実装できます。

于 2011-08-01T19:36:27.817 に答える