[rules-users] How to make this rule more memory efficient?

Wolfgang Laun wolfgang.laun at gmail.com
Tue Apr 27 09:58:36 EDT 2010


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 <TSwindells at nds.com>:
> You should probably restrict it so that
>
> $cell2 : Cell(this != $cell1)
>
>
>
> Thomas
>
>
>
> From: rules-users-bounces at lists.jboss.org
> [mailto:rules-users-bounces at lists.jboss.org] On Behalf Of Ryan Fitzgerald
> Sent: 26 April 2010 15:34
> To: rules-users at 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
> postmaster at 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
> postmaster at 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 at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/rules-users
>
>




More information about the rules-users mailing list