[rules-users] drools performance with <

Greg Barton greg_barton at yahoo.com
Thu Jan 21 22:16:02 EST 2010


pit->out

That falls into a rare class: two letter typos that pass a spell checker. :)

--- On Thu, 1/21/10, Greg Barton <greg_barton at yahoo.com> wrote:

> From: Greg Barton <greg_barton at yahoo.com>
> Subject: Re: [rules-users] drools performance with <
> To: "Rules Users List" <rules-users at lists.jboss.org>
> Date: Thursday, January 21, 2010, 9:04 PM
> This is not at all surprising. 
> To set up and run the rules there's quite a bit of code
> running behind the scenes besides just the comparison test.
> (For instance, there's object creation just to track the
> fact that two objects matched the rule, and in this case
> those objects are created for every possible combination of
> TestObject instances before the first rule ever fires, then
> added to lists, and so on...  So in the case of 1000
> TestObject instances, there's 1,000,000 object creations and
> list additions just for that.) 
> 
> So, as has been said many times on this list, and probably
> in a few blogs, for any given algorithm a hard coded java
> version will invariably be faster than rules.  What
> rules gives you is a way to express solutions to complex
> problems in a flexible and comprehensible way.  It
> shines when the problems are so complex that coding them
> procedurally is pit of the question.
> 
> The same relationship is there between C and java. 
> Java gives you managed, portable code, but for that you give
> up the raw speed of C.
> 
> --- On Thu, 1/21/10, Tom Carchrae <carchrae at gmail.com>
> wrote:
> 
> > From: Tom Carchrae <carchrae at gmail.com>
> > Subject: [rules-users] drools performance with <
> > To: rules-users at lists.jboss.org
> > Date: Thursday, January 21, 2010, 6:40 PM
> > Hello,
> > 
> > I'm new to Drools and am trying it out.  I've found
> it
> > easy enough so
> > far, but quickly ran into a performance bottleneck. 
> > (perhaps an all
> > too familiar story! :) ).  So, I made a simple
> example
> > to try and
> > track down the behavior.  Here it is.
> > 
> > I wanted to create a rule that uses an <
> comparison
> > between pairs of
> > objects.  The following are the performance results:
> > 
> > 10 objects.  Java comparison took 0 ms
> > 10 objects.  Rule firing took 2516 ms
> > 100 objects.  Java comparison took 0 ms
> > 100 objects.  Rule firing took 1984 ms
> > 1000 objects.  Java comparison took 47 ms
> > 1000 objects.  Rule firing took 132500 ms
> > 10000 objects.  Java comparison took 4641 ms
> > 10000 objects. Rule firing took .... (please wait...)
> > 
> > Here is the rule
> > 
> > rule "A < B"
> >     when
> >         a : TestObject( 
> > )
> >         b : TestObject(
> > valueDouble < a.valueDouble )
> >     then
> >        
> > b.setValueint(b.getValueint()+1);    
> > end
> > 
> > Now, I do understand that this (worst-case) is a
> comparison
> > of N x N
> > objects... so, 1000 = 1000000 comparisons.  However,
> > ~100ms per
> > comparison seems relatively expensive for such a
> simple
> > check.  I am
> > using StatefulKnowledgeSession (I tried Stateless but
> this
> > gave only a
> > mild performance improvement - and I would also like
> to use
> > insert in
> > some of my rules).
> > 
> > How would one speed up such a query?  I know part of
> > the problem is
> > the < comparison.  The results with == are much
> > better (presumably, it
> > can do lots of pruning of the space)
> > 
> > Model creation 0
> > 10 objects.  Rule firing took 2829 ms
> > 100 objects.  Rule firing took 93 ms
> > 1000 objects.  Rule firing took 657 ms
> > 10000 objects.  Rule firing took 3375 ms
> > 100000 objects.  Rule firing took 33266 ms
> > 
> > I have thought about clever tricks that I could do to
> try
> > and speed
> > things up, like sorting into groups, etc.  But it
> all
> > seems relatively
> > convoluted.  Am I correct in coming to the
> conclusion
> > that a <
> > comparison is not the kind of thing that you should do
> in
> > Drools?
> > 
> > How would you go about this?  I would prefer to keep
> > all the logic in
> > the DRL files.  I'm guessing you do a Java based
> > comparison and use a
> > fire-once rule to invoke this code.
> > 
> > Thanks in advance for any insight,
> > 
> > Tom
> > _______________________________________________
> > rules-users mailing list
> > rules-users at lists.jboss.org
> > https://lists.jboss.org/mailman/listinfo/rules-users
> > 
> 
> 
>       
> 
> _______________________________________________
> 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