2011-07-29 7 views
0

테이블에 레코드를 만드는 절차 코드를 병렬화하는 방법을 알아 내려고하고 있습니다.TSQL CLR 프로 시저 병렬화

여기 상황 (미안 내가 실제 코드의 방법으로 많이 제공 할 수 없습니다)입니다 :

나는 차량 서비스가 이전 서비스 날짜에 따라, 필요한시기를 예측하기가

, 현재 주행 거리, 계획된 일일 마일리지 및 각 서비스 간의 마일리지 차이.

대체로 매우 절차 적입니다. 각 차량마다 내역, 현재 서비스 상태, 일일 마일리지 (마일리지 요금제에 정의 된 범위에 따라 바뀔 수 있음) 및 서비스.

현재 PHP로이 모든 것을 계산하고 있으며 100 대의 차량에는 약 20 초가 걸립니다. 이것은 앞으로 수천 개로 확장 될 수 있기 때문에 20 초가 지나치게 길다.

그래서 CLR 저장 프로 시저에서 시도해보기로했습니다. 처음에는 멀티 스레딩을 시도 할 것이라고 생각했지만 TSQL 호스트에서하는 것은 쉽지 않은 것으로 나타났습니다. TSQL이 병렬 처리 자체를 해결할 수 있도록 허용하는 것이 좋습니다. 그러나 나는 어떻게 될지 모른다. 이 코드는 레코드를 만들 필요가있는 사실 아니었다면 나는 함수로 정의 할 수 :

SELECT dbo.PredictServices([FleetID]) FROM Vehicles 

을 그리고 TSQL은 그 병렬화 할 수 파악해야하지만 절차에 대한 대안이없는 알고.

이것을 병렬 처리 할 수있는 방법이 있습니까?

답변

0

받은 추천은 올바른 것입니다. CLR 저장 프로 시저에서 사용할 수있는 병렬 처리를위한 .NET Framework 기능이 없습니다. 또한 CLR Stored Procedures의 틈새 시장은 다소 좁으며 SQL Server의 성능과 확장성에 부정적인 영향을 미친다는 점도 명심하십시오.

제대로 이해하면 일부 레코드에 대해 PredictServices 함수를 계산하고 결과를 다시 데이터베이스에 저장해야합니다. 이 경우 CLR 저장 프로 시저가 제공 될 수 있습니다. PredictServices는 데이터 액세스/직접적인 데이터 변환 일뿐입니다. 가장 좋은 방법은 WWF (Windows Workflow Foundation) 서비스를 작성하여 계산을 수행하고 PHP에서 호출하는 것입니다. 워크 플로 서비스에서는 병렬 처리가 포함 된 솔루션을 구현할 수 있습니다.

관련 문제