laune wrote
On 20/01/2014, pmander lt;
paul.s.mander@
gt; wrote:
I could do this:
when
$t : Transaction((org == us) || (expensive() == 111))
then
insert(new Record($t, 1));
end
Yes, that takes care of the unwanted duplication.
If org is indeed equal to us is it guaranteed that expensive() doesn't
get
executed?
You can test this quite easily: add a print to expensive().
-W
I quick related question regarding performance. I now have
rule 3
when
$t : Transaction(
(
(
fieldFor(SALES_ORG)==SO10167
fieldFor(CHANNEL)==A
fieldFor(ONLINE_IND)==N
colMatch(rulesMap,3,2000,baseData,PRODUCT,0)
) ||
(
fieldFor(CHANNEL)==A
fieldFor(ONLINE_IND)==N
fieldFor(ACCOUNT)
in(A11329,A11330,A11331,A11332,A11333,A11334,A11335,A11336)
colMatch(rulesMap,3,2000,baseData,PRODUCT,0)
)
)
)
then
do something
end
instead of
rule 3
when
$t : (
Transaction(
fieldFor(CHANNEL)==A,
fieldFor(ONLINE_IND)==N,
fieldFor(SALES_ORG)==SO10167,
colMatch(rulesMap,3,1370,baseData,PRODUCT,0))
or
Transaction(
fieldFor(CHANNEL)==A,
fieldFor(ONLINE_IND)==N,
fieldFor(ACCOUNT)
in(A11329,A11330,A11331,A11332,A11333,A11334,A11335,A11336),
colMatch(rulesMap,3,2000,baseData,PRODUCT,0)
)
then
do something
end
I would have thought that the first was slight better performance wise as
the second produces twice as many matches which I need to filter out but
putting 20,000 Transactions through this (2400 rules) takes 51 seconds for
option 2 and 200 seconds for option 1.
If I just have the first half of the rule:
$t : (
Transaction(
fieldFor(CHANNEL)==A,
fieldFor(ONLINE_IND)==N,
fieldFor(SALES_ORG)==SO10167,
colMatch(rulesMap,3,1370,baseData,PRODUCT,0))
then
do something
end
then the performance is 10 seconds. The extra time being taken up with all
those other or mis-matches.
--
View this message in context:
http://drools.46999.n3.nabble.com/named-consequences-for-an-or-tp4027775p4027792.html
Sent from the Drools: User forum mailing list archive at Nabble.com.
___
rules-users mailing list
rules-users@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users