Mirth从磁盘上读得太慢了

时间:2014-09-17 05:32:37

标签: mirth

我正在使用Mirth 3.0.1版本。我正在阅读一个有34,000条记录的文件(使用文件阅读器)。每条记录都有45列,并且管道(|)是分开的。从磁盘读取文件时,Mirth花费了太多时间。 Mirth安装在文件所在的同一台服务器上。早些时候,我遇到了java头空间问题,我在文件mcserver.vmoptions&文件中设置-Xms1024m -Xmx4096m后解决了这个问题。 mcservice.vmoptions。现在我必须解决阅读性能问题。请在附件中找到相同的频道。

2 个答案:

答案 0 :(得分:0)

这个问题的答案在很大程度上取决于解决方案本身。例如,如果您在进行基准测试时进行转换,则问题可能不在于读取文件,而在于在Mirth中进行大量的过滤和转换。由于Mirth将您配置的所有内容转换为基本上在服务器上执行的一个巨大的Javascript,因此可能会导致性能问题。如果你做一些导致Mirth读取整个文件的事情,预处理器脚本也可能会产生问题。

同样,文件中的34.000行包含大量信息,只需使文件非常庞大和广泛处理。如果文件中的每条记录都应该在Mirth中创建新邮件,您可能还需要检查阅读器的批处理设置。

除此之外,磁盘读取操作的性能当然受到平台本身的基础结构和硬件的影响。您确实提到过您正在本地读取文件,并且您必须增加Mirth的内存。所有这一切当然都是一个问题。要制作基准测试,您需要将其与其他内容进行比较。也许写一个小的Java程序来读取文件以比较Mirth之外的性能。

答案 1 :(得分:0)

感谢您的建议。 我使用router.routeMessage('channelName','PartOfMsg')从具有34000条记录的文件中路由5000条记录(从一个通道到第二个通道)。这有助于从文件中更快地读取并同时处理记录。

对于Mirth社区,下面是将msg从一个通道路由到另一个通道的代码,如果您有批量处理的大量记录,此解决方案也适用于该要求

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

希望,这会有所帮助。