2017-07-19 12 views
-1

XMLファイルを作成するためにデータを豊かにしようとしています。Muleバッチジョブが長すぎてデータを豊かにできない

最初のクエリは、トランザクションヘッダーを取得するためのグループ化を行います。

2番目のクエリは、同じファイルのヘッダーに一致するすべてのレコード(詳細)を取得して、メッセージを充実させます。

問題は、データを充実させるクエリを実行するのに約1秒かかることです。私はこのプロセスを184,764個のヘッダーのために実行する必要があります。ヘッダーごとに1秒でこのジョブは時間がかかります。詳細をデータベースに問い合わせることなく同じことを達成する方法はありますか?すべてのレコードを最初にロードし、代わりにメモリから詳細を取得できますか?

<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

接続プールのプロファイルを設定する必要があります。

関連する問題