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@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users

Reply via email to