[rules-users] Performance of compiler

Christian Nedregård christian_nedregaard at email.com
Fri Apr 17 04:18:37 EDT 2009


Hi.

My environment: Win XP SP3, 2x2.13 GHz cpu, 3GB RAM, Drools 4.0.7, JDK
1.4.2_11, java compiler: JANINO, dialect: java.

We have about 850 drl's with 5 - 10 conditions in each. 0 -2 evals in each.
The drl's only contain one rule each.

We are using Drools programatically by compiling the drls using
PackageBuilder.addPackageFromDrl and adding them to a RuleBase using
RuleBase.addPackage(PackageBuilder.getPackage())

When we are building our rule base we are never able to compile more than 1
-2 rules per second, which means we need over 10 minutes (at 100% cpu) to
build our rulebase.

Profiling shows 68% cpu time in
org.drools.rule.builder.GroupElementBuilder.build and 18% cpu time in
org.codehaus.janino.Compiler.compile.

We have experimented by changing the compiler to ECLIPSE and the dialect to
mvel but the results are the same.

We have experimented using one PackageBuilder instance per drl or grouping
drls by package and sharing a builder per package. Same result in both
scenarios.

We have also expermimented with compiling concurrently in serveral threads.
Again, about the same result.

My question is: Is this the performance we can expect from the compiler or
are we doing something fundamentally wrong?

Below is an example of one of our drls. This one contains no evals, but
still takes more than 1 second to compile. If anyone can spot some issues
with the way we are doing things the feedback would be much apreciated :)

------------------------------------
package domain.core.productoffer.rules.subscriptiontype

import type.productoffer.ProductOfferRuleEvent
import domain.core.subscription.Subscription
import domain.core.subscription.SubscribedService
import type.subscription.ActionTypeEnum
import domain.core.productoffer.ProductOffer
import domain.rules.RuleEvent

global domain.core.productoffer.RuleValidationReport validationResult


rule "RequiredVProducts"
    when
        ProductOfferRuleEvent(id == '3')
        ProductOffer(id.value  == 31963)

        $subscription:Subscription()

        not (  SubscribedService(status != ActionTypeEnum.REMOVE_CANCEL &&
productId.value in (57, 69) ) from
$subscription.getAllChildSubscribedServices())
    then
        validationResult.addValidationMessage("2069", "For product offer
rule event with id '3' and product offer with id=31963 subscription must
have one of the following VProducts: 57, 69.");
end
------------------------------------

Regards
Christian Nedregård
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/rules-users/attachments/20090417/1b326d9f/attachment.html 


More information about the rules-users mailing list