0

私は Drools エンジンを使用していますが、実装側からのみです。フレームワークは私のためにセットアップされており、RULES側のみを使用できます(自分で説明できるといいのですが)。

つまり、私の問題は、約 100 万行を Oracle DB から WM にロードしようとしているということです。このタスクには時間がかかりすぎることがわかりました。オブジェクトをロードするために使用するルールは次のとおりです。実行時にエンジンに挿入される他のオブジェクトとともに、これらの DB オブジェクトをルールの一部として使用する必要があるため、数百万のレコードを WM にロードすることは必須です)。

ルール "Load_CMMObject" 顕著性 10 ループなし

when

    not CMMObjectShouldBeRefreshed() over window:time( 1500m )

then
    log("Fetching Load_CMMObject");
    ExecutionContext ctx = getExecutionContext();


      String getObjectTypeSQL = "select AID , BC_OBJECT_ID , ALR_EQP_NAME , ALR_FROM_SITE from CMM_DB.COR_EQP_VW";
    PreparedStatement pStmt = null;

    try {

        pStmt = MTServiceAccessor.getDBAccessService().prepareNativeStatement(ctx, getObjectTypeSQL, false);
        ResultSet rs = pStmt.executeQuery();
        while (rs.next()) {

            String aid  = rs.getString(1);
            int objectID = rs.getInt(2);
            String  eqpName = rs.getString(3);
            String fromSite = rs.getString(4);


            CMMObject cmmObject = new CMMObject();

            cmmObject.setIp(aid);
            cmmObject.setObjectID(objectID);
            cmmObject.setEqpName(eqpName);
            cmmObject.setFromSite(fromSite);


            insert(cmmObject);
            //log("insert  Object --->  " + cmmObject.getIp());
                            }
        log("Finish Loading All cmm_db.BCMED_EQP_VW");
    } catch (Exception e) {
        log("Failed to Load ServiceName_TBL" + e);
    } finally {
        if (pStmt != null) {
            try {
                pStmt.close();
            } catch (Exception e) {
                log("Failed to close pstmt");
            }
        }
    }

    //log(" finished loading trails into the WM1");
    CMMObjectShouldBeRefreshed cMMObjectShouldBeRefreshed = new       CMMObjectShouldBeRefreshed();
    //log(" finished loading trails into the WM2");
    insert (cMMObjectShouldBeRefreshed);
    //log("finished loading trails into the WM3");

終わり

Drools エンジンに約 20Gb の RAM を割り当てるサーバーを使用しており、8 つの 1.5GHZ クアッド コア プロセッサを備えています。

問題は、5000 個の raw をロードするのに約 1 分かかることです --> したがって、DB から 100 万個のレコードをロードしたい場合、タスクを完了するのに 200 分かかり、これは多すぎます。

ここで何か助けていただければ幸いです。

どうもありがとう!

4

0 に答える 0