A small update.  I ran the example below starting with 90 rules and running 
down to 1.  The execution time remains the same so I don't think the problem 
has to do with something left over from the previous call to fireAllRules().  
This really should be a simple example and I am still at a loss as to why it 
doesn't work quickly.

Again, any help appreciated!

Ron
----------------------------------------
>> -----Original Message-----
>> From: [EMAIL PROTECTED]
>> [mailto:[EMAIL PROTECTED] On Behalf Of Ron Kneusel
>> Sent: Thursday, June 26, 2008 12:47 PM
>> To: rules-users@lists.jboss.org
>> Subject: [rules-users] Drools 4 poor performance scaling?
>>
>>
>> I am testing Drools 4 for our application and while sequential mode is
> 
>> very fast I get very poor scaling when I increase the number of facts 
>> for stateful or stateless sessions.  I want to make sure I'm not doing
> 
>> something foolish before deciding on whether or not to use Drools 
>> because from what I am reading online it should be fast with the 
>> number of facts I have.
>>
>> The scenario:  I have 1000 rules in a DRL file.  They are all of the
>> form:
>>
>> rule rule0000
>>     when 
>>         Data(type == 0, value> 0.185264);
>>         Data(type == 3, value < 0.198202);
>>     then 
>>         insert(new AlarmRaised(0));
>>         warnings.setAlarm(0, true);
>> end
>>
>> where the ranges checked on the values and the types are randomly 
>> generated.  Then, I create a Stateful session and run in a loop timing
> 
>> how long it takes the engine to fire all rules as the number of 
>> inserted facts increases:
>>
>>         //  Run 
>>         for(j=0; j < 100; j+=5) {
>>
>>             if (j==0) {
>>                 nfacts = 1;
>>             } else {
>>                 nfacts = j;
>>             }
>>
>>             System.out.println(nfacts + ":");
>>
>>             //  Get a working memory
>>             StatefulSession wm = ruleBase.newStatefulSession();
>>
>>             //  Global - output
>>             warnings = new Alarm();
>>             wm.setGlobal("warnings", warnings);
>>
>>             //  Add facts
>>             st = (new Date()).getTime();
>>             for(i=0; i < nfacts; i++) {
>>                 wm.insert(new Data(rand.nextInt(4), 
>> rand.nextDouble()-0.5));
>>             }
>>             en = (new Date()).getTime();
>>             System.out.println("    facts = " + (en-st));
>>
>>             //  Now run the rules
>>             st = (new Date()).getTime();
>>             wm.fireAllRules();
>>             en = (new Date()).getTime();
>>             System.out.println("    rules = " + (en-st));
>>
>>             //  Clean up
>>             wm.dispose();
>>
>>             System.out.println("\n");
>>         }
>>
>> This code is based on the HelloWorldExample.java code from the manual 
>> and the setup for the rule base is the same as in the manual.  As the 
>> number of facts increases runtime increases dramatically:
>>
>> facts -- runtime (ms)
>> 10 -- 168
>> 20 -- 166
>> 30 -- 344
>> 40 -- 587
>> 50 -- 1215
>> 60 -- 1931
>> 70 -- 2262
>> 80 -- 3000
>> 90 -- 4754
>>
>> with a maximum memory use of about 428 MB RAM.  By contrast, if I use 
>> sequential stateless sessions, everything runs in about 1-5 ms.
>>
>> Is there something in my set up that would cause this, or is this how 
>> one would expect Drools to scale?  I read about people using thousands
> 
>> of facts so I suspect I'm setting something up incorrectly.
>>
>> Any help appreciated!
>>
>> Ron

_________________________________________________________________
Need to know now? Get instant answers with Windows Live Messenger.
http://www.windowslive.com/messenger/connect_your_way.html?ocid=TXT_TAGLM_WL_Refresh_messenger_062008
_______________________________________________
rules-users mailing list
rules-users@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users

Reply via email to