[rules-users] field binding performance implications
Edson Tirelli
tirelli at post.com
Thu Mar 22 10:30:20 EDT 2007
Probably I misinterpreted you. :)
You are saying you want the ability to change the templates in order
to generate different rules? If so, probably better to keep template
based generating DRL.
I thought you would have a GUI application for the user to define
your rules with pre-defined templates... in that case, using descriptors
would sabe you the parsing time.
But not really a big difference. So, go with templates and use the
parser. No problem in doing that.
[]s
Edson
Olenin, Vladimir (MOH) wrote:
>I see. The problem though is the logic and 'rule composition' is different
>for each group of rules and is NOT data driven (client doesn't want the
>logic to be present in the input data). From what I understand generating
>descriptors directly would make me define the logic inside the 'parser' or
>at the very least somewhere in Java code, unless I opt out for a separate
>text format to describe 'just' the logic. But it seems like it'd be more
>complicated than generating drl file directly...
>
>Thanks for the suggestion though - I'll think it over again - probably I've
>just misinterpreted you...
>
>Vlad
>
>
>-----Original Message-----
>From: rules-users-bounces at lists.jboss.org
>[mailto:rules-users-bounces at lists.jboss.org] On Behalf Of Edson Tirelli
>Sent: 21 March 2007 19:17
>To: Rules Users List
>Subject: Re: [rules-users] field binding performance implications
>
>
> Vlad,
>
> Looking at the macro steps, when you load and run rules in the
>engine, that is what happens:
>
>* PARSING: a parser, will parse whatever syntax you are using into an
>AST tree. The objects that compound that tree are the descriptors I'm
>talking about.
>* BUILDING: a rule builder will transform your descriptors (AST Tree)
>into the internal rules representation, doing all the code generation
>and compiling it into binary form.
>* RETE-BUILDING: a ReteOO builder will get your compiled rules
>representation and transform into a Rete network, making it ready for
>execution
>
> So, basically, descriptors are the result of the parsing. If you are
>generating rules, better to skip the parsing phase and generate
>descriptors directly. Also, we aim to have full round-trip between
>supported semantics. That means that from the descriptors, you can
>generate DRL, XML, CLP, or whatever syntax you have a dumper for.
>
> Having said all that, you can find the descriptors in the package:
>org.drools.lang.descr in the drools-compiler project. Documentation is
>not good (any volunteers? :)), but they are pretty simple to use, so you
>will have no problems understanding them. Also, if you don't know how to
>represent something using descriptors, it is easy to find out. Just
>write a DRL that does what you want to know how and use the package
>builder to get the descriptors for you to see:
>
> DrlParser parser = new DrlParser();
> final PackageDescr pkgDescr = parser.parse( new
>InputStreamReader( getClass().getResourceAsStream( "test_rules.drl" ) ) );
>
> Hope it helps.
>
> []s
> Edson
>
>
>Olenin, Vladimir (MOH) wrote:
>
>
>
>>Hmm... Descriptors? What is this?
>>
>>-----Original Message-----
>>From: rules-users-bounces at lists.jboss.org
>>[mailto:rules-users-bounces at lists.jboss.org] On Behalf Of Edson Tirelli
>>Sent: 21 March 2007 16:47
>>To: Rules Users List
>>Subject: Re: [rules-users] field binding performance implications
>>
>> Vlad,
>>
>>Didn't tested myself, but I don't see a reason for performance impacts
>>adding unneeded declarations, except for consuming a bit more of memory,
>>but I would say would be negligible in the numbers you provided.
>>Although, may I suggest that you generate Descriptors instead of DRL?
>>This will give you gains in parsing time (as there will not be parsing),
>>besides being easier than using string templates IMO. Also, if you want
>>to store a "text" based version of your rules, you can simply use a
>>dumper to dump wherever syntax you prefer.
>>
>>[]s
>>Edson
>>
>>
>>
>>Olenin, Vladimir (MOH) wrote:
>>
>>
>>
>>
>>
>>>Hi,
>>>
>>>We need to generate drl file from a template. Since the format of the
>>>rules parameters doesn't fall very well within decision table concept
>>>(the parameters are not 'homogeneous', so each row in the input excel
>>>table can mean different things), we decided to define the rules by
>>>automatically generating drl files from a set of templates. To cover
>>>more cases with a single template we'd need to bind every field of
>>>column by default, even if the binding would not be used.
>>>
>>>For example (Freemarker syntax is used in the template below):
>>>
>>>Rule ${ruleId}
>>>
>>>When
>>>
>>>Record ( $account : account ${operation} ${value} )
>>>
>>>....
>>>
>>>Then
>>>
>>>.....
>>>
>>>End
>>>
>>>In the example above, 'operation', 'value' and 'ruleId' are objects in
>>>the data model that we merge with the template. One case of the rule
>>>would be when both 'operation' and 'value' are empty strings. This
>>>will result in this LHS: Record ( $account : account ). Another case
>>>might be when 'operation' is '==' string and 'value' is '1': Record (
>>>$account : account == 1 ).
>>>
>>>The above is a simplified template to demonstrate the point. The real
>>>business data model for facts (Record object) would have around 10
>>>fields and we can have ~ 5 to 10 columns per rule. I wonder what kind
>>>of performance implications does field binding bring? Are there any or
>>>this is being optimized / filtered out by some preprocessor?
>>>
>>>In other words, is there significant difference in performance for the
>>>following LHS expressions:
>>>
>>>1) Record ( $account : account, $name : name == 'xxx', $balance :
>>>balance > 100, ....)
>>>
>>>Vs
>>>
>>>2) Record (name == 'xxx', balance > 100, ....)
>>>
>>>Providing the functionality of both of these LHS expressions is the
>>>same and field bindings in LHS #1 are never used throughout the rule.
>>>
>>>Thanks,
>>>
>>>Vlad
>>>
>>>------------------------------------------------------------------------
>>>
>>>_______________________________________________
>>>rules-users mailing list
>>>rules-users at lists.jboss.org
>>>https://lists.jboss.org/mailman/listinfo/rules-users
>>>
>>>
>>>
>>>
>>>
>>>
>>
>>
>>
>>
>
>
>
>
--
Edson Tirelli
Software Engineer - JBoss Rules Core Developer
Office: +55 11 3124-6000
Mobile: +55 11 9218-4151
JBoss, a division of Red Hat @ www.jboss.com
More information about the rules-users
mailing list