If there are n Cell facts, $cell1 : Cell() $cell2 : Cell() needs to create n*n pairs in the network before any reduction may set in. Using $cell2 : Cell(this != $cell1) reduces this by n, so we're still quadratic. Something like $cell1 : Cell( $id1 : id ) $cell2 : Cell( id > $id1 ) reduces it to n*(n-1)/2 which is less than 50% of the original, but still quadratic.
-W 2010/4/26 Swindells, Thomas <[email protected]>: > You should probably restrict it so that > > $cell2 : Cell(this != $cell1) > > > > Thomas > > > > From: [email protected] > [mailto:[email protected]] On Behalf Of Ryan Fitzgerald > Sent: 26 April 2010 15:34 > To: [email protected] > Subject: [rules-users] How to make this rule more memory efficient? > > > > Hi, > > > > Can anyone advise me on how to make a drools rule more memory efficient? > Here is the problem: > > > > I have a Cell and a ProxyCell object classes. > > > > The ProxyCell represents the Cell when their internal ID's match. > > > > Each Cell and ProxyCell however has a unique name (not same as ID). > > > > A Cell can reference (by name) a ProxyCell (as long as the ProxyCell does > not represent that actual Cell - which would effectively be a self-reference > and is not allowed). > > > > What I want to do is find out where I have a reference from any instance of > Cell - cell1 - to any instance of ProxyCell - proxycell2 - but am missing a > reference from cell2 to proxycell1 where proxycell2 is a representation of > cell2 and proxycell1 is a representation of cell1. > > > > Here is the rule I have written for it: > > > > rule "Check consistent references" > > when > > $cell1 : Cell() > > $cell2 : Cell() > > $proxycell1 : ProxyCell ( id = $cell1.id, $cell2.references contains > this.name ) > > $proxycell2 : ProxyCell ( id = $cell2.id, $cell1.references not > contains this.name ) > > then > > //report an error..... > > end > > > > > > I have 10,000 instances of Cell and 10,000 instances of ProxyCell in working > memory. For each instance of Cell, it can have references to 60 different > ProxyCell instances. Loading the Cell and ProxyCell instances into working > memory is not a problem. However, when I try to run this rule above, the > memory quickly goes above 1GB and I eventually get an out of memory error. > > > > I was wondering if there is a better way to structure or write this rule so > that it doesn't use so much memory. > > > > Thanks, > > Ryan. > > > > ________________________________ > ************************************************************************************** > This message is confidential and intended only for the addressee. If you > have received this message in error, please immediately notify the > [email protected] and delete it from your system as well as any copies. The > content of e-mails as well as traffic data may be monitored by NDS for > employment and security purposes. To protect the environment please do not > print this e-mail unless necessary. > > NDS Limited. Registered Office: One London Road, Staines, Middlesex, TW18 > 4EX, United Kingdom. A company registered in England and Wales. Registered > no. 3080780. VAT no. GB 603 8808 40-00 > ************************************************************************************** > > ________________________________ > This message is confidential and intended only for the addressee. If you > have received this message in error, please immediately notify the > [email protected] and delete it from your system as well as any copies. The > content of e-mails as well as traffic data may be monitored by NDS for > employment and security purposes. > To protect the environment please do not print this e-mail unless necessary. > > An NDS Group Limited company. www.nds.com > > _______________________________________________ > 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
