2014-09-17 2 views
0

Mirth 3.0.1 버전을 사용 중입니다. 나는 34,000 개의 레코드를 가진 파일 (파일 판독기 사용)을 읽고있다. 모든 레코드는 45 개의 열을 가지며 파이프 (|)로 구분됩니다. 디스크에서 파일을 읽는 동안 너무 오래 걸립니다. Mirth는 파일이있는 서버와 동일한 서버에 설치됩니다. 이전에는 파일 mcserver.vmoptions & mcservice.vmoptions에서 -Xms1024m -Xmx4096m을 설정 한 후 해결 된 Java 헤드 스페이스 문제에 직면했습니다. 이제 읽기 성능 문제를 해결해야합니다. 첨부 파일에서 동일한 채널을 찾으십시오.Mirth이 디스크에서 너무 느리게 읽음

답변

0

이 문제의 해답은 솔루션 자체에 크게 좌우됩니다. 예를 들어, 벤치 마크 할 때 변환을 수행하는 경우 문제는 파일을 읽는 것이 아니라 Mirth에서 엄청난 양의 필터링 및 변환을 수행하는 것일 수 있습니다. Mirth은 구성한 모든 것을 기본적으로 서버에서 실행되는 하나의 거대한 자바 스크립트로 변환하기 때문에 성능 문제를 야기 할 수 있습니다. Mirth가 전체 파일을 읽도록하는 작업을 수행하면 전 처리기 스크립트로 인해 문제가 발생할 수도 있습니다.

파일의 34.000 줄에 방대한 양의 정보가 포함되어있어 파일을 매우 크고 처리하기가 간단 할 수도 있습니다. 파일의 모든 레코드가 Mirth 내에 새 메시지를 작성해야하는 경우 독자의 일괄 처리 설정을 확인해야 할 수도 있습니다.

그리고이 외에도 디스크의 읽기 작업 성능은 물론 플랫폼 자체의 인프라와 하드웨어에 많은 영향을받습니다. 당신은 당신이 파일을 로컬에서 읽고 있다고 말했고, 당신은 Mirth을위한 기억을 증가시켜야 만했다. 물론이 모든 것은 그 자체로 문제가 될 수 있습니다. 벤치마킹을하려면 이것을 다른 것과 비교하고 싶을 것입니다. 어쩌면 Mirth 이외의 성능을 비교하기 위해 파일을 읽는 작은 Java 프로그램을 작성하십시오.

+0

이 질문에 대한 답변을 제공하지 않습니다. 비평하거나 저자의 설명을 요청하려면 게시물 아래에 의견을 남기십시오. 자신의 게시물에 언제나 댓글을 달 수 있으며 충분한 [평판] (http://stackoverflow.com/help/whats-reputation)을 갖게되면 [모든 게시물에 댓글을 달 수] 있어야합니다 (http://stackoverflow.com/help/privileges/comment). –

+0

@max_ 너는 옳다. Mirth 관련 질문이 적 으면 저에게 평판을 사기위한 충분한 기회를주지 못합니다. 그래서 저는 "이 질문을 무시해야합니까?"또는 "도움을 얻기 위해 더 많은 정보를 얻기 위해 시스템을 남용해야합니까?"라는 질문에 약간의 걸림돌이 있습니다. 미안합니다. – gurun

+0

@max_ 메타에 제안 된대로 질문을 변경하여 대답처럼 들립니다. – gurun

0

제안 해 주셔서 감사합니다. 나는 router.routeMessage ('channelName', 'PartOfMsg')를 사용하여 34000 개의 레코드가있는 파일에서 5000 개의 레코드 (한 채널에서 두 번째 채널로)를 라우팅했습니다. 이는 파일에서 더 빨리 읽고 레코드를 동시에 처리하는 데 도움이됩니다.

환락 지역 사회를위한

, 아래 경로에 대한 코드는, 당신은 일괄

In Source Transformer, 

debug = "ON"; 

XML.ignoreWhitespace = true; 

logger.debug('Inside source transformer "SplitFileIntoFiles" of channel: SplitFile'); 

var 
subSegmentCounter = 0, 
xmlMessageProcessCounter = 0, 
singleFileLimit = 5000, 
isError = false, 
xmlMessageProcess = new XML(<delimited><row><column1></column1><column2></column2></row></delimited>), 

newSubSegment = <row><column1></column1><column2></column2></row>, 

totalPatientRecords = msg.children().length(); 
logger.debug('Total number of records found in the patient input file are: '); 
logger.debug(totalPatientRecords); 

try{ 
for each (seg in msg.children()) 
{ 

xmlMessageProcess.appendChild(newSubSegment); 

xmlMessageProcess['row'][xmlMessageProcessCounter] = msg['row'][subSegmentCounter]; 

if (xmlMessageProcessCounter == singleFileLimit -1) 
{ 
logger.debug('Now sending the 5000 records to the next channel from channel DOR Batch File Process IHI'); 

router.routeMessage('DOR SendPatientsToMedicare',xmlMessageProcess); 

logger.debug('After sending the 5000 records to the next channel from channel DOR Batch File Process IHI'); 

xmlMessageProcessCounter = 0; 

delete xmlMessageProcess['row']; 
} 
subSegmentCounter++; 
xmlMessageProcessCounter++; 
}// End of FOR loop 
}// End of try block 

catch (exception) 
{ 
logger.error('The exception has been raised in source transformer "SplitFileIntoFiles" of channel: SplitFile'); 
logger.error(exception); 

globalChannelMap.put('isFailed',true); 

globalChannelMap.put('errDesc',exception); 

return true; 
} 


if (xmlMessageProcessCounter > 1) 
{ 
try 
{ 
logger.debug('Now sending the remaining records to the next channel from channel DOR Batch File Process IHI'); 
router.routeMessage('DOR SendPatientsToMedicare',xmlMessageProcess); 
logger.debug('After sending the remaining records to the next channel from channel DOR Batch File Process IHI'); 
delete xmlMessageProcess['row']; 
} 

catch (exception) 
{ 
logger.error('The exception has been raised in source transformer "SplitFileIntoFiles" of channel: SplitFile'); 
logger.error(exception); 

globalChannelMap.put('isFailed',true); 

globalChannelMap.put('errDesc',exception); 

return true; 
} 

} 
return true; 
// End of JavaScript 

희망을 처리하는 기록의 대부분을 경우 다른 채널에 하나 개의 채널에서 MSG가,이 솔루션은 요구 사항에 대해서도이다 도움이 될 것입니다.

관련 문제