从DB加载milion对象

时间:2015-07-27 17:47:11

标签: database drools drools-planner

我正在使用Drools引擎,但仅来自Implementation端。 frameWork是为我设置的,我只能使用RULES方面(我希望我能够自己解释)。

说 - 我的问题是我试图将大约1百万行从Oracle DB加载到WM中,我发现这个任务需要太长时间,这是我用来加载对象的规则: (BTW - 将mion记录加载到WM中的请求是强制性的,因为我需要将这些DB对象作为我的规则的一部分以及在运行时注入引擎的其他对象)

规则“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四核处理器。

问题是我花了大约1分钟装载5000个原料 - >因此,如果我想从数据库中加载1百万条记录,我需要200分钟才能完成任务,这太过分了。

我将在此感谢任何帮助,

非常感谢!

0 个答案:

没有答案