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