[ 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() &lt;= 
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() &lt;= 
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() &lt;= 
> 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

Reply via email to