On Thu, Jan 21, 2010 at 7:16 PM, Greg Barton <
greg_barton@yahoo.com> wrote:
> 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@yahoo.com> wrote:
>
>> From: Greg Barton <
greg_barton@yahoo.com>
>> Subject: Re: [rules-users] drools performance with <
>> To: "Rules Users List" <
rules-users@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@gmail.com>
>> wrote:
>>
>> > From: Tom Carchrae <
carchrae@gmail.com>
>> > Subject: [rules-users] drools performance with <
>> > To:
rules-users@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@lists.jboss.org
>> >
https://lists.jboss.org/mailman/listinfo/rules-users
>> >
>>
>>
>>
>>
>> _______________________________________________
>> rules-users mailing list
>>
rules-users@lists.jboss.org
>>
https://lists.jboss.org/mailman/listinfo/rules-users
>>
>
>
>
>
> _______________________________________________
> rules-users mailing list
>
rules-users@lists.jboss.org
>
https://lists.jboss.org/mailman/listinfo/rules-users
>
_______________________________________________
rules-users mailing list
rules-users@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users