<quote> It is rather common for people to write something like "(not (exists (A)))," but this is just a very inefficient way to write (not (A)). </quote>
Kudos to Ernest Friedman-Hill to put this sentence into the Jess documentation. Maybe I should quote hiom in the Drools Expert doc ;-) -W On Fri, Aug 21, 2009 at 11:11 PM, Shah, Malay <[email protected]>wrote: > May be I have not put the question right. We have a drool rule that is > running extremely slow for large sets of data. The rule is something like: > > For every object A, perform action if there does not exist an object B such > that A.id = B.id. > And the corresponding drool rule is as follows: > > when > A() > not(exists B(A.id = id)) > then > action...... > > The performance is bad because of not exists clause here. We have got OOM > exceptions with relatively large amounts of data for this rule. To improve > performance, we basically hacked the rule/code into something like this: > > Create a global variable x that is a HashSet of all ids of object A, and > the drool rule now is: > > global java.util.HashSet x; > when > B() > eval > ( > ! (x.contains(b.id) ) > ) > then > action..... > > This obviously is performing much better with hashes involved. But, I don't > like the fact that we have to write the logic of this rule at two places. I > would rather create this variable x (don't care whether it is global or > temporarily bound) in the rule itself and use it in the condition to help > performance and have all logic for the rule at one place. > > Is there a way to generate this hashset x in the condition part of the rule > itself? Yes, I understand that I am trying to mix up the procedural part of > code with drool code. But, I was just wondering if this is possible to keep > the java code clean and have the intelligence of information that the rule > needs to be evaluated in the rule itself. > > Hope this clears some doubts. > > Thanks > > Malay Shah > > -----Original Message----- > From: [email protected] [mailto: > [email protected]] On Behalf Of Greg Barton > Sent: Friday, August 21, 2009 4:44 PM > To: Rules Users List > Subject: Re: [rules-users] populating global variable in Condition Section? > > This is a galactically bad idea. Using a global in this way is inherently > unsafe as there's no guarantee that ebtween the time you set the var and > when it's used later in the condition that the value is the same. What is > your reason for wanting to use a global in this way? You should use a > temporary bound variable instead. > > --- On Fri, 8/21/09, Shah, Malay <[email protected]> wrote: > > > From: Shah, Malay <[email protected]> > > Subject: [rules-users] populating global variable in Condition Section? > > To: [email protected] > > Date: Friday, August 21, 2009, 3:19 PM > > > > > > > > > > > > > > Hi, > > > > Is it possible > > to populate a global variable in > > the condition section of the > > drool rule, and use it later in the condition itself? > > I currently have a > > global HashSet variable that I construct before firing the rule, but I > > would like this code of constructing this global variable to be with > > the drool rule itself. Any help on this would be much appreciated. > > > > Thanks > > > > Malay > > > > > > > > NOTICE: If received in error, please > > destroy, and notify sender. Sender does not intend to waive > > confidentiality or privilege. Use of this email is > > prohibited when received in error. We may monitor and store emails to the > extent > > permitted by applicable law. > > > > > > -----Inline Attachment Follows----- > > > > _______________________________________________ > > rules-users mailing list > > [email protected] > > https://lists.jboss.org/mailman/listinfo/rules-users > > > > > > > _______________________________________________ > rules-users mailing list > [email protected] > https://lists.jboss.org/mailman/listinfo/rules-users > > -------------------------------------------------------------------------- > NOTICE: If received in error, please destroy, and notify sender. Sender > does not intend to waive confidentiality or privilege. Use of this email is > prohibited when received in error. We may monitor and store emails to the > extent permitted by applicable law. > > _______________________________________________ > rules-users mailing list > [email protected] > https://lists.jboss.org/mailman/listinfo/rules-users >
_______________________________________________ rules-users mailing list [email protected] https://lists.jboss.org/mailman/listinfo/rules-users
