Peter, attached is the collection of the rules, and the beans to reproduce.
You may be able to shed some light on the jess one.

Michael.

On 4/27/06, Peter Lin <[EMAIL PROTECTED]> wrote:
did the user post the entire source for his test in drools3 and JESS?

peter


On 4/26/06, Michael Neale <[EMAIL PROTECTED]> wrote:
>
> yeah in my noodling I got < 5 seconds, but its was just a guess. I would
> like to know what Jess does.
> I gather there are 50 million combinations to test, so 0.2 seconds seems a
> little unrealistic... but no hard facts.
>
> On 4/27/06, Peter Lin < [EMAIL PROTECTED]> wrote:
> >
> > looking at some recent results I got, 20 seconds seems a bit off.
> >
> > http://woolfel.blogspot.com/2006/04/comparing-sumatra-and-drools-3.html
> >
> > when I ran a test with 20 rules with 2 conditional Elements and 5 shared
> > nodes. it was 1.1 seconds for 50K objects.
> >
> > the sample rule is probably matching fully for all 50K objects , so that
> > could explain the 20 seconds. it would be useful to get the benchmark,
> > classes and jess sample.
> >
> > peter
> >
> >
> >
> > On 4/26/06, Mark Proctor <[EMAIL PROTECTED]> wrote:
> > >
> > >
> > >
> > >
> > >
> > > ---------- Forwarded message ----------
> > > From: "Michael Neale" <[EMAIL PROTECTED] >
> > > To: [email protected]
> > > Date: Wed, 26 Apr 2006 19:53:24 +1000
> > > Subject: Re: [drools-user] reply: [drools-user] Question: about
> > drools3.0performnce
> > > and the code to invoke? I assume you have 50000 instances of
> AlarmDefine
> > > in
> > > wm? (that is implied).
> > >
> > >
> > > On 4/26/06, [EMAIL PROTECTED] <[EMAIL PROTECTED]> wrote:
> > > >
> > > >
> > > > Thanks, the whole rule file:
> > > >
> > > > package com.datangmobile.rules
> > > >
> > > > import com.datangmobile.rules.alarmdefine;
> > > > import com.datangmobile.rules.alarm;
> > > >
> > > > rule "alarmdefine"
> > > >         no-loop true
> > > >         when
> > > >                 #conditions
> > > >                 alarm(reason:alarmreason, level:alarmlevel)
> > > >                 alarmdefine(alarmreason==reason, alarmlevel!=level)
> > > >         then
> > > >                 #actions
> > > >                 alarm.setCounter();
> > > > end
> > > >
> > > > alarmdefine object:
> > > > package com.datangmobile.rules;
> > > >
> > > > public class alarmdefine {
> > > >
> > > >         private int alarmreason;
> > > >         private int alarmlevel;
> > > >         private int objtype;
> > > >         private int alarmtype;
> > > >
> > > >         public int getAlarmlevel() {
> > > >                 return alarmlevel;
> > > >         }
> > > >         public void setAlarmlevel(int alarmlevel) {
> > > >                 this.alarmlevel = alarmlevel;
> > > >         }
> > > >         public int getAlarmreason() {
> > > >                 return alarmreason;
> > > >         }
> > > >         public void setAlarmreason(int alarmreason) {
> > > >                 this.alarmreason = alarmreason;
> > > >         }
> > > >         public int getAlarmtype() {
> > > >                 return alarmtype;
> > > >         }
> > > >         public void setAlarmtype(int alarmtype) {
> > > >                 this.alarmtype = alarmtype;
> > > >         }
> > > >         public int getObjtype() {
> > > >                 return objtype;
> > > >         }
> > > >         public void setObjtype(int objtype) {
> > > >                 this.objtype = objtype;
> > > >         }
> > > > }
> > > >
> > > > alarm object:
> > > > package com.datangmobile.rules;
> > > >
> > > > public class alarm {
> > > >
> > > >         private int alarmreason;
> > > >         private int alarmlevel;
> > > >         private int objtype;
> > > >         private int alarmtype;
> > > >         private String dn;
> > > >
> > > >         static private int counter = 0;
> > > >
> > > >         public int getAlarmlevel() {
> > > >                 return alarmlevel;
> > > >         }
> > > >         public void setAlarmlevel(int alarmlevel) {
> > > >                 this.alarmlevel = alarmlevel;
> > > >         }
> > > >         public int getAlarmreason() {
> > > >                 return alarmreason;
> > > >         }
> > > >         public void setAlarmreason(int alarmreason) {
> > > >                 this.alarmreason = alarmreason;
> > > >         }
> > > >         public int getAlarmtype() {
> > > >                 return alarmtype;
> > > >         }
> > > >         public void setAlarmtype(int alarmtype) {
> > > >                 this.alarmtype = alarmtype;
> > > >         }
> > > >         public String getDn() {
> > > >                 return dn;
> > > >         }
> > > >         public void setDn(String dn) {
> > > >                 this.dn = dn;
> > > >         }
> > > >         public int getObjtype() {
> > > >                 return objtype;
> > > >         }
> > > >         public void setObjtype(int objtype) {
> > > >                 this.objtype = objtype;
> > > >         }
> > > >
> > > >         static public void setCounter(){
> > > >
> > > >                 counter++;
> > > >         }
> > > >
> > > >         static public int getCounter(){
> > > >                 return counter;
> > > >         }
> > > > }
> > > >
> > > >
> > > >
> > > > can you provide your objects that you are using, and the whole rule
> > > file?
> > > >
> > > > On 4/26/06, [EMAIL PROTECTED] <[EMAIL PROTECTED] >
> wrote:
> > > > >
> > > > > Dear user group:
> > > > >
> > > > >         I have a queston about the performance of drools3.0.
> > > > >      My only one rule is:
> > > > >
> > > > >      rule "alarmdefine"
> > > > >      no-loop true
> > > > >      when
> > > > >      #conditions
> > > > >      alarm(reason:alarmreason, level:alarmlevel)
> > > > >      alarmdefine(alarmreason==reason, alarmlevel!=level)
> > > > >      then
> > > > >      #actions
> > > > >      alarm.setCounter();?
> > > > >      end
> > > > >
> > > > >      My eviroment:  eclipse3.2M5, jdk1.4.2-03
> > > > >         Testcode is :
> > > > >
> > > > >                    for(int i=1; i<1000; i++)
> > > > >             {
> > > > >                 alarm malarm = new alarm();
> > > > >                 malarm.setAlarmreason(i);
> > > > >                 malarm.setAlarmlevel(1);
> > > > >                 malarm.setObjtype(1);
> > > > >                 malarm.setAlarmtype(1);
> > > > >               workingMemory.assertObject( malarm );
> > > > >      workingMemory.fireAllRules();
> > > > >             }
> > > > >
> > > > >      when alarmdefine exist 50000 record,  execute time is 20s
> > > > >      when alarmdefine exist 5000 recode,  execute time is 2s
> > > > >
> > > > >      Then I have done the same test with JESS, the rule is:
> > > > >
> > > > >      (defrule alarm-cleared-all
> > > > >      (alarm (alarmreason ?a) (alarmlevel ?x) )
> > > > >      (alarmdef (alarmreason ?a) (alarmlevel ?y&:(<> ?y ?x)))
> > > > >      =>
> > > > >      (call alarm setCounter)
> > > > >      )
> > > > >
> > > > >      when alarmdefine exist 50000 record, execute time is only
> 0.2s
> > > > >
> > > > >      Great difference!  Why?  What can I do?
> > > > >
> > > > >      Thanks
> > > > >      Wangwei
> > > > >
> > > >
> > >
> > >
> > >
> >
> >
>
>


//code to invoke

           for(int i=1; i<1000; i++)
           {
               alarm malarm = new alarm();
               malarm.setAlarmreason(i);
               malarm.setAlarmlevel(1);
               malarm.setObjtype(1);
               malarm.setAlarmtype(1);
               workingMemory.assertObject( malarm );
               workingMemory.fireAllRules();
           }

    //when alarmdefine exist 50000 record,  execute time is 20s
    //when alarmdefine exist 5000 recode,  execute time is 2s


--------JESS code -----------------
    Then I have done the same test with JESS, the rule is:

    (defrule alarm-cleared-all
    (alarm (alarmreason ?a) (alarmlevel ?x) )
    (alarmdef (alarmreason ?a) (alarmlevel ?y&:(<> ?y ?x)))
    =>
    (call alarm setCounter)
    )


---------- The beans follow ------------------

>package com.datangmobile.rules
>
>import com.datangmobile.rules.alarmdefine;
>import com.datangmobile.rules.alarm;
>
>rule "alarmdefine"
>       no-loop true
>       when
>               #conditions
>               alarm(reason:alarmreason, level:alarmlevel)
>               alarmdefine(alarmreason==reason, alarmlevel!=level)
>       then
>               #actions
>               alarm.setCounter();
>end
>
>alarmdefine object:
>package com.datangmobile.rules;
>
>public class alarmdefine {
>
>       private int alarmreason;
>       private int alarmlevel;
>       private int objtype;
>       private int alarmtype;
>
>       public int getAlarmlevel() {
>               return alarmlevel;
>       }
>       public void setAlarmlevel(int alarmlevel) {
>               this.alarmlevel = alarmlevel;
>       }
>       public int getAlarmreason() {
>               return alarmreason;
>       }
>       public void setAlarmreason(int alarmreason) {
>               this.alarmreason = alarmreason;
>       }
>       public int getAlarmtype() {
>               return alarmtype;
>       }
>       public void setAlarmtype(int alarmtype) {
>               this.alarmtype = alarmtype;
>       }
>       public int getObjtype() {
>               return objtype;
>       }
>       public void setObjtype(int objtype) {
>               this.objtype = objtype;
>       }
>}
>
>alarm object:
>package com.datangmobile.rules;
>
>public class alarm {
>
>       private int alarmreason;
>       private int alarmlevel;
>       private int objtype;
>       private int alarmtype;
>       private String dn;
>
>       static private int counter = 0;
>
>       public int getAlarmlevel() {
>               return alarmlevel;
>       }
>       public void setAlarmlevel(int alarmlevel) {
>               this.alarmlevel = alarmlevel;
>       }
>       public int getAlarmreason() {
>               return alarmreason;
>       }
>       public void setAlarmreason(int alarmreason) {
>               this.alarmreason = alarmreason;
>       }
>       public int getAlarmtype() {
>               return alarmtype;
>       }
>       public void setAlarmtype(int alarmtype) {
>               this.alarmtype = alarmtype;
>       }
>       public String getDn() {
>               return dn;
>       }
>       public void setDn(String dn) {
>               this.dn = dn;
>       }
>       public int getObjtype() {
>               return objtype;
>       }
>       public void setObjtype(int objtype) {
>               this.objtype = objtype;
>       }
>
>       static public void setCounter(){
>
>               counter++;
>       }
>
>       static public int getCounter(){
>               return counter;

Reply via email to