2017-03-06 8 views
0

4000 개의 항목이있는 파일을 가져와 debatch하면 하나의 항목에서 데이터가 손상되면 전체 메시지가 손실됩니다.Biztalk Debatched 메시지 값 캐싱

Biztalkmap은 MAP에서 SLQ 데이터를 단순히 캐싱 한 메시지를 토론하기 전에 SQL 서버에 액세스하고 있지만 이제는 4000 개의 고유 한 맵이 있습니다.

캐싱하지 않으면 프로세스가 약 30 배 오래 걸립니다.

성능이 많이 떨어지지 않으면 서 SQL Server의 데이터를 어딘가에 캐시 할 수 있습니까?

답변

0

지도에서 SQL Server에 액세스하는 것을 항상 피할 것입니다. 실수로지도 디자인에서 실수로 인해 또는 예상치 못한 볼륨 또는지도에서의 사용으로 인해 실수로 더 많은 전화를 걸기 쉽습니다. 특정 포트 또는 포트 세트). 사실, 나는 일반적으로 다른 시스템이나 서비스에 액세스해야하는 맵에서 어떤 종류의 호출도하지 않을 것이지만 반드시해야한다면 캐싱이 도움이 될 수 있습니다.

예를 들어 MemoryCache을 사용하여 캐시 할 수 있습니다. 내가 그와 함께 사용하는 패턴은 일반적으로 먼저 값에 대한 캐시를 확인 사용자 정의 C#을 라이브러리를 포함하고, 당신이 paritcular 항목 또는 전체 캐시, 예를 위해 하나 (SQL을 확인 미스가 있다면 :

object _syncRoot = new object(); 

... 
public string CheckCache(string key) 
{ 
    string check = MemoryCache.Default.Get(key) as string; 

    if (check == null) 
    { 
     lock (_syncRoot) 
     { 
      // make sure someone else didn't get here before we acquired the lock, avoid duplicate work 
      check = MemoryCache.Default.Get(key) as string; 
      if (check != null) return check; 

      string sql = @"SELECT ..."; 

      using (SqlConnection conn = new SqlConnection(connStr)) 
      { 
       conn.Open(); 

       using (SqlCommand cmd = conn.CreateCommand()) 
       { 
        cmd.CommandText = sql; 
        cmd.Parameters.AddWithValue(...); 

        // ExecuteScalar or ExecuteReader as appropriate, read values out, store in cache 
        // use MemoryCache.Default.Add with sensible expiration to cache your data 
       } 
      } 
     } 
    } 
    else 
    { 
     return check;   
    } 
} 

은 염두에 두어야 할 몇 가지 :

  1. AppDomain으로 당에서 작동하고, 파이프 라인 및 오케스트레이션 별도의 응용 프로그램 도메인에서 실행하면 두 곳 모두에서이지도를 실행하는 경우, 당신은 캐시 될 겁니다. 두 곳에서 AppDomains를 공유하려고 할 때 추가 된 복잡성은 아마도 그만한 가치는 없겠지만 실제로 필요하다면 캐싱을 분리해야합니다. WCF NetTcp 서비스와 같은 것입니다.
  2. 더 많은 메모리를 사용합니다. BizTalk의 모든 캐시에 모든 것을 던져서는 안되며, 캐시 할 경우 컴퓨터에 사용 가능한 메모리가 많고 BizTalk가 그것을 사용할 수 있어야합니다.
  3. MemoryCache에는 원하는 문자열을 저장할 수 있습니다. 여기서 문자열을 사용하지만 다른 기본 유형이나 객체 일 수도 있습니다.
2

지도에서 데이터베이스에 액세스하는 것은 권장되지 않습니다.

정적 참조 데이터를 검색하는 것처럼 들릴지 모르겠지만 또 다른 옵션은 참조 데이터가 메시지로 한 번 검색되는 오케스트레이션으로 프로세스를 이동하는 것입니다.

그런 다음 참조 데이터와 비즈니스 메시지를 제공하는 이중 입력 맵을 사용할 수 있습니다.

이 후편에서 오케스트레이션에서 의견을 말하거나 순차 호송을 사용할 수 있습니다.