我正在使用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分钟才能完成任务,这太过分了。我将在此感谢任何帮助,
非常感谢!