Of course, I had to test that assertion. :) $ java -Xmx128M -server -jar target/DroolsExistence-1.0.jar not.drl 50000 25000 2395ms $ java -Xmx1024M -server -jar target/DroolsExistence-1.0.jar not_exists.drl 50000 25000 121378ms
You ain't kiddin'! 50x slower requiring 9x the memory. --- On Fri, 8/21/09, Wolfgang Laun <[email protected]> wrote: > From: Wolfgang Laun <[email protected]> > Subject: Re: [rules-users] populating global variable in Condition Section? > To: "Rules Users List" <[email protected]> > Date: Friday, August 21, 2009, 4:54 PM > <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 > > > > > -----Inline Attachment Follows----- > > _______________________________________________ > rules-users mailing list > [email protected] > https://lists.jboss.org/mailman/listinfo/rules-users >
DroolsExistence.tar.gz
Description: GNU Zip compressed data
_______________________________________________ rules-users mailing list [email protected] https://lists.jboss.org/mailman/listinfo/rules-users
