[rules-users] Drools 4 poor performance scaling?

Mark Proctor mproctor at codehaus.org
Thu Jun 26 13:37:26 EDT 2008


Ron,

Can you send me your project in  zip, i'd be interesting to see this.

Mark
Ron Kneusel wrote:
> 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
>
> _________________________________________________________________
> The other season of giving begins 6/24/08. Check out the i’m Talkathon.
> http://www.imtalkathon.com?source=TXT_EML_WLH_SeasonOfGiving
> _______________________________________________
> rules-users mailing list
> rules-users at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/rules-users
>
>   




More information about the rules-users mailing list