Thanks Wolfgang. Should I conclude therefore that high memory usage is unavoidable due to the number of facts that must be processed? I was hoping that there might be a clever way of writing the rules so that the rules engine can minimise the network it generates - even if it takes a little longer to execute.
All of the facts are read from a database and thus loaded into working memory. My fallback position is to not load all these objects into working memory but instead embed into a rule, a service call that queries the db for all inconsistencies (effectively using SQL instead of a drools rule). However, since I will have other rules that operate on these objects in working memory, I was hoping to use these facts for all rules. /Ryan. -----Original Message----- From: rules-users-boun...@lists.jboss.org [mailto:rules-users-boun...@lists.jboss.org] On Behalf Of Wolfgang Laun Sent: 27 April 2010 14:59 To: Rules Users List Subject: Re: [rules-users] How to make this rule more memory efficient? 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 <tswinde...@nds.com>: > You should probably restrict it so that > > $cell2 : Cell(this != $cell1) > > > > Thomas > > > > From: rules-users-boun...@lists.jboss.org > [mailto:rules-users-boun...@lists.jboss.org] On Behalf Of Ryan > Fitzgerald > Sent: 26 April 2010 15:34 > To: rules-users@lists.jboss.org > 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 postmas...@nds.com 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 > postmas...@nds.com 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 > rules-users@lists.jboss.org > https://lists.jboss.org/mailman/listinfo/rules-users > > _______________________________________________ rules-users mailing list rules-users@lists.jboss.org https://lists.jboss.org/mailman/listinfo/rules-users _______________________________________________ rules-users mailing list rules-users@lists.jboss.org https://lists.jboss.org/mailman/listinfo/rules-users