[ http://jira.codehaus.org/browse/DROOLS-419?page=all ]
Mark Proctor updated DROOLS-419:
--------------------------------
Description:
I have the Complex (300) rule(s) with multiple Objects.
<rule name="Rule check1" salience="1">
<parameter identifier="orgA">
<class>Organization</class>
</parameter>
<parameter identifier="region">
<class>Region</class>
</parameter>
<parameter identifier="dept">
<class>Department</class>
</parameter>
<parameter identifier="loadObject">
<class-field field="compareDisplay"
value="LOAD">LoadObject</class-field>
</parameter>
<java:condition><![CDATA[orgA.getId() == 1 && dept.getId() ==
1]]></java:condition>
<java:condition><![CDATA[orgA.getId() == 1 && region.getId() ==
1]]></java:condition>
<java:condition><![CDATA[loadObject.getName() == 1 && dept.getId() ==
1]]></java:condition>
<java:condition>orgA.getCreateValue() <=
region.getCreatedValue()</java:condition>
<java:condition>orgA.getName().equals("NONE")</java:condition>
<java:consequence>
orgA.setName("Org 1");
dept.setName("DEPT 1");
region.setName("REGION 1");
System.out.println("Load : "+loadObject.getCompareDisplay() );
System.out.println("Org: "+orgA.getName() );
System.out.println("Dept: "+dept.getName() );
System.out.println("region: "+region.getName() );
drools.retractObject(loadObject);
drools.retractObject(orgA);
drools.retractObject(dept);
drools.retractObject(region);
</java:consequence>
</rule>
When I assert the objects ( Region(size = 1153bytes), Organization(size =
1063bytes), Department(size = 1063bytes), LoadObject(size = 1063bytes)) into
WM,
All 4 Objects asserted to WM
MAX_ITER_SIZE
@ 10 Each;( 4 * 10 ) works great
@ 20 Each;( 4 * 20 ) works great
@ 30 Each;( 4 * 10 ) after 20 objects the asserting each object into working
Memory gets degraded.
asserting is done something like this:
WorkingMemory workingMemory = ruleBase.newWorkingMemory();
for (int index = 0; index < MAX_ITER_SIZE; index++) {
System.out.println("i=" + index );
workingMemory.assertObject(orgObject[index]);
workingMemory.assertObject(loadObject[index]);
workingMemory.assertObject(departmentObject[index]);
workingMemory.assertObject(regionObject[index]);
}
workingMemory.fireAllRules();
So, are there any limitations on Working Memory size capabilities. I am exactly
doing as mentioned above.
Similarly I performed another test, with one simple object at 1000 count into
Working memory and 10000 rules loaded does not have any issues.
Simple Rule:
<rule name="Rule check1" salience="1">
<parameter identifier="loadObjectA">
<class-field field="compareDisplay"
value="UNDONE">LoadObject</class-field>
</parameter>
<java:condition>loadObjectA.getName() == 1</java:condition>
<java:consequence>
loadObjectA.setCompareDisplay("FINISHED 1");
System.out.println(loadObjectA.getCompareDisplay() );
drools.retractObject(loadObjectA);
</java:consequence>
</rule>
Please let me know, if I am missing doing anything wrong.
Note: We are in the process of Evaluating DROOLS rule engine for our project,
we need benchmark, performance with big rules and many objects.
was:
I have the Complex (300) rule(s) with multiple Objects.
<rule name="Rule check1" salience="1">
<parameter identifier="orgA">
<class>Organization</class>
</parameter>
<parameter identifier="region">
<class>Region</class>
</parameter>
<parameter identifier="dept">
<class>Department</class>
</parameter>
<parameter identifier="loadObject">
<class-field field="compareDisplay"
value="LOAD">LoadObject</class-field>
</parameter>
<java:condition><![CDATA[orgA.getId() == 1 && dept.getId() ==
1]]></java:condition>
<java:condition><![CDATA[orgA.getId() == 1 && region.getId() ==
1]]></java:condition>
<java:condition><![CDATA[loadObject.getName() == 1 && dept.getId() ==
1]]></java:condition>
<java:condition>orgA.getCreateValue() <=
region.getCreatedValue()</java:condition>
<java:condition>orgA.getName().equals("NONE")</java:condition>
<java:consequence>
orgA.setName("Org 1");
dept.setName("DEPT 1");
region.setName("REGION 1");
System.out.println("Load : "+loadObject.getCompareDisplay() );
System.out.println("Org: "+orgA.getName() );
System.out.println("Dept: "+dept.getName() );
System.out.println("region: "+region.getName() );
drools.retractObject(loadObject);
drools.retractObject(orgA);
drools.retractObject(dept);
drools.retractObject(region);
</java:consequence>
</rule>
When I assert the objects ( Region(size = 1153bytes), Organization(size =
1063bytes), Department(size = 1063bytes), LoadObject(size = 1063bytes)) into
WM,
All 4 Objects asserted to WM
MAX_ITER_SIZE
@ 10 Each;( 4 * 10 ) works great
@ 20 Each;( 4 * 20 ) works great
@ 30 Each;( 4 * 10 ) after 20 objects the asserting each object into working
Memory gets degraded.
asserting is done something like this:
WorkingMemory workingMemory = ruleBase.newWorkingMemory();
for (int index = 0; index < MAX_ITER_SIZE; index++) {
System.out.println("i=" + index );
workingMemory.assertObject(orgObject[index]);
workingMemory.assertObject(loadObject[index]);
workingMemory.assertObject(departmentObject[index]);
workingMemory.assertObject(regionObject[index]);
}
workingMemory.fireAllRules();
So, are there any limitations on Working Memory size capabilities. I am exactly
doing as mentioned above.
Similarly I performed another test, with one simple object at 1000 count into
Working memory and 10000 rules loaded does not have any issues.
Simple Rule:
<rule name="Rule check1" salience="1">
<parameter identifier="loadObjectA">
<class-field field="compareDisplay"
value="UNDONE">LoadObject</class-field>
</parameter>
<java:condition>loadObjectA.getName() == 1</java:condition>
<java:consequence>
loadObjectA.setCompareDisplay("FINISHED 1");
System.out.println(loadObjectA.getCompareDisplay() );
drools.retractObject(loadObjectA);
</java:consequence>
</rule>
Please let me know, if I am missing doing anything wrong.
Note: We are in the process of Evaluating DROOLS rule engine for our project,
we need benchmark, performance with big rules and many objects.
Fix Version: (was: 2.1)
> WM unable to handle 4 objects * 25 times 300 rules
> --------------------------------------------------
>
> Key: DROOLS-419
> URL: http://jira.codehaus.org/browse/DROOLS-419
> Project: drools
> Type: Test
> Components: all
> Versions: 2.0-rc-1
> Environment: XP,
> Reporter: venkat
> Attachments: Book1.xls
>
>
> I have the Complex (300) rule(s) with multiple Objects.
> <rule name="Rule check1" salience="1">
> <parameter identifier="orgA">
> <class>Organization</class>
> </parameter>
> <parameter identifier="region">
> <class>Region</class>
> </parameter>
> <parameter identifier="dept">
> <class>Department</class>
> </parameter>
> <parameter identifier="loadObject">
> <class-field field="compareDisplay"
> value="LOAD">LoadObject</class-field>
> </parameter>
> <java:condition><![CDATA[orgA.getId() == 1 && dept.getId() ==
> 1]]></java:condition>
> <java:condition><![CDATA[orgA.getId() == 1 && region.getId() ==
> 1]]></java:condition>
> <java:condition><![CDATA[loadObject.getName() == 1 && dept.getId() ==
> 1]]></java:condition>
> <java:condition>orgA.getCreateValue() <=
> region.getCreatedValue()</java:condition>
> <java:condition>orgA.getName().equals("NONE")</java:condition>
> <java:consequence>
> orgA.setName("Org 1");
> dept.setName("DEPT 1");
> region.setName("REGION 1");
> System.out.println("Load : "+loadObject.getCompareDisplay() );
>
> System.out.println("Org: "+orgA.getName() );
> System.out.println("Dept: "+dept.getName() );
> System.out.println("region: "+region.getName() );
>
> drools.retractObject(loadObject);
> drools.retractObject(orgA);
> drools.retractObject(dept);
> drools.retractObject(region);
> </java:consequence>
> </rule>
> When I assert the objects ( Region(size = 1153bytes), Organization(size =
> 1063bytes), Department(size = 1063bytes), LoadObject(size = 1063bytes)) into
> WM,
> All 4 Objects asserted to WM
> MAX_ITER_SIZE
> @ 10 Each;( 4 * 10 ) works great
> @ 20 Each;( 4 * 20 ) works great
> @ 30 Each;( 4 * 10 ) after 20 objects the asserting each object into working
> Memory gets degraded.
> asserting is done something like this:
> WorkingMemory workingMemory = ruleBase.newWorkingMemory();
> for (int index = 0; index < MAX_ITER_SIZE; index++) {
> System.out.println("i=" + index );
> workingMemory.assertObject(orgObject[index]);
> workingMemory.assertObject(loadObject[index]);
> workingMemory.assertObject(departmentObject[index]);
> workingMemory.assertObject(regionObject[index]);
> }
> workingMemory.fireAllRules();
> So, are there any limitations on Working Memory size capabilities. I am
> exactly doing as mentioned above.
> Similarly I performed another test, with one simple object at 1000 count
> into Working memory and 10000 rules loaded does not have any issues.
> Simple Rule:
> <rule name="Rule check1" salience="1">
> <parameter identifier="loadObjectA">
> <class-field field="compareDisplay"
> value="UNDONE">LoadObject</class-field>
> </parameter>
> <java:condition>loadObjectA.getName() == 1</java:condition>
> <java:consequence>
> loadObjectA.setCompareDisplay("FINISHED 1");
> System.out.println(loadObjectA.getCompareDisplay() );
> drools.retractObject(loadObjectA);
> </java:consequence>
> </rule>
> Please let me know, if I am missing doing anything wrong.
> Note: We are in the process of Evaluating DROOLS rule engine for our project,
> we need benchmark, performance with big rules and many objects.
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
http://jira.codehaus.org/secure/Administrators.jspa
-
For more information on JIRA, see:
http://www.atlassian.com/software/jira