2017-07-19 24 views
-1

我想丰富数据以创建XML文件。Mule批量作业耗时过长以丰富数据

第一个查询执行Group By以获取事务头。

第二个查询获取与来自同一文件头部相匹配的所有记录(详细信息)以丰富该消息。

问题是需要大约一秒来运行丰富数据的查询。我需要运行184,764头的这个过程。在每个标题一秒钟的时间内,这项工作需要很长时间。有没有办法完成同样的事情,而不必查询数据库的细节?所有记录是否可以先加载并从内存中获取细节?代码如下:

<db:generic-config name="Generic_Database_Configuration" url="${db.url}" 
driverClassName="${driver.class.name}" doc:name="Generic Database 
Configuration"/> 
<data-mapper:config name="List_Map__To_List_Map_" 
transformationGraphPath="list_map__to_list_map_.grf" 
doc:name="List_Map__To_List_Map_"/> 
<data-mapper:config name="List_Map__To_XML_1" 
transformationGraphPath="list_map__to_xml_1.grf" 
doc:name="List_Map__To_XML_1"/> 
<batch:job name="OrceTransactionImportBatch"> 
    <batch:input> 
     <db:select config-ref="Generic_Database_Configuration" 
doc:name="Database"> 
      <db:parameterized-query><![CDATA[SELECT TRANDATED, STORED, REG#D 
AS REG_D, TRAN#D AS TRAN_D, VIP#D AS VIP_D, VIP#D AS VIPNO, SUM(RETAIL*QTY) 
AS TOTAL, 
CONCAT(SUBSTRING(TRANDATED,1,4),      
CONCAT('-',CONCAT(SUBSTRING(TRANDATED,5,2),     
CONCAT('-',CONCAT(SUBSTRING(TRANDATED,7,2),'T00:00:00'))))) AS 
BusinessDayDate 
FROM ORCTEXDTLP 
WHERE DGROUPID IN (SELECT HGROUPID FROM ORCTEXHDRP WHERE HPRCFLAG = 'P') 
GROUP BY STORED, TRANDATED, REG#D, TRAN#D, VIP#D 
FETCH FIRST 60 ROWS ONLY]]></db:parameterized-query> 
     </db:select> 
     <logger message="before mapper..." level="INFO" doc:name="before 
mapper..."/> 
    </batch:input> 
    <batch:process-records> 
     <batch:step name="Batch_Step"> 
      <data-mapper:transform config-ref="List_Map__To_List_Map_" 
doc:name="List&lt;Map&gt; To List&lt;Map&gt;"/> 
      <logger message="before enricher..." level="INFO" 
doc:name="before enricher..."/> 
     </batch:step> 
     <batch:step name="Batch_Step1"> 
      <logger message="BEFORE FOR EACH..." level="INFO" 
doc:name="Logger"/> 
      <enricher target="#[variable:LineItem]" doc:name="Message 
Enricher"> 
       <db:select config-ref="Generic_Database_Configuration" 
doc:name="Database"> 
        <db:parameterized-query><![CDATA[SELECT TRANCODED, 
CONCAT(SUBSTRING(TRANDATED,1,4),      
CONCAT('-',CONCAT(SUBSTRING(TRANDATED,5,2),     
CONCAT('-',CONCAT(SUBSTRING(TRANDATED,7,2),'T00:00:00'))))) AS 
BusinessDayDate, STORED AS RetailStoreID, TRAN#D AS TransactionNumber, REG#D 
AS WorkstationID, RETAIL AS TransactionGrandAmount, VIP#D AS AlternateID, 
DISCOUNT, VOUCHER#D AS VOUCHER_D, TRIM(SKU#) AS ItemID, A03K2 AS 
UnitCostPrice, RETAIL AS RegularSalesUnitPrice, (RETAIL*QTY) AS 
ExtendedAmount, QTY AS Quantity, ROW_NUMBER() OVER() rownumber, 
(RETAIL*QTY) AS ActualRetail, 
VOUCHERCD AS VoucherCode, VOUCHER#D AS VoucherNumber 
FROM FBF02P 
LEFT OUTER JOIN KSK2P ON SKUK2 = SKU# 
WHERE TRANDATED = #[payload[0]['TRANDATED']] AND STORED = #[payload[0]     
['STORED']] AND REG#D = #[payload[0]['REG_D']] AND TRAN#D = #[payload[0]   
['TRAN_D']]]]></db:parameterized-query> 
       </db:select> 
      </enricher> 
      <expression-component doc:name="Expression"><![CDATA[# 
[payload[0].LineItem=flowVars.LineItem]]]></expression-component> 
      <logger message="#[payload[0]['TRAN_D']]" level="INFO" 
doc:name="Logger"/> 
     </batch:step> 
     <batch:step name="Batch_Step2"> 
      <batch:commit streaming="true" doc:name="Batch Commit"> 
       <data-mapper:transform config-ref="List_Map__To_XML_1" 
doc:name="List&lt;Map&gt; To XML"/> 
       <file:outbound-endpoint path="${output.path}" 
outputPattern="TranImport#[server.dateTime.format('yyyyMMdd_HHmmss')].xml" 
responseTimeout="10000" doc:name="File"/> 
      </batch:commit> 
     </batch:step> 
    </batch:process-records> 
    <batch:on-complete> 
     <logger message="DONE..." level="INFO" doc:name="Logger"/> 
    </batch:on-complete> 
</batch:job> 
<flow name="OrceTransactionImportFlow"> 
     <poll doc:name="Poll"> 
      <fixed-frequency-scheduler frequency="1" timeUnit="DAYS"/> 
      <db:update config-ref="Generic_Database_Configuration" 
doc:name="Database"> 
      <db:parameterized-query><![CDATA[UPDATE ORCTEXHDRP 
SET HPRCFLAG = 'P' 
WHERE HPRCFLAG = '' OR HPRCFLAG = 'P']]></db:parameterized-query> 
      </db:update> 
     </poll> 
    <choice doc:name="Choice"> 
     <when expression="#[payload == 0]"> 
      <logger message="Zero payload..." level="INFO" 
doc:name="Logger"/> 
     </when> 
     <otherwise> 
      <batch:execute name="OrceTransactionImportBatch" 
doc:name="OrceTransactionImportBatch"/> 
     </otherwise> 
    </choice> 
</flow> 

回答

0

在数据库连接器配置中,您应该设置连接池配置文件。