[rules-users] Is RETE algo optimizes the performance in a stateless session.

Harshit Bapna hrbapna at gmail.com
Mon Sep 27 05:44:06 EDT 2010


Hi All,

Thanks to Leo and Mark for the help...
Please find my comments(blue) inline.

Crisp question:
*Is there any functionality in drools where I can run the rules(stateless
session) in parallel threads to increase the throughput ?*
Note: The rules actions won't change the facts/data such that it would
require running of the rules again. Hence I came to this conclusion that
stateless sessions are required.

2010/9/24 Leonardo Gomes <leonardo.f.gomes at gmail.com>

> Hello Harshit / Mark,
>
> My reasoning behind the yes, is that:
>
> - If you have 10 rules that won't necessarily always match, it's better to
> use Rete, than sequentially match one-by-one. The tree structure with the
> sharing of nodes for different rules seems to always be a better approach
> for me, than sequentially testing one-by-one and, in some cases, retesting
> the same condition on different rules (if that happens);
>
> In my use case, the overlap of sub-conditions is not much. There would be
only few conditions which will have common sub conditions and the no of sub
conditions would be max 5.
After reading the articles, I agree with Leo that still its better to use
RETE than sequentially testing one by one.

Also the rules actions won't change the facts/data such that it would
require running of the rules again. Hence I came to this conclusion that
stateless sessions are required.

I have jotted down the applicable reasons for me to use the rule engine
(based on my readings on drools & rete) :
1. separation of business logic from application logic.
2. rules are flexible and likely to be changed overtime.

My requirements would be satisfied by using stateless session functionality
of drools.
Questions:
*Is there any functionality in drools where I can run the rules in parallel
thread to increase the throughput ?*
(I can use java threads to run the rules separately in different threads but
would like to know if there is any optimization approach in drools for
stateless sessions)

- You can write if-then-elses in a imperative language and perform better
> than Rete, but if your rules are complicated and you have many of them, it's
> likely that rete can do a better job; Also, if you need to change your rules
> or add new ones, it will be easier to do that declaratively;
>
> I think here you are suggesting that using a rule engine would be better.
(based on ur comments on the need to change rules, add new ones)

I first put the links, because you can use that to judge yourself whether or
> not you might gain in performance in your own scenarios, with that material.
>
> Thanks Leo. It really helped me to improve my understanding of the
algorithm.

>
> @Mark:
>
> In general a stateless session is just a convenience api for stateful, it
>> just wraps. So no performance gain at all.
>
>
> I think here you're saying that there will be no performance gain compared
> to a stateful session, but I believe that the question was more on the lines
> of "I know that with a stateful it's efficient, how about stateless". I
> tried to say that, yes, it's also worth using Rete in stateless scenarios.
>
>  Mark, I meant the same what Leo explained.

Cheers,
> Leo.
>
> 2010/9/24 Mark Proctor <mproctor at codehaus.org>
>
>  On 24/09/2010 16:18, Leonardo Gomes wrote:
>>
>> Have a look here: http://www.drdobbs.com/184405218
>>
>> here: http://blog.athico.com/2007/07/sequential-rete.html
>>
>> and here: http://herzberg.ca.sandia.gov/guidelines.shtml
>>
>> The easy answer for your question is "Yes" ;-)
>>
>> It depends :)
>>
>> In general a stateless session is just a convenience api for stateful, it
>> just wraps. So no performance gain at all.
>>
>> There is a "sequential" mode, but in all honest you won't get any
>> measurable perf gain. So I wouldn't use sequential mode for performance, the
>> only reason to use it is if you want your rules to execute sequentially.
>>
>> Mark
>>
>>
>> Cheers,
>> Leo.
>>
>>  2010/9/24 Harshit Bapna <hrbapna at gmail.com>
>>
>>> Hi All,
>>>
>>> In a scenario where lets say 10 rule are to be fired (in any order) in a
>>> stateless session than will I get the benefits of RETE algorithm (i.e
>>> increased performance).
>>> i.e Whether the engine will fire all the ten results in a parallel
>>> fashion or Whether the engine will file each rule one by one.
>>>
>>> How RETE algorithm will improve the performance of the engine for rules
>>> fired in stateless session ?
>>>
>>>
>>> _______________________________________________
>>> rules-users mailing list
>>> rules-users at lists.jboss.org
>>> https://lists.jboss.org/mailman/listinfo/rules-users
>>>
>>>
>>
>> _______________________________________________
>> rules-users mailing listrules-users at lists.jboss.orghttps://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
>>
>>
>
> _______________________________________________
> rules-users mailing list
> rules-users at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/rules-users
>
>


-- 
-- Harshit Bapna
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/rules-users/attachments/20100927/50c4da6e/attachment.html 


More information about the rules-users mailing list